作為一個踐行Mouseless Programming的開發者,來談談自己在日常工作中是如何做到「幾乎」不用滑鼠的。
在說具體的「技巧」之前,先聊一聊純鍵盤開發的幾個原則:
- 動機, 動機要單純,純鍵盤開發不是為了耍酷, 你的動機應該是提高「效率」:)
- 鍵盤隻是工具,思想才是關鍵, 代碼和問題先想清楚再下手,想清楚遠比寫的快重要!
- 鍵盤不要經常換, 選擇一款适合自己的,然後用熟它就好!什麼黑軸、茶軸,filco、cheryy等等的都是浮雲啊,折騰這些是在浪費生命啊。
- 使用統一的一套快捷鍵, 快捷鍵一緻,可以無縫切換,減少不同軟體不同快捷鍵的記憶成本。比如vi的一套快捷鍵,各種IDE和文本編輯器都會有vi模式或插件,chrome也有插件支援vi快捷鍵浏覽網頁。
- 快捷鍵不要刻意去記, 經常用到的功能,才去查它的快捷鍵,在使用過程中去記,記住常用的即可。
下面就來聊聊具體的(奇)技(淫)巧吧:
鍵盤設定
- 原則:雙手不要離開主鍵區。也就是雙手幾乎一直在asdf,jkl;鍵區。 比如你去按方向鍵,這樣就是雙手離開了主鍵區。
- 重新映射方向鍵: 上一條提到不要去按鍵盤上的方向鍵(太遠了),是以需要重新映射一下方向鍵,使用
工具,可以全局重新映射方向鍵,我傾向使用 【ctrl-hjkl】來作為方向鍵,相信大部分vim黨都會這麼映射吧,用熟之後還是很舒服的。hammerspoon
- ctrl鍵和Cap鍵的鍵位互換:Cap鍵占據了一個很好的位子(左手小拇指一劃就能碰到),然而卻沒什麼卵用(大寫用Shift+字母啊)。而Ctrl鍵使用的頻率太高了,卻藏的太遠,是以強烈強烈建議互換ctrl和Cap按鍵的位置,換完之後熟悉一天你就不會再想換回來的,相信我。mac上提供了很便捷的方式修改這兩個按鍵,入口在 【系統設定】-> 【鍵盤】:
純鍵盤開發實戰(Mouseless Programming) - 說下題外話,其實早期的一些鍵盤的ctrl鍵就是在現在的Caps鍵的位置的,特别是Unix/Linux系統的鍵盤,因為重度使用Ctrl鍵,如Ctrl-c:終止指令,Ctrl-d:EOF等,是以ctrl鍵必須要在一個很友善按到的位置。
純鍵盤開發實戰(Mouseless Programming) - 如果你使用的是這款鍵盤---HHKB,那麼恭喜,你就不用設定了,它壓根兒就沒有Caps鍵。另外安利一下這款鍵盤,它非常小巧,攜帶友善,而且可以直接架在筆記本的鍵盤區替換筆記本鍵盤。 唯一的缺點就是: 貴
純鍵盤開發實戰(Mouseless Programming)
- 說下題外話,其實早期的一些鍵盤的ctrl鍵就是在現在的Caps鍵的位置的,特别是Unix/Linux系統的鍵盤,因為重度使用Ctrl鍵,如Ctrl-c:終止指令,Ctrl-d:EOF等,是以ctrl鍵必須要在一個很友善按到的位置。
- 可以設定多個keyboard-profile。不同的profile下,按鍵的意義不同。舉個例子,hhkb沒有F1-F12按鍵,需要用Fn+1-12 才能表示F1-F12,程式員調試,經常用F6--F12 的,是以用組合鍵非常麻煩。此時就可以建另外一個debug-keyboard-profile,讓1-12表示F1-F12的含義,這樣就不用每次調試都按組合鍵了。可以借助
工具來實作多個profile的定義Karabiner
常用操作
下面介紹 Mac上的常用操作怎麼使用鍵盤來做到。
- 打開應用、打開檔案、查找檔案等: Alfred。普通的打開應用、打開檔案,基本上都能滿足,再也不用滑鼠點選底下的Dock來打開應用,也幾乎不用點選Finder來打開檔案了。重度使用者可能會編寫一些工作流,比如直接搜stackoverflow,搜maven中央倉庫等等。
- 視窗管理:Spectacle。經常需要用滑鼠移動視窗,調整視窗大小? 有了Spectacal之後幾乎不會在手動滑鼠調整視窗。看一下快捷鍵就一目了然了。
純鍵盤開發實戰(Mouseless Programming) - Ternimal管理:tmux(當然iterm,zsh等是标配啦)。tmux的一個好處是可以管理多個會話,儲存會話以便後續再重連,以及友善的複制模式,在複制模式下可以用vi快捷鍵移動名額選中頻幕内容,然後複制選中的内容。
純鍵盤開發實戰(Mouseless Programming) - 浏覽網頁:Cvim 或 Vimium。 上手非常簡單: https://youtu.be/t67Sn0RGK54
- 釘釘聊天:抱歉,這個目前無能為力。。。。釘釘快捷鍵設定隻提供了最基本的幾個功能。。
純鍵盤開發實戰(Mouseless Programming)
Vim
這是個很大的話題,就不展開講了,總之學vim貴在堅持。稍微提幾點:
- 要整體性地了解vim中的一些概念:編輯模式、移動指令、檔案管理、檔案間跳轉、緩沖區清單、寄存器、宏、查找替換等等。
- 學會使用幫助。 在vim中輸入 :h help, 好好看一下vim中的help應該如何使用。
- 一些插件
- vimwiki, 個人首推,可以搭建自己的一個wiki知識庫, 純vim環境書寫文檔,文法類似markdown。并且建立文檔,文檔之間的跳轉都非常非常友善。而且文檔可以渲染成html,可以自己寫一些CSS樣式定制渲染。
- ctrl-p: 快速查找檔案
- nerdTree: 目錄
- 插件推薦、排名: https://vimawesome.com/
- 強烈推薦書籍:《Practical Vim》 https://book.douban.com/subject/10599776/ ,書寫的很好,看中文版的即可,因為是實操性的東西,很好了解。每天看5個Item,一個月即可看完。
IntelliJ
Jetbrain系列的IDE的快捷鍵還是設計的非常好的,而且他們家不同類型的IDE使用的快捷鍵是同一套,不管你用IntelliJ 寫Java,Pycharm寫Python 還是Goland 寫Go或者其他的系列,他們的很多快捷鍵都是相通的。下面重點說說IntelliJ中的常用操作如何做到無滑鼠。
- 首先裝上IdeaVim插件,這樣大部分的檔案内編輯就可以純鍵盤了。
- Navigation:
- ⌘+o, ⌘+⇧+o: 定位檔案
- ⌘+E, ⌘+⇧+E:最近浏覽編輯過的檔案
- ⌘-1,2,3,4...: 不同panel間切換
- ⌘+⇧+F12: 編輯頁全頻展示
- ⌘+⇧+a: 查找action
- ⌘+⌥+b: 從接口向下跳到實作
- ⌘+u: 從實作向上跳回接口
- 編輯
- ⌥+⏎:修改提示,還可以自動聲明變量
- ⌘+n: 在 project-panel 中,建立檔案
- ⌘+shift+n: 臨時測試可以使用 scratch-file, 不會放入到項目,會自動删除
- ⌘+n:在檔案内,可以生成 setter、getter、toString 等
- ⌘+⏎+L: 格式化code
- ⌘+-: 收起目前方法實作
- ⌘+⇧+-:收起期所有方法實作
- ⌘+y: quick definition, 不離開編輯頁
- 代碼送出
- ⌘+K: commit代碼
-
⌘+⇧+K:push代碼。
另外需要說明的一點是,送出代碼會出現多個button讓你選擇,這時候可以使用Tab來切換選中的button,用空格來确認選擇,這樣整個送出代碼的過程就都能純鍵盤操作了。
當然IntelliJ的快捷鍵還有很多很多,我的建議是不用刻意去記,使用過程中經常用到的功能,可以去查詢一下對應的快捷鍵,如果沒有的話,也可以自己去定義相應的快捷鍵,比如我自己設定的兩個常用的快捷鍵,一個是定位目前編輯檔案所在的目錄:
這樣我就能在Project這個panel中使用⌘+⌃+S 快速定位到我目前在編輯的檔案
另外一個很常用的快捷鍵是重新導入jar包:
這樣每次我編輯完pom之後,隻要按一下⌘+I,就可以重新導入依賴了(不開auto import是因為自動import它不知道我何時編輯完了,就一直再重新導入,嚴重拖慢速度)
對于哪些是自己經常使用的功能,可以檢視IntelliJ中的 【Help】 -> 【Productivity Guide】, 會列出你最近常用的功能,以及使用次數,這樣就能根據自己使用情況去 KeyMap裡搜一搜對應的快捷鍵啦
總結
最後還是要強調一下,純鍵盤開發的目的是效率,不要為了純鍵盤而純鍵盤,就像很多人投入太多精力研究Vim或者Emacs一樣,其實說到底它隻是一個編輯器,沒必要花費太多的精力在上面,玩的再溜又如何,能幫你升職加薪嗎,能解決實際業務問題嗎? 磨刀不誤砍柴工,使用好自己的工具,産出有價值的結果,不要陷入到研究工具的誤區裡去。