如何大幅度提高 Mac 開發效率
本文是視訊直播的文字整理,錄影可以在:優酷 上看到
關於 Mac 工作效率的文章一直層出不窮,然而並非所有內容都適合程式設計師,比如某些 Unix 命令,其實使用頻率非常低。作為一名初級 iOS 程式設計師,我嘗試著和大家分享一些能夠切實提高我們開發效率的小技巧。
我是無滑鼠主義者,任何需要滑鼠的操作在我看來都是極為低效的。Mac 的觸控板非常好用,但是我依然在嘗試避免使用觸控板。因為雙手保持在鍵盤區域更適合程式設計。雖然觸控板不可能被避免(比如瀏覽網頁),但我希望至少在 Xcode 中不使用它。
所以,本文會和大家分享一些系統級快捷鍵,Xcode、Chrome、iTerm 等應用中的快捷鍵,以及常用的工具,比如 Vim 和 Git 的使用。這裡面除了 Xcode,其他都是通用的,如果你不是 iOS 開發者,建議自行查閱相關 IDE 的快捷鍵。
綜述
一部分人可能認為,快捷鍵用起來很彆扭,還不如自己用觸控板(滑鼠)來得方便。然而你應該意識到,使用觸控板的效率是有上限的,當你熟悉快捷鍵後,速度遠比現在快得多。
這一點,在學習 vim 時尤其重要。你不應該關注完成一個命令需要多久,而應該關注需要多少個按鍵,你可以認為在形成肌肉記憶後,按鍵的思考時間為0。所以我們得出一個結論:
總時間 = 按鍵數 * 一個常數(表示單次按鍵時間)。
因此,評價 vim 中一個操作的優劣,通常用高爾夫分數來表示,它表示完整這個操作需要幾次按鍵。
但是!!!快捷鍵是提高效率的手段,但它不會提高程式碼質量。既要堅持學習,也要適可而止,萬萬不可主次顛倒。
關鍵不在於你學會了多少快捷鍵,而是你有多少工作是可以通過快捷鍵來完成的,目的在於提高效率,僅此而已。
一種很強大,通用的的方法是 設定->鍵盤->快捷鍵->應用快捷鍵 然後精確匹配應用中的快捷鍵名,這個通常需要配合 CheetSheet 來實現。當你覺得某個快捷鍵不好用的時候,也可以通過這種方式去修改。
應用內快捷鍵替換在設定快捷鍵時,需要避免全域性快捷鍵和應用快捷鍵衝突,同時也要注意一些常用操作在多個應用內保持統一。
我建議將 Caps Lock 與 Ctrl 鍵對調,因為大小寫切換鍵的使用頻率非常低,而 Ctrl 的使用頻率顯然高於他,因此有必要將大小寫切換鍵放到最不容易觸碰到的地方。
下面我會介紹一些我常用的快捷鍵,它們大部分是系統自帶的,也有少部分是我自己定義的。
入門
- 絕大多數應用的 preference 頁面都是通過
Command + ,
開啟的。 - 剪下,複製,貼上,撤銷,重做,游標移動到行首和行尾,這些基礎操作必須掌握。
Snap
相信很多人都有這樣的煩惱:如果應用不全屏,那麼桌面上顯示的視窗太多,每個視窗的顯示內容不夠多。如果應用全屏,那麼切換應用是很麻煩的。要麼用 Command + Tab
,要麼手勢滑動,但無論哪一種,時間複雜度都是 O(n)。有沒有 O(1) 的方法呢?答案是使用神器:snap
我主要是以應用首字母或者關鍵字母作為標識,配合 Command + Shift
字首:
- Xcode:
J
- Chrome:
K
- iTerm:
L
- Markdown 相關:
M
- QQ:
Y
- 微信:
U
- SoureceTree:
S
- MacVim:
V
- Evernote:
E
- Dock:
1/2/3/4
:因工作需要,我常用的是備忘錄,郵件,日曆,設定 ;
這個鍵我沒有啟用,但它實際上是一個非常方便的快捷鍵。
Dock 欄應用的選擇需要一定的權衡。顯然最快的方式是隻按 Command
,但是這種全域性快捷鍵會導致大量衝突。而 Controll
和 Option
鍵又非常難以觸控,所以我選擇了 Command + Shift
作為所有應用的快捷鍵字首。
注意避免字母 o
和 f
,它們在 Xcode 中有特殊的用處。
Xcode 快捷鍵
編譯、執行,Instruments,單元測試,暫停這些基本操作就不解釋了。我把一些自認為比較有用的命令加粗表示:
檔案編輯
Command + [
和Command + ]
左右縮排Command + Option + [
和Command + Option + ]
當前行上下移動Command + Option + Left/Right
摺疊、展開當前程式碼段
檔案跳轉
Command + Control + Up/Down
.h 和 .m 檔案切換Command + Control + Left/Right
瀏覽歷史切換Command + Control + j
跳轉到定義處Command + Option + j
跳轉到目錄搜尋Command + 1/2/3/4/5
跳轉到左側不同的欄目Comannd + Shift + o
檔案搜尋
搜尋
Comannd + Shift + f
全域性搜尋Command + e
搜尋當前選中單詞Command + g
搜尋下一個
tab
Command + t
新建一個 tabCommand + w
關閉當前 tabCommand + Shift + [
和Command + Shift + ]
左右切換 tab
Scheme
Command + shift + ,
編輯 scheme,選擇 debug 或 release
除錯
F6
:跳到下一條指令
F7
:跳進下一條指令(它會跳進內部函式,具體效果自測)
Control + Command + y
繼續執行
其他
Command + k
刪除 Console 中的內容Command + d
開啟/關閉 控制檯(修改系統快捷鍵:Show/Hide Debug Area)
獲得更全面的快捷鍵介紹,請參考:這篇文章
Vim 常用快捷鍵
入門指南:簡明 Vim 練級攻略
在我的 git 上有一份 Vim 的配置,先下載到 ~/
目錄下,然後建立軟連線:
12 | rm.vimrcln-s.vim/.vimrc.vimrc |
推薦一個 Mac 上的 Vim 軟體:MacVim,它比在終端中看 Vim 更好一些。開啟 MacVim 後,輸入以下命令安裝外掛:
1 | :BundleInstall |
進入輸入模式
i
在游標前面進入輸入模式,a
在游標後面進入輸入模式I
在行首進入輸入模式,A
在行尾進入輸入模式o
在下一行行首進入輸入模式,O
在上一行行首進入輸入模式
文字操作
yy
複製當前行,dd
剪切當前行,p
複製。注意這裡用的都是 Vim 自帶的剪貼簿。U
撤銷,**Ctrl + r
重做x
刪除游標所在的字母cae
或bce
刪除當前游標所在的單詞,並進入編輯模式數字+命令
重複命令 n 次,比如3dd
游標移動
^
到本行開頭,$
到本行末尾/111
或111G
跳轉到 111 行,gg
第一行,G
最後一行。e
移動到本單詞的結尾,w
移動到下一個單詞的開頭。%
匹配當前游標所在的括號(小括號,中括號,大括號)*
查詢與游標所在單詞相同的下一個單詞f + 字母
跳轉到字母第一次出現的位置,2fb
跳轉到字母 b 第二次出現的位置t + 字母
跳轉到字母第一次出現的前一個位置,3ta
跳轉到字母 a 第三次出現的前一個位置- f 和 t 換成大寫,表示反方向移動查詢。
dt + 字母
表示刪除字母前的所有內容。
舉一反三
- 比如
0y$
,從行首複製到行尾,ye
表示
從當前位置複製到本單詞結尾。 a
或i
action
可以是任何的命令,比如d
,y
,v
等
object
可以是w
單詞,p
段落,或者是一個具體的字母
a
和i
的區別在於i
表示 inner,只作用於內部,不含兩端。思考一下,有多少種方法可以刪除游標當前所在單詞?答案:
diw
,daw
,caw
,ciw
,bce
,bde
。思考一下他們的原理,後兩者不太推薦(有可能跳到前一個單詞)。
如果是選中當前單詞呢?
除了以上基本語法,我還在整理一套 《Vim 基礎練習題》,等完成之後會與大家分享。
實戰
- 給多行添加註釋:
v
:進入可視狀態nj
: 向下選擇n行, 或者輸入Shift ]
跳到段尾Command + /
添加註釋
- 在 MacVim 中,
git blame
無比清晰:
Chrome
Command + l
焦點移動到位址列Shift + Option + Delete/Left
向左刪除/選中一個單詞(可以自定義為Ctrl-w
)Command + y
搜尋歷史Command + 數字
快速切換 tabCommand + shift + []
左右切換 tabCommand + t/w
新建/關閉 tabCommand + e/g
搜尋選中,前往下一個,或者用Command + f
和回車。
可以看到,Chrome 中涉及到 tab 的操作應該與 Xcode 儘量保持一致。
iTerm2
Ctrl w
刪除前一個單詞Command + r
清除螢幕上的內容Command + t/w
開啟/關閉 tabCommand + 數字
切換到第 n 個 tab雙擊
選中一個單詞,自動複製
iTerm 可以通過 Command + shift + []
來左右切換 tab,也可以通過 Command + Left/Right
切換,後者其實是多餘的,而且不符合習慣。
所以參考 這篇文章 或者自行查閱 Google,在 Preference->Keys->Global Shortcut Keys 中,設定好 Command
加上左右鍵,和刪除鍵的對應操作。
Git
git 的本質是對指標的操作。
掌握git的 add
、commit
、stash
、pull
、fetch
這些基本操作
理解什麼是本地倉庫,什麼是遠端倉庫,理解多人開發時的 merge
和 conflict
的概念
掌握分支的使用,掌握 checkout
命令的使用
熟練掌握 git rebase
操作,包括 git rebase -i
和 git rebase --onto
,掌握一種 git 工作流
Oh my zsh
首先下載 oh-my-zsh 的配置到 ~/
目錄下,然後在命令列中執行以下操作:
12 | rm.zshrcln-s.sys.config/.zshrc.zshrc |
然後重啟 iTerm。你可以根據自己的喜好,前往 ~/.sys.config/setting/git.zh
配置 git 命令的別名,比如;
1234 | alias gcm='git commit -m'alias gignore='git update-index --assume-unchanged'alias gpush='git push origin HEAD:dev;'alias go='git checkout' |
More
據說 Alfred 是效率神器,鑑於我除了寫程式碼,一般不怎麼玩 mac,所以也就沒有去了解。如果有更多好的快捷鍵和應用,歡迎與我交流。