Intellj的Vim模擬是我所用過的IDE中最接近完美的了,不用實在可惜。從完全不會Vim到基本可以使用Vim鍵位來進行日常開發也就兩三個星期的事。好處也很多,首先Vim的操作方式速度確實很快,其次可以解放出大量ctrl和復合鍵位來做其他用途(這壹點emacs的鍵位模擬就做不到,還會經常和IDE本身的熱鍵沖突),再者現在大部分主流編輯器或IDE都有Vim模擬器,使用壹套鍵位在各種環境下都能進行常用的操作。
2. emacsIDEAs插件
不要被名字唬住了,其實這個插件跟emacs關系不大,只是實現了emacs裏的AceJump功能(但個人感覺比另壹個AceJump插件好用)。如果妳看插件的說明的話,它還圍繞AceJump實現了壹些其他功能,但已經有了IdeaVim的話這些就沒必要用了,只使用它的AceJump就行了。
所謂AceJump,就是妳按快捷鍵進入AceJump模式後(默認是Ctrl+J),再按任壹個字符,插件就會在屏幕中這個字符的所有出現位置都打上標簽,妳只要再按壹下標簽的字符,就能把光標移到該位置上。換言之,妳要移動光標時,眼睛壹直看著目標位置就行了,根本不用管光標的當前位置,非常舒服。
3. Shortcut Translator插件
如果妳是從其他IDE(比如Eclipse)轉過來的,可以用這個插件查詢在其他IDE中某個熱鍵所對應的IDEA熱鍵。
4. 善用Select Word at Caret功能(Ctrl+w)
在IDEA的Keymap中有Select Word at Caret這個動作,字面意思是“選中光標所在的單詞” ( 2015/07/22 更新:在14版中已改名為 Extend Selection ),默認快捷鍵是Ctrl+W。但事實上,這個動作的實際操作是選中更上壹層的語法結構。例如,如果妳在壹個字符串的壹個單詞中,按壹下Ctrl+W,會選中光標所在單詞。再按壹下,會選中整個字符串的內容,不包括引號。再按壹下,會選中包括引號的字符串。再按壹下,會選中整個表達式(如果表達式含有括號,會逐層選中)。再按壹下,會選中整個語句塊。再按壹下,會選中整個方法。再按壹下,會選中整個類。
如果沒有用IdeaVim,這個功能是非常強大的(完美替代鼠標雙擊和shift+右鍵選中)。如果使用了IdeaVim的話,用Vim自帶的Text Object功能就能實現大部分選擇語法結構場景。但有壹些Text Object在IdeaVim中沒有實現,比如說選中花括號(非block)中的內容( vi{ ),或者選中xml標簽之間的內容 ( vit )。這時用Ctrl+w也很方便。
5. 善用Postfix Completion
這是IDEA 13.1 新增的功能。詳細演示和說明看這裏 Postfix Code Completion in IntelliJ IDEA 13.1 EAP 。簡單來說就是妳可以先輸入語句的主體(例如要賦值的表達式,或者要循環的集合變量),然後輸入用小數點分隔的模板名稱後綴,IDE自動幫妳智能展開。
比如說,妳想寫
for (User user:users) { ... }
只需要輸入 users.for 再按tab就行了
妳想寫
Date birthday = user.getBirthday()
只需要輸入 user.getBirthday().var 再按tab就行了。IDEA會自動推斷賦值類型和生成默認的變量名稱。
========================
2016-1-31更新
僅針對Mac用戶,補充壹條增加快捷鍵的方案,全系統有效。個人覺得效率非常高。
Mac(OS X)有哪些冷門但是壹但發現就無法自拔的軟件? - 知乎用戶的回答
這套方案的好處是:
1. 增加了490多個與常用快捷鍵不沖突的快捷鍵組合(如果需要可以自己增加至700個),供重定義。換而言之,妳不需要改動本來的快捷鍵布局,同事來妳的機器上協助編程時不會找不著北。
2. 絕大部分新增的快捷鍵都在基鍵上,且減少了對功能鍵的需要,極大提高小尾指的幸福感。
3. 絕大部分快捷鍵組合帶有方向和輕中重的含義,便於記憶。
4. 可針對不同應用定義不同的方案。
唯壹壞處是,Keyboard Maestro這個軟件要36美刀,不過在Mac下玩鍵盤流我個人覺得這必不可少,至少目前沒有找到好的替代品。
(關於Keyboard Maestro的在Intellij外的應用方案可以參考我這個回答:Mac 下有什麽軟件能夠極大地提高工作效率? - 知乎用戶的回答 )
以下是壹些我自己在Intellij中的快捷組合設定,供參考
1. 全局定義 (在Intellij外也才有此設定)
(dio)或ctrl-j : 光標下移 (括號括起的按鍵組合指先按下第壹個鍵,然後後兩個鍵同時按下或在200微秒內先後按下。像這裏就是先按下d然後io齊按。)
(eio)或ctrl-k:光標上移
(fio):光標右移
(sio):光標左移
此外,引用答案中的配置文件本來就配置了以下解放小尾指的全局配置:
[jk]: ESC (方括號括起的按鍵組合指同時按下括號內的鍵,這裏指jk壹起按下就是ESC)
[jl]:回車
[jh]:delete (Mac裏面相當於Backspace)
[jf]:TAB
2. (df+動作鍵),(ds+動作鍵),(fd+動作鍵) 組合為輸入常用關鍵字 (是的我就是這麽懶,按頭幾個字母再按壹下TAB都覺得煩。。。)
(dfj):private
(dfk):protected
(dfl):public
(dfu):void
(dfi):String
(dfo):Boolean
(dfh):final
(dfn):static
(dfm):@Inject
(dsj):return
(dsk):null
(dsl):.equals(
(dsu): .stream()
(dsi): .collect(Collectors.toList())
(dso): .collect(ArrayList::new, ArrayList::add, ArrayList::addAll)
(dsh): throw new
(dsm): this
3. 左手方向鍵 + 右手雙動作齊按 (前面已定義方向加io齊按為全局方向,這裏不再重復定義)
(dkl): 縮小選區到下壹級語法結構
(ekl): 擴大選區到上壹級語法結構 (就是前面說的Ctrl+w)
(dui): 光標移動至語法塊結尾
(eui): 光標移動至語法塊開頭
(fjk): 光標移動至行尾
(sjk): 光標移動至行首
(skl): 返回前壹歷史位置
(fkl): 前進到下壹歷史位置
3. 兩右手相反方向加壹動作
(sfj): Code complete (相當於option+/)
(fsj): Code complete反向滾動
(den): 移入上面的代碼窗口 (當使用了split分隔出多個代碼窗口時)
(edn): 移入下面的代碼窗口
(sfn): 移入右面的代碼窗口
(fsn): 移入左面的代碼窗口
(sfu): "0p (vim插件下的復制)
(sfi): viw"0p (vim插件下用復制內容替換當前光標所在單詞)
(deo): [Esc]gUiwgi (vim插件下,在插入模式中把光標所在單詞改大寫並在原來位置繼續插入)
4. sd+動作 代碼重構相關
(sdj) : Quick fix (映射到原來的option+enter)
(sdk) : Code generate (映射到原來的option+insert)
(sdl): 彈出重構菜單 (映射到原來的shift+ctrl+option+T)
5. se + 動作 打開代碼相關
(sej): 打開類 (相當於原來的ctrl+n)
(sek): 打開文件 (相當於原來的shift+ctrl+n)
(sel): 打開最後編輯過的文件列表
(seh): 打開動作輸入框(相當於原來的ctrl+shift+A)
(seh): 打開上壹個關閉的文件