ideavim鍵盤流
- 最后更新于2019-12-06
作為一個vimer县匠,不管使用什么IDE或者編輯器风科,安裝完成后的第一步就是安裝vim插件。
我的日常開發(fā)中使用最多的就是IDEA乞旦,對應的vim插件為IdeaVim。但是其實想要在集成開發(fā)環(huán)境中順手的完成代碼的編寫兰粉,其實單單熟練vim是不夠的故痊,畢竟IDEA的功能更多更復雜玖姑。所以除了編輯文本之外,讓具體的IDE工具和vim配合起來才能達到更加完美的效率戴甩。
本篇文章的目的是闡述如何在idea中順暢的使用vim編寫代碼以及完成常規(guī)的操作。所以不會對vim的基本使用做過多的描述课蔬,如果有興趣了解vim的更多信息囱稽,請移步vim官網(wǎng)或者vimscript腳本進行了解和學習战惊。
1. 安裝ideavim
安裝的部分就不多說了,打開:設(shè)置->插件->瀏覽依賴->搜索vim安裝即可扎即。
ideavim已經(jīng)支持vim大多數(shù)的操作吞获,但是仍然是不完整實現(xiàn)。比如列表跳轉(zhuǎn)和很多不常用的命令谚鄙。此外各拷,如果vim插件和已有的快捷鍵設(shè)置有沖突,可以在vim設(shè)置中進行調(diào)整闷营,一面引起快捷鍵的混用烤黍。
2. idea的核心操作邏輯
idea畢竟是ide,有著完整的代碼開發(fā)功能傻盟。熟悉idea的設(shè)計邏輯和模塊應該也是調(diào)高效率的必走之路了速蕊。
2.1. 布局
idea的設(shè)計布局分為五部分,從上往下分別是:目錄(黃色)娘赴,toolbar(藍色)规哲,編輯區(qū)(紅色),擴展工具(綠色)诽表,tips(灰色)唉锌。詳細如圖,正常來說vim的作用范圍也就在代碼編輯區(qū)竿奏,其他的操作都需要借助idea本身來完成糊秆。
除了基本布局之外,idea總是會彈出對話框议双,比如新建文件,搜索文件等等捉片。這些對話框中的輸入操作vim是未啟用狀態(tài)平痰。所以在對話框中輸入命令時vim不會生效這一點必須清楚,避免使用的時候引起環(huán)混亂伍纫。
2.2. 邏輯
開發(fā)過idea插件的人都知道宗雇,在idea中,任何目錄選項上的點擊操作莹规,工具欄上的按鈕都會被映射為一個action
赔蒲。即點擊對應的按鈕或者選項,執(zhí)行相應的action
。理解很簡單舞虱,這就是MVC的思想欢际,比如springmvc, 一個訪問路徑映射為一個控制器中的方法這樣子矾兜。
明白action
映射這一點很重要损趋。因為ideavim的插件支持使用vim命令執(zhí)行對應的action
。所以椅寺,這個設(shè)計邏輯就打通了vim和idea的交互浑槽,使得我們可以在vim中完成所有和idea相關(guān)的操作。
2.3. 常規(guī)操作
vim的定位是文本編輯返帕。所以在idea中一般情況下vim快捷鍵和命令生效的基本條件就是當前窗口焦點在編輯區(qū)桐玻。這是最基礎(chǔ)的條件,如果你當前的快鍵鍵在Project
或者Run
這些側(cè)邊欄中荆萤,按vim的命令肯定是不會生效的镊靴。
明白了基本條件,那我們要做的第一件事也是最重要的事情就是在idea中观腊,如何快速的將焦點回到的編輯區(qū)邑闲。答案是:
這應該是使用vim的人最能接受的快捷鍵了。所以梧油,到這里基本的操作思路就很明確苫耸,當前的焦點要么在編輯區(qū)外,要么在編輯區(qū)內(nèi)儡陨。而返回編輯區(qū)的操作很簡單褪子,就是Esc
。當焦點在編輯區(qū)的時候骗村,就可以隨心所欲的使用vim的指令和快捷鍵了嫌褪。
3. 配置
有了idea基本的了解之后,我們就可以著手配置自己的vim了胚股。ideavim插件的配置通常是~/.ideavimrc
笼痛,所以將自己的配置腳本寫在對應的文件中即可。當然如果你已經(jīng)有了自己的vim配置文件在~/.vimrc
下琅拌,那只需要在ideavim的配置文件中添加一行命令即可全部讀取映射過來
source ~/.vimrc
當然缨伊,只支持部分vimrc的參數(shù),所以并不是所有的vimrc中的配置都會生效
4. 在vim中執(zhí)行idea的action
為了執(zhí)行idea中的action
进宝,ideavim有兩個額外的命令來支持這一操作刻坊。
:actionlist [pattern]
:action {actionName}
第一個命令actionlist是幫助查看idea中有哪些命令。第二個命令是執(zhí)行對應的action
這樣子党晋。有了這兩個命令的幫助我們就可以在ideavim的配置文件中使用map命令來映射idea的action
到vim的快捷鍵中谭胚。
比如使用actionlist
命令查看run
和debug
的action
名稱:
然后就可以在~/.ideavimrc
使用map
命令映射自己習慣的快捷鍵徐块,這里我把zd
映射為Debug
,zr
映射為Run
" 設(shè)置debug為 zd
:nnoremap zd :action Debug<CR>
" 設(shè)置run 為 zr
:nnoremap zr :action Run<CR>
這里灾而,我沒有測試idea中使用普通的
*map
隱射命令會不會引起遞歸調(diào)用胡控,但是*noremap
有效的狀態(tài)下使用*nnoremap
總是沒有錯的。
其實我想表達的重點到這里就差不多了绰疤,核心點就是在vim中調(diào)用idea的action
铜犬,從而使得vim擴展到idea中的所有功能這樣子。
當然轻庆,記住幾個idea核心快捷鍵在大多數(shù)情況下總是有用的癣猾。
-
Ctrl + Shift + A
打開action快速搜索窗口 -
Alt + 數(shù)字/字母
打開對應的擴展工具欄 -
Double Shift
快速搜索 -
Ctrl + Tab
打開Switcher,進行擴展工具欄或者文件的快速切換
5. 常用技巧
跳轉(zhuǎn)
掌握跳轉(zhuǎn)技巧在閱讀代碼和debug的時候余爆,非常有用纷宇。
說明:
<C-x>
代表組合鍵Ctrl
+x
-
<C-]>
跳轉(zhuǎn)到當前標識符的定義位置 (相當于在當前光標位置的單詞上按住ctrl用鼠標點擊) -
<C-o>
回退一步 (go back) -
<C-i>
前進一步 (go forward) -
'.
跳轉(zhuǎn)到之前修改位置 -
''
在前一次跳轉(zhuǎn)位置與當前位置間切換 - 行號
G
或:行號<回車>
跳轉(zhuǎn)到某一行 -
gg
跳轉(zhuǎn)到文件開頭 -
G
跳轉(zhuǎn)到文件末尾 -
H
跳轉(zhuǎn)到屏幕頂端(如果設(shè)置了set so=n,則跳轉(zhuǎn)到第n行) -
L
跳轉(zhuǎn)到屏幕底端(如果設(shè)置了set so=n蛾方,則跳轉(zhuǎn)到倒數(shù)第n行) -
M
跳轉(zhuǎn)到屏幕中間 -
f
或F
跳轉(zhuǎn)到本行某個字符像捶,小寫f
向右查找,大寫F
向左查找桩砰。用;
或,
在匹配間切換 -
t
或T
跳轉(zhuǎn)到本行某個字符之前拓春,小寫t
向右查找,大寫T
向左查找亚隅。用;
或,
在匹配間切換 -
/正則表達式
跳轉(zhuǎn)到下一個匹配硼莽。用n
或N
在匹配間切換。 -
?正則表達式
跳轉(zhuǎn)到上一個匹配煮纵。用n
或N
在匹配間切換懂鸵。
附上一張vim跳轉(zhuǎn)圖,方便理解行疏。
插件模擬
到目前位置匆光,ideavim一共支持四個插件的模擬,分別為:
- easymotion 快速跳轉(zhuǎn)
- surround 快捷環(huán)繞操作酿联,比如添加修改括號雙引號等等
- multiple-cursors 多指針操作
- commentary 快捷注釋操作
當然對于以上插件的模擬本質(zhì)是就是擴展幾個核心命令终息,并不是完整實現(xiàn)插件的所有功能。
EasyMotion
EasyMotion依賴于IdeaVim-EasyMotion 和 AceJump 兩個插件贞让,所以使用之前確保已經(jīng)完成安裝采幌。安裝完成之后,在ideavimrc中添加下面這行設(shè)置開啟震桶。
set easymotion
令人欣慰的是EasyMotion的模擬支持所有原生插件的功能。查看所有支持命令
surround
模擬的插件為 vim-surround征绎。插件本身很簡單蹲姐,就是提供快捷的對操作磨取。比如添加括號,雙引號等等柴墩。
set surround
支持的命令有:ys
, cs
, ds
, S
忙厌。常見用法如下,將光標停留在*所在位置江咳,輸入對應的命令(Command)逢净,即可將左側(cè)(Old text)的內(nèi)容修改為右側(cè)(New text)的內(nèi)容。
multiple-cursors
多光標vim-multiple-cursors操作在vim中其實很爽歼指,但是IDEA有語法解析和識別爹土,所以將變量重命名的action綁定到vim快捷鍵上明顯來的更方便些。具體可參考我下面的的ideavimrc中的內(nèi)容踩身。
官方readme里說支持的命令的有:<A-n>
, <A-x>
, <A-p>
, g<A-n>
胀茵,不知道為啥我就是沒按出來。不知道A代表啥挟阻,command
琼娘、option
和ctrl
鍵我都試了,貌似都不行附鸽。如果有知道的同學可以評論下脱拼,被自己蠢哭了,還沒google到這個是什么含義坷备。
commentary
一個方便添加注釋的插件commentary.vim熄浓,相當有用,具體用法參考原生插件的readme击你。
IdeaVim模擬的命令有: gcc
, gc + motion
, v_gc
6 我自己的ideavimrc
本來添加了大量的映射玉组,后來刪除了大多數(shù),大部分都轉(zhuǎn)向了idea的double shift來快速搜索和執(zhí)行丁侄。
" leader: ,
let mapleader = ","
" 基礎(chǔ)鍵位映射
" esc 使用jk
inoremap jk <esc>
" 映射idea常用快捷鍵
" 重命名
nnoremap <leader>r :action RenameElement<CR>
" 格式化當前文件
nnoremap <leader>f :action ReformatCode<CR><esc>
" quick java doc
nnoremap <leader>q :action QuickJavaDoc<CR>
" 插件模擬
" surround
set surround
" multiple-cursors
set multiple-cursors
" easyMotion 模擬惯雳,額外依賴插件:AceJump,IdeaVim-EasyMotion
set easymotion
" 注釋插件模擬
set commentary