[圖片上傳失敗...(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 多了一些不足听系,比如:
- Android Studio 只支持一個前綴鍵(prefix key),所以 spacemacs 那樣的助記法快捷鍵 Android Studio 難以實現(xiàn)
- Android Studio 中 Esc 不能作為修飾鍵使用
- IntelliJ 可以為
Escape
命令配置快捷鍵虹菲,但不少 UI 還是硬編碼為鍵盤的Esc
鍵靠胜。所以為了退出浮窗,經(jīng)常要C-g
毕源、Esc
交替使用 - 不過窗口的操作邏輯不一致浪漠,有些 UI 可以用移動光標(biāo)快捷鍵,有些只能用方向鍵
一些約定先說明霎褐,特別是非 Emacs 黨:
- C = Control/Ctrl址愿,如果小指還想要請將 CapsLock 改成 Ctrl
- M = Meta = Alt != Options
- S = Shift
-
C-F
等同于C-S-f
冻璃,無換檔字符仍使用C-S-key
表示 - 方向用圖標(biāo)表示:
←
响谓、→
损合、↑
、↓
-
,
用于分隔前綴鍵娘纷,表示先按,
前的鍵嫁审,松開,再按下一個鍵 - 關(guān)于 Mac 的 Options 鍵赖晶,參考:osx - How to disable option key to type greek letter in Mac OS? - Stack Overflow
最終使用的前綴鍵有下面三個:
C-x
Esc
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-G
是 C-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-w
、C-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
质礼,取首字母相同來助記旺聚。前綴鍵我在 Esc
和 C-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/