分享我的 Android Studio Emacs 風(fēng)格快捷鍵

[圖片上傳失敗...(image-99d8ae-1533279659132)]

Emacs 風(fēng)格的快捷鍵通過前綴鍵來擴(kuò)展更多打字區(qū)的快捷鍵抢野,盡量把快捷鍵控制在打字鍵區(qū),顯著減少編碼過程手腕的移動,是個經(jīng)得起考驗的快捷鍵方案(非 emacs 用戶可能深痛惡覺)畅哑。

這套快捷鍵在 Emacs keymaps 的基礎(chǔ)上進(jìn)行自定義,首先減少對功能鍵區(qū)的使用水由,一來容易與系統(tǒng)快捷鍵沖突荠呐,二來手指移動的幅度過大難定位不容形成肌肉記憶赛蔫,所以只保留編譯運行相關(guān)的快捷鍵。至于編輯鍵區(qū)則更次泥张,手腕必須得移動呵恢,眼睛也得跟著輔助定位,只保留少部分不常用的默認(rèn)快捷鍵媚创。數(shù)字鍵區(qū)最糟渗钉,手腕移動幅度最大,再說我的 87 鍵盤都沒有小鍵盤-_-钞钙,直接棄用鳄橘。至于鼠標(biāo),那更是萬惡之源芒炼,整個手臂都得移動瘫怜,還要眼睛配合才能用鼠標(biāo)完成一次操作,寫代碼的過程大多是用鼠標(biāo)輔助點擊幾次本刽,然后又回到打字區(qū)繼續(xù)敲鲸湃,這樣來回一次切換成本太高。何況程序員經(jīng)常用鼠標(biāo)點點點子寓?多沒 B 格啊暗挑。雖說如此,不過想要完全不用鼠標(biāo)還是不太容易斜友,只能說一個命令通過鼠標(biāo)打開層層菜單來執(zhí)行超過一次炸裆,第二次就應(yīng)該用 Find Action 來執(zhí)行,如果一天超過三次那就應(yīng)該給它設(shè)個快捷鍵并記住鲜屏。

Android Studio 相比 Eclipse 內(nèi)置的 Emacs keymaps 強(qiáng)大了許多晒衩,不過 Eclipse 有 Emacs+, Android Studio 卻沒有這方面的插件墙歪。所有 Android Studio 相比 Emacs 多了一些不足听系,比如:

  1. Android Studio 只支持一個前綴鍵(prefix key),所以 spacemacs 那樣的助記法快捷鍵 Android Studio 難以實現(xiàn)
  2. Android Studio 中 Esc 不能作為修飾鍵使用
  3. IntelliJ 可以為 Escape 命令配置快捷鍵虹菲,但不少 UI 還是硬編碼為鍵盤的 Esc 鍵靠胜。所以為了退出浮窗,經(jīng)常要 C-g毕源、Esc 交替使用
  4. 不過窗口的操作邏輯不一致浪漠,有些 UI 可以用移動光標(biāo)快捷鍵,有些只能用方向鍵

一些約定先說明霎褐,特別是非 Emacs 黨:

最終使用的前綴鍵有下面三個:

  1. C-x
  2. Esc
  3. M-g

首先律适,最基本又最重要的鍵肯定就是 Find Action,簡直就是 Emacs 中的 Run Command遏插,必須綁定為 M-x捂贿。別的快捷鍵記不住不要緊,只要記住這個還是能做到無鼠標(biāo)操作胳嘲,特別是還附帶快捷鍵提示厂僧,如果有的話。不過還是得對命令的關(guān)鍵字有點概念胎围,表格中的關(guān)鍵字項就是表示通過該關(guān)鍵字在 Find Action 或者 Keymaps 設(shè)置搜索到相應(yīng)功能;自定義有 * 表示快捷鍵是我自定義的德召,非 Emacs Keymaps 的默認(rèn)配置白魂。

快捷鍵 功能 關(guān)鍵字 自定義
M-x 執(zhí)行命令 find Action *
C-g 取消 escape
C-M-s 打開設(shè)置 settings

光標(biāo)移動(Move cursor)

光標(biāo)移動類的快捷鍵,這里指的是在單一文本的內(nèi)的光標(biāo)移動上岗,又包括語法無關(guān)的移動和語法相關(guān)的移動福荸,語法無關(guān)的移動指的就是光標(biāo)的上下左右移動等等,這一塊與 Emacs 基本一致肴掷。另外 C-l雖然不是移動光標(biāo)敬锐,但也是放在這里。

快捷鍵 功能 關(guān)鍵字 自定義
C-f 向前移動一個字符 right
C-b 向后移動一個字符 left
C-n 向上移動一行 up
C-p 向下移動一行 down
M-f 向前移動一個單詞 next word
M-b 向后移動一個單詞 previous word
C-a 移動到行頭 line start
C-e 移動到行尾 line end
C-v 下一頁 page down
M-v 上一頁 page up
M-< 移動到文本頭 text start
M-> 移動到文本尾 text end
C-l 將光標(biāo)位置滾動到屏幕中央 scroll to center
C-Pgup 移動到當(dāng)前頁的起始處 Page Top
C-PgDn 移動到當(dāng)前頁的結(jié)束處 page end

語法相關(guān)的移動:

快捷鍵 功能 關(guān)鍵字 自定義
C-[ 移動到當(dāng)前 Block 起始大括號處 Code block start
C-] 移動到當(dāng)前 BLock 結(jié)束大括號處 Code Block End
C-M-a 移動到前一個方法 previous method
C-M-e 移動到后一個方法 next method

Android Studio 將 M-g 作為跳轉(zhuǎn)到行數(shù)呆瞻,我改其作為前置鍵台夺,同時作為跳轉(zhuǎn)高亮錯誤的前置鍵。

快捷鍵 功能 關(guān)鍵字 自定義
M-g g 作為跳轉(zhuǎn)到行數(shù) line *
M-g n 下一個高亮問題 next highlighted error *
M-g p 上一個高亮問題 next highlighted error *

與光標(biāo)相關(guān)的還有文本選擇痴脾,我保留 C-space 來加入選擇模式颤介,但這個快捷鍵也常被操作系統(tǒng)用來切換輸入法,
在 Linux 下我把輸入切換配置為 Win-space赞赖,其他系統(tǒng)我也建議想辦法把 C-space 留給 Android Studio滚朵。

快捷鍵 功能 關(guān)鍵字 自定義
C-space 切換選擇模式 sticky selection
C-x, h 全選 select all

特別是 Android Studio 不像 emacs 可以用 C-F 等進(jìn)行選擇。只能用傳統(tǒng)的 S-→前域。所以保留 C-space 還是有必要的辕近,下面是例外:

快捷鍵 功能 關(guān)鍵字 自定義
C-{ 選擇到當(dāng)前 Block 起始大括號處 Code block start
C-} 選擇到當(dāng)前 Block 結(jié)束大括號處 Code block end
C-S-PgUp 選擇到當(dāng)前頁的起始處 page start
C-S-PgDn 選擇到當(dāng)前頁的結(jié)束處 page end
C-S-Home 選擇到當(dāng)前文本的起始處 text start
C-S-End 選擇到當(dāng)前文本的結(jié)束處 text end

導(dǎo)航(Navigate)

導(dǎo)航,在不同文件中切換匿垄。常用的導(dǎo)航我用一段式快捷鍵移宅。一定要善用前三個归粉,對編碼效率絕對是很大的提高,起碼不會讓切換文件的速度脫慢你的思路吞杭。

C-M-GC-M-g 的高級版盏浇,直接從實例名跳轉(zhuǎn)到其類中。

快捷鍵 功能 關(guān)鍵字 自定義
C-M-f 上一個位置 forward *
C-M-b 下一個位置 back *
C-M-g 跳轉(zhuǎn)到定義處 declaration
C-M-G 跳轉(zhuǎn)到類型 type declaration *
C-M-u 跳轉(zhuǎn)到父類方法 super method *
M-←/→ 左右切換標(biāo)簽 select tab

如果對簡潔有要求或者屏幕太醒抗贰(比如我)绢掰,可以將 Android Studio 的標(biāo)簽關(guān)掉,具體參考:Configuring Behavior of the Editor Tabs童擎,那么這時 M-←/→ 就不會起作用了滴劲。

另外 M-num 都被 Android Studio 綁定到切換功能窗體,很實用但不一一羅列了顾复,比較常用的是 M-6 打開 Android Monitor班挖、M-7 打開 Structure,至于 Project 有更好的快捷鍵打開芯砸。

C-num 用于跳轉(zhuǎn)書簽萧芙。C-M-num 則用于設(shè)置書簽,書簽是全局的假丧。

Select in... 可謂的鼠標(biāo)殺手中的 MVP双揪,多少鼠標(biāo)操作就是為了在其他窗體中操作當(dāng)前文件。大部分情況下它都是比 M-num 更好的選擇包帚。默認(rèn)的 Alt+F1 與系統(tǒng)沖突渔期,我修改為 Esc,S-i渴邦,好記疯趟,不過需要前綴鍵確實難為了這個命令。

快捷鍵 功能 關(guān)鍵字 自定義
Esc,S-i 在其它窗體中選擇谋梭,比如在項目窗體定位當(dāng)前文件 select in.. *
S-Esc 隱藏工具窗口信峻,配合上個命令使用更佳。 Hide Active ToolWindow
C-S-Esc 隱藏所有工具窗口 Hide All ToolWindow *

編輯(Edit)

看快捷鍵說明瓮床, Android Studio 有 kill ring 的概念站欺,比如 M-wC-w纤垂、M-d矾策、M-backspace 都是操作 kill ring,但是居然沒有 yank pop峭沦,所以 M-y 只能綁定為不太實用 paste from history...贾虽,話說你把 kill ring 藏到哪了?

快捷鍵 功能 關(guān)鍵字 自定義
C-x,C-f 打開文件 file
C-x,b 切換 Buffer switcher
C-x,k 關(guān)閉當(dāng)前文件 close
C-_ 撤銷 undo
M-_ 重做 redo
C-w 剪切 kill selected
M-w 復(fù)制 save to kill ring
C-y 粘帖 paste
M-y 粘帖歷史選擇 paste from history
M-S-↑/↓ 移動當(dāng)前行 move line up/down
C-S-↑/↓ 移動當(dāng)前語句/代碼塊 move statement up/down
M-; 注釋當(dāng)前行 line comment
M-: 注釋塊 block comment *
C-= 展開 expand
C-M-= 全部展開 expand all *
C-- 收縮 collapse
C-M--) 全部收縮 collapse all *

Android Studio 對分割窗格的支持吼鱼,基本可以做到和 Emacs 一致蓬豁,除了 C-x, 0绰咽,在 Android Studio 中它的行為與 C-x, k 一致。

快捷鍵 功能 關(guān)鍵字 自定義
C-x, 1 關(guān)閉其他窗格 unsplit
C-x, 2 平行分割當(dāng)前窗格 split
C-x, 3 豎直分割當(dāng)前窗格 split
C-x, 0 關(guān)閉當(dāng)前窗格 unsplit
C-x, o 切換不同窗格 goto next spliteer

查找(Find)

C-D 是 Dash 插件的默認(rèn)快捷鍵地粪,用于在 Dash/Velocity/Zeal 中搜索

快捷鍵 功能 關(guān)鍵字 自定義
C-s 文本內(nèi)搜索/下一個匹配 find next
C-r 下一個匹配 find previous
M-% 替換 replace
C-S 全局搜索 find in path *
C-R 全局替換 replace in path
M-S 查找使用 find usage
C-D Dash 中搜索 Search in Dash *

Android Studio 支持宏功能取募,默認(rèn)的宏操作都沒有配置快捷鍵,不過沒有 C-u 宏的實用性大打折扣

快捷鍵 功能 關(guān)鍵字 自定義
C-x, ( 開始宏錄制 start macro
C-x, ) 停止宏錄制 stop macro
C-x, e 運行宏 play last macro

編碼(Code)

重構(gòu)的 Extract 都被綁定為 C-M-key蟆技,本來也是不錯的選擇玩敏,可惜太多沖突,我改為 Esc,key质礼,取首字母相同來助記旺聚。前綴鍵我在 EscC-c 間猶豫了下,顯然 C-c 效率更好眶蕉,但我覺得重構(gòu)的話砰粹,在操作前有個停頓思考下也不是壞事。所以最終選擇了 Esc造挽。

C-M 的默認(rèn)功能與 C-[碱璃、C-] 重疊了,所以不如綁定為顯示方法的參數(shù)信息饭入,畢竟 Android Studio 的代碼補(bǔ)全不支持顯示方法參數(shù)嵌器,所以這個功能也是很有必要的。

快捷鍵 功能 關(guān)鍵字 自定義
M-/ 代碼補(bǔ)全圣拄,按兩次能顯示更多選項 completion
C-M-/ 代碼補(bǔ)全嘴秸,智能類型 completion
M-enter 顯示建議行為毁欣,類是 quick fix show intention actions
C-q 快速文檔 quick document
C-I 快速顯示定義 quick definition
C-P 顯示當(dāng)前表達(dá)式返回類型 expression type
C-M 顯示方法參數(shù)信息 parameter info *
C-x, f 格式化 reformat code *
C-x, r 重命名 rename *
C-x, i 優(yōu)化 imports optimize imports *
C-x, j 插入在線模板庇谆,代碼補(bǔ)全也支持補(bǔ)全模板 insert live template *
C-x, g 生成代碼 generate *
C-x, s 生成包圍代碼 surround with *
Esc, f 提取為字段 field *
Esc, c 提取為常量 constant *
Esc, m 提取為方法 method *
Esc, p 提取為參數(shù) parameter *
Esc, v 提取為變量 variable *

運行(Make)

快捷鍵 功能 關(guān)鍵字 自定義
S-F10 運行當(dāng)前配置 run
S-F9 調(diào)試當(dāng)前配置 debug
C-S-F9 運行當(dāng)前 Activity run context configuraton
M-S-F10 彈出運行選擇菜單 run
M-S-F9 彈出調(diào)試選擇菜單 debug

Git

大部分 Vcs 相關(guān)的快捷鍵默認(rèn)配置都和上面的配置沖突了,考慮到用于跳轉(zhuǎn)的 M-g 前綴鍵只用了 3 個凭疮,我的 VCS 只用 git
一個饭耳,所以把 git 相關(guān)操作用 M-g 前綴鍵重新編排下。因為很少用到执解,可能不太合理寞肖,一些 git 的基本操作我都是都是直接在 Shell 里輸入。

快捷鍵 功能 關(guān)鍵字 自定義
M-g, + add 當(dāng)前文件 add to vcs *
M-g, C-c commit commit *
M-g, C-z revert revert *
M-g, C-f fetch fetch *
M-g, C-u push push *
M-g, C-a annotate annotate *
M-g, C-p pull pull *
M-g, C-d 比較文件衰腌,在歷史記錄窗體可直接對比 compare file/show diff *
M-g, C-D 彈出比較文件浮窗 compare with *
M-g, C-h 顯示當(dāng)前文件歷史 show history *
M-g, C-H 顯示當(dāng)前選擇區(qū)域歷史 show history *

鼠標(biāo)(Mouse)

某些情況鼠標(biāo)還是比鍵盤更高效

快捷鍵 功能 關(guān)鍵字 自定義
Button2 矩形選擇
M-S-Button1 放置多個光標(biāo)

Live-plugin

live-plugin 是一個強(qiáng)大的插件新蟆,能給 Android Studio 提供類似 elisp 的運行環(huán)境及解析器,通過 groovy 腳本在運行時更改 IDE 的行為右蕊,所謂的 InternalReprogrammability琼稻。

我將其運行當(dāng)前插件的快捷鍵更改為 Emacs 中執(zhí)行 elisp 表達(dá)式的快捷鍵。其他的我還沒有深入使用饶囚,只是寫了個腳本用來實現(xiàn)單詞首字母大寫功能帕翻,并將其綁定到 M-c鸠补,見 capitalizeWord。原理主要是registerAction 來增加自定義 action嘀掸,自定義的 action 能綁定快捷鍵紫岩,也能通過 find action 來搜索十分方便。

快捷鍵 功能 關(guān)鍵字 自定義
C-x, C-e 運行當(dāng)前插件 run current plugin *
C-x, C-t 測試當(dāng)前插件 test current plugin *
M-c 單詞首字母大寫 captilazie word *

總結(jié)

這只是我常用的或偶爾用到的快捷鍵的羅列睬塌,不是完整的 Android Studio 快捷鍵說明泉蝌,還有很多 Android Studio 的基本功能沒有涉及到,記下來只是為了備忘和分享衫仑。這份快捷鍵會持續(xù)變更梨与,可在 douo_keymaps 查看最新的配置。

參考

Customizing IntelliJ for Emacs Compatibility

原文鏈接:https://dourok.info/2016/08/20/share-my-android-studio-emacs-keymaps/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末文狱,一起剝皮案震驚了整個濱河市粥鞋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瞄崇,老刑警劉巖呻粹,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苏研,居然都是意外死亡等浊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門摹蘑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來筹燕,“玉大人,你說我怎么就攤上這事衅鹿∪鲎伲” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵大渤,是天一觀的道長制妄。 經(jīng)常有香客問我,道長泵三,這世上最難降的妖魔是什么耕捞? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮烫幕,結(jié)果婚禮上俺抽,老公的妹妹穿的比我還像新娘。我一直安慰自己较曼,他們只是感情好磷斧,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般瞳抓。 火紅的嫁衣襯著肌膚如雪埃疫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天孩哑,我揣著相機(jī)與錄音栓霜,去河邊找鬼。 笑死横蜒,一個胖子當(dāng)著我的面吹牛胳蛮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丛晌,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼仅炊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了澎蛛?” 一聲冷哼從身側(cè)響起抚垄,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谋逻,沒想到半個月后呆馁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡毁兆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年浙滤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片气堕。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡纺腊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茎芭,到底是詐尸還是另有隱情揖膜,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布骗爆,位于F島的核電站次氨,受9級特大地震影響蔽介,放射性物質(zhì)發(fā)生泄漏摘投。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一虹蓄、第九天 我趴在偏房一處隱蔽的房頂上張望犀呼。 院中可真熱鬧,春花似錦薇组、人聲如沸外臂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宋光。三九已至貌矿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間罪佳,已是汗流浹背逛漫。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留赘艳,地道東北人酌毡。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像蕾管,于是被迫代替她去往敵國和親枷踏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容