在Intellij Idea中,有一項功能。假設我在我的代碼中使用了一個變量myCamelCase
。然後如果我輸入mCC
並按Ctrl - 輸入或某些這樣的組合鍵,它將擴展爲myCamelCase
。 Vim中有類似的東西嗎?CamelCase在Intellij Idea等Vim中的擴展?
5
A
回答
8
好的,原諒我回答兩次,但自從我第一次嘗試錯過了這一點,我會再去一次。這比我想象的要複雜得多,但可能並不像我所做的那樣複雜(!)。
現在修改爲建議所有匹配的變量名稱。
首先,這裏有一個函數生成從「myCamelCase」字符串「MCC」縮寫:
function! Camel_Initials(camel)
let first_char = matchstr(a:camel,"^.")
let other_char = substitute(a:camel,"\\U","","g")
return first_char . other_char
endfunction
現在,這裏是需要的縮寫(「MCC」)的功能和掃描當前緩衝區(從當前行向後)爲具有此縮寫的「詞」。返回A的所有比賽的名單:
function! Expand_Camel_Initials(abbrev)
let winview=winsaveview()
let candidate=a:abbrev
let matches=[]
try
let resline = line(".")
while resline >= 1
let sstr = '\<' . matchstr(a:abbrev,"^.") . '[a-zA-Z]*\>'
keepjumps let resline=search(sstr,"bW")
let candidate=expand("<cword>")
if candidate != a:abbrev && Camel_Initials(candidate) == a:abbrev
call add(matches, candidate)
endif
endwhile
finally
call winrestview(winview)
if len(matches) == 0
echo "No expansion found"
endif
return sort(candidate)
endtry
endfunction
接下來,這裏有一個自定義完成功能光標下讀取單詞,並建議通過上述函數返回的比賽:
function! Camel_Complete(findstart, base)
if a:findstart
let line = getline('.')
let start = col('.') - 1
while start > 0 && line[start - 1] =~ '[A-Za-z_]'
let start -= 1
endwhile
return start
else
return Expand_Camel_Initials(a:base)
endif
endfunction
要使用此功能,您必須定義「completefunc」:
setlocal completefunc=Camel_Complete
要使用插入模式完成,類型CTRL-XCTRL-U,但我通常這個映射到CTRL-L:
inoremap <c-l> <c-x><c-u>
有了這個代碼,在vimrc你會發現,打字,然後mCC
CTRL-L將進行預期替換。如果未找到匹配的擴展名,則縮寫不變。
該代碼不是防水的,但它適用於我測試的所有簡單案例。希望能幫助到你。讓我知道是否需要澄清。
0
在Vim中有一個插件叫做vim-abolish。使用地圖crc
擴大到駱駝案件。
相關問題
- 1. Intellij IDEA類文件擴展
- 2. Intellij-idea - 擴展Groovy類時給錯誤
- 3. IntelliJ IDEA Vim喜歡編輯
- 4. 無法粘貼到Vim的Intellij Idea中
- 5. 如何在Intellij IDEA中擴展摺疊包裝鏈?
- 6. IntelliJ Idea Vim的行爲是奇怪的
- 7. 一次爲不同的環境實現Lombok擴展(javac,Eclipse,IntelliJ IDEA等)
- 8. .vimrc for IntelliJ Idea的vim插件
- 9. 等效於Intellij Idea中的ido模式
- 10. 如何從IntelliJ IDEA搜索中排除文件擴展名?
- 11. 在IntelliJ IDEA的
- 12. 在IntelliJ IDEA的
- 13. 在IntelliJ IDEA的
- 14. 如何將新的Android Studio擴展安裝到IntelliJ IDEA
- 15. 在Intellij IDEA中模仿Vim的ScrollBind行爲
- 16. 在Intellij IDEA中,找到實現接口但不擴展其他類的類
- 17. 如何擴展IntelliJ IDEA CE代碼評估功能?
- 18. Intellij-IDEA:如果他們有錯誤,則擴展導入塊
- 19. 在Intellij Idea 10+
- 20. 在IntelliJ IDEA
- 21. 在IntelliJ Idea PhpStorm
- 22. 的IntelliJ IDEA在R.java
- 23. Intellij Idea鞦韆JFormDesigner。如何在設計器中添加擴展組件?
- 24. 如何在項目窗口Intellij IDEA中擴展文件夾分支?
- 25. 在Intellij中擴展Maven工件搜索
- 26. IntelliJ IDEA有「Ctrl」+「K」,「Ctrl」+「D」等效嗎?
- 27. Intellij Idea Lombok。 @Data等不起作用
- 28. 從IntelliJ IDEA的
- 29. 爲IntelliJ IDEA的
- 30. 在Intellij IDEA中設置openIMAJ
令人驚歎!這就是我所能說的。儘管如此,我仍然貪婪地/懶惰地向你要求更多。如果有多個可能的擴展:例如myCamelCase myCamelCart,選擇最後一個。相反,它可以像Vim中的Ctrl-P關鍵字完成一樣嗎?再次,驚人! – dharm0us
我很高興它的工作!處理多個匹配應該只是讓Expand_Camel_Initials()返回一系列解決方案,然後設置'completefunc'來讓你在兩者之間進行選擇。我會盡力在本週晚些時候看看它。 –
好的,這並不像我想的那麼痛苦......我編輯了我的答案,現在它應該可以按照你的意願工作。如果您有任何問題,請告訴我(我沒有機會正確測試)。 –