1. 程式人生 > >如何配置一個高效的 Mac 工作環境

如何配置一個高效的 Mac 工作環境

原標題:強迫症的 Mac 設定指南

一直想寫這麼一篇文章,把我從同事那裡學到的經驗分享出來。市面上有很多類似的文章,寫得都非常好,讓我受益匪淺。不過我還是有一些自己總結出來的經驗想要分享。

在工作中,我一般會在 1 到 10 人的團隊中,經常會結對程式設計,即兩個人共用一臺 Mac 工作,因此也經常會把 Mac 外接一個大顯示器、滑鼠和鍵盤。我的常用開發平臺有 Java、Ruby、Node.js、Web 等,使用 JetBrains 的開發工具,比如 IntelliJ IDEA、RubyMine、WebStorm 等。

(伯樂線上轉載配圖)

我認為“一個高效的 Mac 工作環境”有以下幾個特點:

  • 自動化
    舉個例子。手動安裝一個應用,需要1)開啟瀏覽器,2)搜尋應用的名字,3)開啟應用網站,4)尋找下載連結和安裝方法,5)下載並等待下載完成,6)安裝下載檔案,7)可能還有後續的安裝步驟。而自動化安裝一個應用,只需要1)開啟終端工具,2)敲入安裝命令,3)等待完成這幾個步驟。自動化可以大大簡化操作,提高效率。
  • 統一
    我經常結對程式設計,偶爾會遇到快捷鍵不一樣,命令不同等問題。我強烈建議,至少在一個團隊中,大家儘量使用相同的快捷鍵、命令等環境。(我記得有個實踐就是這個,可是我一直沒找到該實踐的名字和出處,求告訴)
  • 夠用
    夠用就好,如果系統本身已經滿足了我的需求,我不會再使用第三方工具。
  • 效率
    效率,一切都是為了效率。

本文對於第三方應用如何安裝和使用只有最簡單的介紹,具體還請參考官方網站和相關文件。

有些章節標題標註了[OCD],意思是這些章節帶有我強烈的個人色彩,如果你跟我臭味相投,歡迎借鑑,如果你並不認同,請忽略掉好了。

1. OS X

本節介紹作業系統本身的一些設定。

功能鍵

預設情況下,F1-F12 都是特殊功能,比如調節螢幕亮度。而當你需要鍵入 F1-F12 時(比如在使用 IntelliJ IDEA 的快捷鍵時),需要同時按住 Fn。這對於開發人員來說是非常不方便的。

把 F1-F12 改成標準功能鍵:選擇System Preferences > Keyboard,在Keyboard標籤頁中選中Use all F1, F2, etc. keys as standard function keys

全鍵盤控制

當你在 Sublime Text 裡關閉檔案時,可能會遇到這樣的對話方塊:

dialog-box-without-all-controls

注意這個Save按鈕跟其他兩個按鈕不太一樣,它的底色是藍的。這種按鈕被稱為預設按鈕,除了用滑鼠點選觸發外,還可以通過回車鍵觸發。

那麼問題來了,如果你不想儲存,想點選Don't Save,是不是隻能用滑鼠點選了呢?

並不是這樣:選擇System Preferences > Keyboard,在Shortcuts標籤頁中選擇All controls;或者使用快捷鍵⌃F7。之後這個對話方塊會變成這樣:

dialog-box-with-all-controls

這個Don't Save按鈕有了一圈藍邊,這個意味著你可以通過空格鍵觸發。不僅如此,你還可以用Tab鍵把藍邊轉移到其他按鈕,來實現全鍵盤控制。

除了All controls這個方法,你還可以用⌘⌫在包含“刪除”或“不儲存”按鈕的對話方塊中選擇“刪除”或“不儲存”。

在這個對話方塊上,你可以用Esc來執行Cancel操作。

Spotlight 快捷鍵

中文版 OS X 的 Spotlight 的快捷鍵是⌃Space。這個快捷鍵有一些問題:

  • JetBrains 的 IDE,比如 IntelliJ IDEA、WebStorm 等都使用⌃Space作為自動完成這個最常用功能的快捷鍵。我不建議更改 IDE 的快捷鍵,而建議更改 Spotlight 的快捷鍵。
  • 對於沒有新增中文輸入法的 Mac 來說,Spotlight 的快捷鍵是⌘Space。英語國家的人都是這樣的。所以我建議把 Spotlight 的快捷鍵設定為⌘Space,跟他們一致。

輸入法快捷鍵

一般來說切換輸入法的快捷鍵是⌘Space。由於我建議把 Spotlight 的快捷鍵設定為⌘Space,所以我建議把切換輸入法的快捷鍵設定為⌥Space

其他快捷鍵

讓雙手儘量多的鍵盤和快捷鍵,少使用滑鼠和觸控板,可以大大提高效率。

設定 Trackpad 輕點來點按

預設情況下按下觸控板才是點按(click)。我喜歡設定成用輕點作為點按:

選擇System Preferences > Trackpad,在Point & Click標籤頁中選中Tap to click

語音

OS X 自帶了語音功能,可以用say命令讓 Mac 開口說話:

1 say hello

可以和&&或者;配合使用來提示你某任務已經完成:

1 brew update&&brew upgrade&&brew cleanup;say mission complete

通過命令列來聽取發音還是有點麻煩。其實我們幾乎可以在任何地方選中單詞,然後使用快捷鍵⌥+ESC發音。僅僅需要這樣設定一下:選擇System Preferences > Dictation & Speech,在Text to Speech標籤頁中選中Speak selected text when the key is pressed

詞典

OS X 自帶了詞典(Dictionary)。你幾乎可以在任何應用中通過三指輕拍觸控板來現實對應單詞的釋義。

也可以開啟 Dictionary 應用來查詢單詞。

可以在 Dictionary 應用中新增英漢漢英詞典。

Dock Position

預設 Dock 在螢幕下方。我們的螢幕一般都是 16:10,Dock 在螢幕下方的話會佔據本來就不大的垂直空間。建議把 Dock 放到左邊或者右邊。

Remove all Dock icons[OCD]

本條目對於強迫症適用。

預設情況下 Dock 被一堆系統自帶的應用佔據著,而其中大部分我都很少使用,當我開啟幾個常用應用後,Dock 上會有很多圖示,每個圖示都會被擠得很小。所以我會把所有 Dock 上固定的圖示都刪掉,這樣一來 Dock 上只有我開啟的應用。

PS:Finder 圖示是刪不掉的。

重置 Launchpad 上圖示位置[OCD]

本條目對於強迫症適用。

新的應用被安裝後,經常會跑到 Launchpad 的第一屏,所以它們的位置跟安裝的順序有關係,而我更希望它們可以按照某種更加穩定的順序排列,比如按照系統預設的順序:

1 defaults write com.apple.dock ResetLaunchPad-booltrue;killall Dock

在預設順序中,Launchpad 第一屏只有 Apple 自家應用。

2. 常用工具

本節介紹一些常用的,跟開發沒有直接關係的第三方應用及其設定。

包管理工具,官方稱之為The missing package manager for OS X

安裝步驟:先開啟 Terminal 應用,輸入:

1 ruby-e"$(curl-fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

有了 brew 以後,要下載工具,比如 MySQL、Gradle、Maven、Node.js 等工具,就不需要去網上下載了,只要一行命令就能搞定:

1 brew install mysql gradle maven node

PS:安裝 brew 的時候會自動下載和安裝 Apple 的 Command Line Tools。

brew 的替代品有 MacPorts,現在基本沒人用它。

brew-cask 允許你使用命令列安裝 OS X 應用。比如你可以這樣安裝 Chrome:brew cask install google-chrome。還有 Evernote、Skype、Sublime Text、VirtualBox 等都可以用 brew-cask 安裝。

brew-cask 是社群驅動的,如果你發現 brew-cask 上的應用不是最新版本,或者缺少你某個應用,你可以自己提交 pull request。

安裝:

1 brew install caskroom/cask/brew-cask

應用也可以通過 App Store 安裝,而且有些應用只能通過 App Store 安裝,比如 Xcode 等一些 Apple 的應用。App Store 沒有對應的命令列工具,還需要 Apple ID。倒是更新起來很方便。

幾乎所有常用的應用都可以通過 brew-cask 安裝,而且是從應用的官網上下載,所以你要安裝新的應用時,建議用 brew-cask 安裝。如果你不知道應用在 brew-cask 中的 ID,可以先用brew cask search命令搜尋。

iTerm2 是最常用的終端應用,是 Terminal 應用的替代品。提供了諸如Split Panes一群實用特性。它預設的黑色背景讓我毫不猶豫的拋棄了 Terminal。

安裝:

1 brew cask install iterm2

感謝 brew-cask,我們可以通過命令列自動安裝 iTerm2 了。

在終端裡,除了可以用⌃E等快捷鍵(詳見其他快捷鍵)之外,還可以使用⌥B⌥F等快捷鍵(具體可以參考這裡)。前提是這樣設定一下:

選擇Iterm選單 > Preferences > Profiles,選擇你在使用的 Profile(預設是Default),在Keys標籤頁中把Left option (⌥) key acts asRight option (⌥) key acts as都設定成+ESC

在開啟新的視窗/標籤頁的時候,預設情況下新視窗總是 HOME 目錄,還需要我每次敲命令才能進入工作目錄。如果想要這個新視窗在開啟的時候就自動進入工作目錄,需要如下設定:

選擇Iterm選單 > Preferences > Profiles,選擇你在使用的 Profile(預設是Default),在General標籤頁中的Working Directory部分中選擇Reuse previous seesion's directory

至此,Terminal 應用已經出色的完成了其歷史使命。後面就交給 iTerm2 啦。

預設的 Bash 是黑白的,沒有色彩。而 Oh My Zsh 可以帶你進入彩色時代。Oh My Zsh 同時提供一套外掛和工具,可以簡化命令列操作。後面我們會看到很多介紹,你會看到我愛死這傢伙了。

安裝:

Shell
1 sh-c"$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

目前我使用的外掛有:git z sublime history rbenv bundler rake

Oh My Zsh 使用了 Z shell(zsh),一個和 Bash 相似的 Shell,而非 Bash。

在 Z shell 中,~/.zshrc是最重要的配置檔案。Oh My Zsh 在安裝的時候會把當前環境的$PATH寫入~/.zshrc中。這並不是我期望的行為,因為使用了 brew,我們基本不再需要去定製$PATH,而 Oh My Zsh 提供的預設$PATH$HOME/bin:/usr/local/bin:$PATH是非常合適的一個值,它把$HOME/bin加入了$PATH,可以讓我們把自己用的指令碼放到$HOME/bin下。

所以建議把~/.zshrc重置:

1 cp~/.oh-my-zsh/templates/zshrc.zsh-template~/.zshrc

Oh My Zsh 還有很多有價值的外掛

Git 常用別名

幾乎每個人都會使用一些方法比如 Git 別名來提高效率,幾乎所有人都會把使用git st來代替git status。然而這需要手動設定,每個人也都不完全一樣。

Oh My Zsh 提供了一套系統別名(alias),來達到相同的功能。比如gst作為git status的別名。而且 Git 外掛是 Oh My Zsh 預設啟用的,相當於你使用了 Oh My Zsh,你就擁有了一套高效率的別名,而且還是全球通用的。是不是棒棒噠?下面是一些我常用的別名:

Alias Command
gapa git add --patch
gc! git commit -v --amend
gcl git clone --recursive
gclean git reset --hard && git clean -dfx
gcm git checkout master
gcmsg git commit -m
gco git checkout
gd git diff
gdca git diff --cached
glola git log --graph --pretty = format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all
gp git push
grbc git rebase --continue
gst git status
gup git pull --rebase
gwip git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit -m "--wip--"

Scroll Reverser

當你在瀏覽一個很長的網頁時,你看完了當前顯示的內容,想要看後續的內容,你可以在 Trackpad 上雙指上滑,或者滑鼠滾輪向上滾動。這是被稱作“自然”的滾動方向。

然而在 Windows 裡滑鼠滾動的行為是相反的:滑鼠滾輪向下滾動才會讓瀏覽器顯示後續的內容,向上滾動會達到頁面的頂部。你可以在 OS X 的系統偏好設定裡修改(選擇System Preferences >Trackpad,在Scroll & Zoom標籤頁中不選中Scroll direction: natural),但是這樣會同時改變滑鼠滾輪的方向和 Trackpad 的方向。

要想只改變滑鼠滾輪的方向,而保持 Trackpad 依舊是“自然”的,我們需要 Scroll Reverser:

1 brew cask install scroll-reverser

PS:這貨會讓三指點選失效

ShiftIt

原生 OS X 下只能手動調整視窗大小,所以我們需要視窗管理工具。我用過很多視窗管理工具,可惜大部分工具都存在快捷鍵衝突的問題(對我來說主要是 IntelliJ IDEA)。ShiftIt 是少見的沒有衝突的視窗管理工具:

1 brew cask install shiftit

PS:ShiftIt的舊版本需要安裝 X11,最新版本已經修正了這個問題。

替代者有 SizeUp,主要快捷鍵和 ShiftIt 相同。

Sublime Text 2

安裝:

1 brew cask install sublime-text

在命令列中指定使用 Sublime Text 開啟某檔案,是一個非常常用的功能,一般我們會按照 OS X Command Line 中所說執行 ln -s "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" ~/bin/subl 來增加subl連結。但是如果你用 brew-cask 安裝的話,恭喜你,你不需要執行這個命令,因為 brew-cask 自動幫你做了這件事情。而且你解除安裝 Sublime Text 的時候 brew-cask 會自動刪掉這個連結。

替代品有 TextMate,Sublime Text 3 等。

MacDown

MacDown 是 Markdown 編輯器。由於 Mou 一直不支援程式碼高亮,我就轉向了 MacDown。完美支援GFM

我特別喜歡 Markdown,我用 Makdown 來寫文章(包括本文),寫幻燈片(reveal.js)。Markdown 可以讓我專注於內容本身,而無需花精力在排版和樣式上。

安裝:

1 brew cask install macdown

z

在開啟終端後,你是怎麼進入專案的工作目錄?是cd xxx⌃R還是用別名?

z 工具可以幫你快速進入目錄。比如在我的 Mac 上執行z cask就會進入/usr/local/Library/Taps/caskroom/homebrew-cask/Casks目錄。

這貨的安裝非常方便,甚至都不需要下載任何東西,因為它已經整合在了 Oh My Zsh 中。編輯~/.zshrc檔案,在plugins=(git)這行中加上z變成plugins=(git z),然後執行source ~/.zshrc重新載入配置檔案,就可以使用 z 了。

替代品有 autojump。autojump 需要使用 brew 安裝。

Vimium 是一個 Google Chrome 擴充套件,讓你可以純鍵盤操作 Chrome,把你的 Chrome 變成“黑客的瀏覽器”。

安裝方法請參考官方網站。

其他瀏覽器也有類似的工具,比如 FireFox 的 KeySnail

LastPass 是管理密碼的工具,支援二次驗證,提供所有瀏覽器外掛以及 Mac 桌面版本。

最重要的是,它提供 命令列 的版本,可以直接通過 brew 安裝

1 brew install lastpass-cli--with-pinentry

之後,只需要登陸:

1 lpass login you@email.com

就可以拷貝密碼或者整合到其他命令中了:

1 lpass show--password gmail.com-c

SourceTree 是 Atlassian 公司出品的一款優秀的 Git 圖形化客戶端。如果你發現命令列無法滿足你的要求,可以試試 SourceTree。

安裝:

1 brew cask install sourcetree

用 brew-cask 安裝會自動增加命令列工具stree$PATH裡。在命令列中輸入stree可以快速用 SourceTree 開啟當前 Git 倉庫。詳細用法請參見stree --help

3. 開發工具

Java

現在 OS X 都不會自帶 JDK 了,所以進行 Java 開發的話,需要下載 JDK。在 brew-cask 之前,我們需要從 https://developer.apple.com/downloads/ 或者 Oracle 網站上下載。還有更麻煩的--解除安裝 JDK 和升級 JDK。

JDK 安裝檔案是 pkg 格式,解除安裝和.app不一樣,且沒有自動解除安裝方式。

而 brew-cask 提供了自動安裝和解除安裝功能,能夠自動從官網上下載並安裝 JDK 8。

Shell
1 brew cask install java

如果你需要安裝 JDK 7 或者 JDK 6,可以使用homebrew-cask-versions

Shell
12 brew tap caskroom/versionsbrew cask install java6

在 OS X 上,你可以同時安裝多個版本的 JDK。你可以通過命令/usr/libexec/java_home -V來檢視安裝了哪幾個 JDK。

那問題來了,當你執行java或者 Java 程式時使用的是哪個 JDK 呢?在 OS X 下,java也就是/usr/bin/java在預設情況下指向的是已經安裝的最新版本。但是你可以設定環境變數JAVA_HOME來更改其指向:

Shell
12345678 $java-versionjava version"1.8.0_60"Java(TM)SE Runtime Environment(build1.8.0_60-b27)Java HotSpot(TM)64-Bit Server VM(build25.60-b23,mixed mode)$JAVA_HOME=/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home java-versionjava version"1.6.0_65"Java(TM)SE Runtime Environment(build1.6.0_65-b14-466.1-11M4716)Java HotSpot(TM)64-Bit Server VM(build20.65-b04-466.1,mixed mode)

其中JAVA_HOME=/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home可以用JAVA_HOME=/usr/libexec/java_home -v 1.6這種更加通用的方式代替。

jEnv

也可以使用 jEnv 來管理不同版本的 JDK,這個工具跟 rbenv 類似,通過當前目錄下的.java-version來決定使用哪個 JDK。jEnv 也可以用 brew 安裝。不過要使用 jEnv 要有幾個問題:

  • 需要手動把eval "$(jenv init -)"加入 profile,沒有 Oh My Zsh 外掛。這點是我非常反感的。可以把eval "$(jenv init -)"加入~/.zlogin,這樣可以避免修改~/.zshrc
  • 需要手動新增 JDK,不會自動採集系統 JDK。跟 Ruby 不同,OS X 已經提供/usr/libexec/java_home工具來管理安裝的 JDK。
  • 需要 jenv rehash。這個是跟 rbenv 學的。

所以我建議不要使用 jEnv。

Java[OCD]

作為一個強迫症患者,每當我看到 Java 的錯誤寫法就想糾正過來。

當指程式語言時,Java 的正確寫法是首字母大寫,其餘小寫。其他寫法比如JAVAjava都是不對的。

在其他一些地方會使用小寫的java

  • java命令
  • 原檔案Main.java
  • 包名java.lang

只有在全大寫的標題裡使用JAVA或者環境變數JAVA_HOME

IntelliJ IDEA

Java 開發必備工具 IntelliJ IDEA。可以安裝 Ultimate Edition:

1 brew cask install intellij-idea

也可以安裝開源免費的 Community Edition:

1 brew cask install intellij-idea-ce

IntelliJ IDEA 有幾套內建的快捷鍵方案(Keymap)。其中適用於 OS X 的有Mac OS XMac OS X 10.5+兩種。區別是:

  • Mac OS X方案和其他平臺上的快捷鍵類似,
  • Mac OS X 10.5+更加符合 OS X 常用的快捷鍵。

一個團隊使用不同的快捷鍵會嚴重影響效率。可以用View | Quick Switch Scheme⌃ Back Quote)快速切換 Keymap。

如果可以選擇的話,我建議使用Mac OS X方案。因為我經常遇到使用 Windows 的客戶,而 Windows 平臺上的快捷鍵和Mac OS X方案類似。

rbenv

人人都需要一個 Ruby 版本管理工具。rbenv 就是這樣一個輕量級工具,它可以通過 brew 安裝。

安裝:

1 brew install rbenv ruby-build

然後在~/.zshrc中加上rbenv外掛。否則你需要手動新增eval "$(rbenv init -)"~/zshrc或者~/.zprofile檔案裡。

有時候專案會依賴一些奇怪的版本號,比如ruby-2.1.