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

jopen 9年前發布 | 94K 次閱讀 Mac

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

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

我深知自己的知識有限,所以寫下本文以便和大家切磋交流。同時更有效率的方法和更好的工具也在不斷涌現,我也貪心的希望把更好的方法和工具都收集更到到這里,我會不斷更新本文,讓它盡量不過時。最新內容請訪問:https://github.com/macdao/ocds-guide-to-setting-up-mac。歡迎通過 GitHub 的Issues或者直接Pull Requests方式來分享你的經驗。期待你的反饋。

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

  • 自動化

    舉個例子。手動安裝一個應用,需要1)打開瀏覽器,2)搜索應用的名字,3)打開應用網站,4)尋找下載鏈接和安裝方法,5)下載并等待下載完成,6)安裝下載文件,7)可能還有后續的安裝步驟。而自動化安裝一個應用,只需要1)打開終端工具,2)敲入安裝命令,3)等待完成這幾個步驟。

    自動化可以大大簡化操作,提高效率。

    </li>

  • 統一

    我經常結對編程,偶爾會遇到快捷鍵不一樣,命令不同等問題。我強烈建議,至少在一個團隊中,大家盡量使用相同的快捷鍵、命令等環境。(我記得有個實踐就是這個,可是我一直沒找到該實踐的名字和出處,求告訴)

    </li>

  • 夠用

    夠用就好,如果系統本身已經滿足了我的需求,我不會再使用第三方工具。

    </li>

  • 效率

    效率,一切都是為了效率。

    </li> </ul>

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

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

    PS:雖然本文名為“強迫癥”,但其實并不是真正意義上的強迫癥,真正意義上的強迫癥是一種會對患者的日常生活產生負面影響的疾病。

    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鍵把藍邊轉移到其他按鈕,來實現全鍵盤控制。

    Spotlight 快捷鍵

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

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

      輸入法快捷鍵

      一般來說切換輸入法的快捷鍵是?Space。由于我建議把 Spotlight 的快捷鍵設置為?Space,所以我建議把切換輸入法的快捷鍵設置為?Space。

      其他快捷鍵

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

      • Mac keyboard shortcts

        蘋果官方文檔。當你在寫代碼,怎么通過快捷鍵讓光標轉移到行首、行尾、向上翻頁或者將光標移左移一個詞?都在這片文檔里。

        </li>

      • Mac keyboard shortcuts for accessibility features

        蘋果官方文檔。回車觸發藍底按鈕,空格觸發藍邊按鈕,都出自這里。

        </li> </ul>

        設置 Trackpad 輕拍以點擊

        默認情況下按下觸摸板才是點擊。我喜歡設置成用輕拍作為點擊:

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

        語音

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

        say hello

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

        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 的第一屏,所以它們的位置跟安裝的順序有關系,而我更希望它們可以按照某種更加穩定的順序排列,比如按照系統默認的順序:

        defaults write com.apple.dock ResetLaunchPad -bool true; killall Dock

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

        2. 常用工具

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

        Homebrew

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

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

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

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

        brew install mysql gradle maven node

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

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

        Homebrew Cask

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

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

        安裝:

        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

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

        安裝:

        brew cask install iterm2

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

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

        選擇Iterm菜單 >Preferences>Profiles,選擇你在使用的 Profile(默認是Default),在Keys標簽頁中把Left option (?) key acts as和Right option (?) key acts as都設置成+ESC。

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

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

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

        Oh My Zsh

        默認的 Bash 是黑白的,沒有色彩。而 Oh My Zsh 可以帶你進入彩色時代。Oh My Zsh 同時提供一套插件和工具,可以簡化命令行操作。后面我們會看到很多介紹,你會看到我愛死這家伙了。

        安裝:

        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重置:

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

        Oh My Zsh 還有很多有價值的插件

        替代品有 Oh My Fish,使用了 Fishshell 作為基礎。

        Git 常用別名

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

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

        </tr> </tbody>

        </tr>

        </tr>

        </tr>

        </tr>

        </tr>

        </tr>

        </tr>

        </tr>

        </tr>

        </tr>

        </tr>

        </tr>

        </tr>

        </tr>

        </tr> </tbody> </table>

        完整列表請參考:https://github.com/robbyrussell/oh-my-zsh/wiki/Plugin:git

        Scroll Reverser

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

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

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

        brew cask install scroll-reverser

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

        ShiftIt

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

        brew cask install shiftit

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

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

        當然如果喜歡 hacking,Slate 是個不錯的 hackable 的窗口管理工具。配置可以參照 http://thume.ca/howto/2012/11/19/using-slate/

        Sublime Text 2

        安裝:

        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 會自動刪掉這個鏈接。

        同時 Oh My Zsh 也提供了 Sublime Text 插件,叫做sublime。參考:https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/sublime,這個插件和通過 brew-cask 安裝的 Sublime Text 完美兼容。

        替代品有 TextMate,Sublime Text 3 等。

        MacDown

        MacDown 是 Markdown 編輯器。由于 Mou 一直不支持代碼高亮,我就轉向了 MacDown。完美支持 GFM

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

        安裝:

        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

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

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

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

        LastPass

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

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

        brew install lastpass-cli --with-pinentry

        之后,只需要登陸:

        lpass login you@email.com

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

        lpass show --password gmail.com -c

        3. 開發工具

        Java

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

        JDK 安裝文件是 pkg 格式,卸載和.app不一樣,且沒有自動卸載方式。

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

        brew cask install java

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

        brew tap caskroom/versions
        brew cask install java6

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

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

        $ java -version
        java version "1.8.0_60" Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
        Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
        $ JAVA_HOME=/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home java -version
        java version "1.6.0_65" Java(TM) SE Runtime Environment (build 1.6.0_65-b14-466.1-11M4716)
        Java HotSpot(TM) 64-Bit Server VM (build 20.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。

          </li>

        • 需要手動添加 JDK,不會自動采集系統 JDK。跟 Ruby 不同,OS X 已經提供/usr/libexec/java_home工具來管理安裝的 JDK。
        • 需要jenv rehash。這個是跟 rbenv 學的。
        • </ul>

          所以我建議不要使用 jEnv。

          Java[OCD]

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

          當指編程語言時,Java 的正確寫法是首字母大寫,其余小寫。其他寫法比如JAVA、java都是不對的。

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

        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--"
sesese色