IdeaVim鍵盤流

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

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ū)邑闲。答案是:

Esc

這應該是使用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命令查看rundebugaction名稱:

Run

然后就可以在~/.ideavimrc使用map命令映射自己習慣的快捷鍵徐块,這里我把zd映射為Debugzr映射為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)到屏幕中間
  • fF 跳轉(zhuǎn)到本行某個字符像捶,小寫f向右查找,大寫F向左查找桩砰。用;,在匹配間切換
  • tT 跳轉(zhuǎn)到本行某個字符之前拓春,小寫t向右查找,大寫T向左查找亚隅。用;,在匹配間切換
  • /正則表達式 跳轉(zhuǎn)到下一個匹配硼莽。用nN在匹配間切換。
  • ?正則表達式 跳轉(zhuǎn)到上一個匹配煮纵。用nN在匹配間切換懂鸵。

附上一張vim跳轉(zhuǎn)圖,方便理解行疏。


vim十字跳轉(zhuǎn)快捷鍵參考圖

插件模擬

到目前位置匆光,ideavim一共支持四個插件的模擬,分別為:

  • easymotion 快速跳轉(zhuǎn)
  • surround 快捷環(huán)繞操作酿联,比如添加修改括號雙引號等等
  • multiple-cursors 多指針操作
  • commentary 快捷注釋操作

當然對于以上插件的模擬本質(zhì)是就是擴展幾個核心命令终息,并不是完整實現(xiàn)插件的所有功能。

EasyMotion

EasyMotion依賴于IdeaVim-EasyMotionAceJump 兩個插件贞让,所以使用之前確保已經(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)容。

vim-surround examples

multiple-cursors

多光標vim-multiple-cursors操作在vim中其實很爽歼指,但是IDEA有語法解析和識別爹土,所以將變量重命名的action綁定到vim快捷鍵上明顯來的更方便些。具體可參考我下面的的ideavimrc中的內(nèi)容踩身。

官方readme里說支持的命令的有:<A-n>, <A-x>, <A-p>, g<A-n>胀茵,不知道為啥我就是沒按出來。不知道A代表啥挟阻,command琼娘、optionctrl鍵我都試了,貌似都不行附鸽。如果有知道的同學可以評論下脱拼,被自己蠢哭了,還沒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

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鸿摇,隨后出現(xiàn)的幾起案子石景,更是在濱河造成了極大的恐慌,老刑警劉巖拙吉,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件潮孽,死亡現(xiàn)場離奇詭異,居然都是意外死亡筷黔,警方通過查閱死者的電腦和手機往史,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來佛舱,“玉大人椎例,你說我怎么就攤上這事挨决。” “怎么了订歪?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵脖祈,是天一觀的道長。 經(jīng)常有香客問我刷晋,道長盖高,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任眼虱,我火速辦了婚禮喻奥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蒙幻。我一直安慰自己映凳,他們只是感情好,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布邮破。 她就那樣靜靜地躺著诈豌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抒和。 梳的紋絲不亂的頭發(fā)上矫渔,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音摧莽,去河邊找鬼庙洼。 笑死,一個胖子當著我的面吹牛镊辕,可吹牛的內(nèi)容都是我干的油够。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼征懈,長吁一口氣:“原來是場噩夢啊……” “哼石咬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卖哎,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤鬼悠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后亏娜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體焕窝,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年维贺,在試婚紗的時候發(fā)現(xiàn)自己被綠了它掂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡溯泣,死狀恐怖群发,靈堂內(nèi)的尸體忽然破棺而出晰韵,到底是詐尸還是另有隱情,我是刑警寧澤熟妓,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站栏尚,受9級特大地震影響起愈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜译仗,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一抬虽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纵菌,春花似錦阐污、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至序苏,卻和暖如春手幢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背忱详。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工围来, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人匈睁。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓监透,卻偏偏與公主長得像,于是被迫代替她去往敵國和親航唆。 傳聞我的和親對象是個殘疾皇子胀蛮,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344