
1. 為什么是iTerm2換掉系統(tǒng)自帶終端之前先搞清楚它值不值得1.1 自帶終端真正讓人難受的地方在Mac上折騰終端這件事一旦開始就停不下來(lái)。我先說(shuō)結(jié)論如果只是偶爾打開命令行跑一兩條命令系統(tǒng)自帶的“終端”確實(shí)夠用但如果你要天天跟服務(wù)器、腳本、日志、編譯任務(wù)打交道iTerm2值得你專門花半小時(shí)好好配置一次。很多人第一次打開iTerm2可能會(huì)問它和系統(tǒng)終端看起來(lái)不都是黑底白字嗎差別在哪差別主要在“用起來(lái)”而不是“看起來(lái)”。系統(tǒng)自帶終端最明顯的問題是窗口管理。開發(fā)的時(shí)候經(jīng)常需要同時(shí)看兩個(gè)目錄下的日志或者一邊編輯配置文件一邊觀察命令輸出。自帶終端雖然支持多標(biāo)簽頁(yè)但標(biāo)簽頁(yè)之間只能來(lái)回切換沒辦法像編輯器那樣在一個(gè)窗口里左右分屏。手動(dòng)把兩個(gè)窗口并排擺也不是不行但每次換顯示器、換工作目錄都要重新調(diào)整位置時(shí)間一久就很煩。其次是配色和字體默認(rèn)的白底黑字在光線暗的環(huán)境里非常刺眼想換主題需要手動(dòng)去改配置改完也不一定好看。還有一個(gè)被很多人忽略的細(xì)節(jié)是粘貼安全問題。自帶終端會(huì)把剪貼板內(nèi)容原封不動(dòng)丟進(jìn)命令行萬(wàn)一復(fù)制了一段帶換行的多行命令可能還沒反應(yīng)過來(lái)就回車執(zhí)行了。1.2 iTerm2 的核心優(yōu)勢(shì)分屏、熱鍵、粘貼保護(hù)一個(gè)不少iTerm2真正吸引人的地方不是花哨而是把終端里高頻的小操作都做到了順手級(jí)別。第一就是分屏iTerm2可以用快捷鍵把一個(gè)窗口切成左右或上下多個(gè)窗格窗格之間獨(dú)立滾動(dòng)甚至支持同步輸入。這個(gè)功能在排查線上問題時(shí)特別實(shí)用一邊開一個(gè)窗格看服務(wù)日志一邊在另一個(gè)窗格敲命令鼠標(biāo)都不用挪。第二是全局熱鍵窗口設(shè)置好之后在任何應(yīng)用里按一個(gè)組合鍵就能呼出終端輸完命令再按一下收起。這個(gè)體驗(yàn)很像在IDE里按快捷鍵打開命令面板但終端窗口是全局的真正做到隨叫隨到。第三是粘貼保護(hù)當(dāng)剪貼板內(nèi)容里包含換行符時(shí)iTerm2會(huì)先彈窗問你確認(rèn)避免誤執(zhí)行多行命令。這個(gè)功能看著簡(jiǎn)單實(shí)際能擋住不少事故。它還有即時(shí)回放、智能選中、狀態(tài)欄、配色預(yù)設(shè)、會(huì)話保存這些能力。如果你剛接觸命令行這套配置能直接降低前期的挫敗感如果你是老手分屏和熱鍵窗口能實(shí)打?qū)嵐?jié)省時(shí)間。下面我開始講怎么從零把iTerm2配置成一天離不開的效率入口。2. 安裝與基礎(chǔ)環(huán)境準(zhǔn)備2.1 官網(wǎng)安裝和Homebrew安裝怎么選iTerm2的安裝方式很成熟兩條路都走得通。第一種是直接從官網(wǎng)下載zip壓縮包解壓后把iTerm2.app拖進(jìn)“應(yīng)用程序”文件夾。首次打開時(shí)如果提示“無(wú)法驗(yàn)證開發(fā)者”之類的信息不要慌這是macOS的Gatekeeper機(jī)制在檢查應(yīng)用來(lái)源不是軟件本身出了問題右鍵軟件圖標(biāo)選擇“打開”即可繞過。第二種方式適合已經(jīng)裝了Homebrew的用戶在終端里執(zhí)行一條命令brew install --cask iterm2這種方式的好處是升級(jí)方便以后想更新命令行里跑一條命令就完成。兩種方式裝完之后按住Command鍵或直接用Spotlight搜索iTerm2就能打開。我個(gè)人的習(xí)慣是優(yōu)先用Homebrew管理因?yàn)楹竺媾渲肸sh、安裝字體也會(huì)依賴Homebrew統(tǒng)一用命令行管理比較省事。如果只是偶爾用終端官網(wǎng)下載反而更直觀沒有多余依賴。需要注意如果之前裝過舊版本iTerm2用新版本覆蓋安裝是可以的配置文件一般會(huì)保留。2.2 把iTerm2設(shè)置成默認(rèn)終端裝好之后很多人做的第一件事是讓系統(tǒng)默認(rèn)用iTerm2打開終端操作。打開iTerm2按Command,進(jìn)入偏好設(shè)置在General - Startup這個(gè)頁(yè)面里找到“Default Terminal”相關(guān)的按鈕點(diǎn)擊“Make default terminal”。設(shè)置完成后在訪達(dá)里右鍵一個(gè)文件夾選擇“新建位于文件夾位置的終端窗口”或類似入口時(shí)打開的就是iTerm2而不是系統(tǒng)終端。macOS版本不同界面文字可能略有差異但核心按鈕不變。這里有一個(gè)小坑有些用戶找不到這個(gè)按鈕或者點(diǎn)了以后沒有反應(yīng)。遇到這種情況先重啟一次iTerm2再試。只要按鈕成功生效你在訪達(dá)里打開終端的操作就會(huì)統(tǒng)一走iTerm2文件管理和命令行之間的銜接會(huì)自然很多。這個(gè)步驟不是必須的但建議做一下尤其是你平時(shí)習(xí)慣用訪達(dá)瀏覽文件、在目錄里直接敲命令的場(chǎng)景。2.3 第一輪偏好設(shè)置窗口、滾動(dòng)記錄和半透明裝好iTerm2后先不要急著找各種主題先把基礎(chǔ)偏好設(shè)置過一遍后面再折騰外觀會(huì)順手很多。打開Preferences - Appearance可以把Theme調(diào)成Dark或Minimal。Minimal會(huì)隱藏掉窗口的標(biāo)題欄讓終端看起來(lái)更干凈我比較推薦。接著到Profiles - Window這里可以調(diào)整窗口的透明度、背景模糊和窗口風(fēng)格。我習(xí)慣把透明度調(diào)到10%左右并開啟Blur這樣終端窗口和背景App疊加時(shí)依然能看清文字又不會(huì)顯得太死板。窗口風(fēng)格選“No Title Bar”和熱鍵窗口配合起來(lái)尤其好看。在Profiles - Terminal頁(yè)面里建議把Scrollback lines調(diào)大。默認(rèn)設(shè)置好的滾動(dòng)行數(shù)可能只有1000行看長(zhǎng)日志時(shí)很容易翻不到之前的輸出。可以直接開啟Unlimited scrollback或者至少調(diào)到10000行。另外在Profiles - Session里有一個(gè)“Dim inactive split panes”選項(xiàng)開啟后多個(gè)窗格并存時(shí)當(dāng)前活躍窗格保持高亮其他窗格自動(dòng)變暗。視覺上能一眼看出自己在操作哪個(gè)窗格多開的時(shí)候很好用。2.4 配色導(dǎo)入用最快的方式換上一套順眼主題iTerm2用.itermcolors文件來(lái)管理配色主題網(wǎng)上很多開源配色項(xiàng)目都提供現(xiàn)成文件。拿到文件后有兩種導(dǎo)入方式一種是直接雙擊.itermcolors文件系統(tǒng)會(huì)用iTerm2打開并導(dǎo)入另一種是在Preferences - Profiles - Colors頁(yè)面點(diǎn)擊Color Presets下拉菜單里的Import然后選中下載好的文件。導(dǎo)入之后還需要在同一下拉菜單里把剛剛導(dǎo)入的主題選一次它才會(huì)真正套用到當(dāng)前Profile。這里有個(gè)非常常見的誤解很多人導(dǎo)入成功后終端顏色根本沒變化原因是當(dāng)前使用的Profile不對(duì)或者Color Presets下拉菜單里選中的不是剛剛導(dǎo)入的主題。你需要先確認(rèn)Preferences左側(cè)的Profiles列表里選中的是你的默認(rèn)配置然后確認(rèn)Colors頁(yè)面里的Color Presets已經(jīng)選中目標(biāo)主題。配色方面我比較推薦Solarized Dark、Dracula和One Dark這類對(duì)比度不刺眼的主題。不過別指望顏色選完就萬(wàn)事大吉后面換了Zsh主題后有些圖標(biāo)和顏色會(huì)被覆蓋那是下一個(gè)步驟要處理的問題。3. 終端環(huán)境升級(jí)Zsh Oh My Zsh 的完整配置3.1 先確認(rèn)當(dāng)前shell是不是ZshmacOS近年來(lái)已經(jīng)把默認(rèn)shell切換成了Zsh但很多從Linux遷移過來(lái)的用戶或者一直沒重新登錄的舊系統(tǒng)終端里可能還在用Bash。做配置之前先運(yùn)行一條命令確認(rèn)echo $SHELL如果輸出是/bin/zsh說(shuō)明已經(jīng)是Zsh直接進(jìn)入下一小節(jié)。如果輸出是/bin/bash說(shuō)明還在用Bash需要手動(dòng)切換。先確認(rèn)Zsh已經(jīng)安裝macOS一般自帶如果沒有可以通過Homebrew安裝brew install zsh然后用chsh命令修改默認(rèn)shellchsh -s /bin/zsh如果是通過Homebrew自定義安裝的Zsh路徑可能是/usr/local/bin/zsh或/opt/homebrew/bin/zsh以which zsh的輸出為準(zhǔn)。切換后需要重啟終端或者重新登錄用戶身份。為什么一定要換成Zsh因?yàn)閆sh的補(bǔ)全體驗(yàn)、主題和插件生態(tài)比Bash豐富太多尤其是配合Oh My Zsh之后很多在Bash里要手動(dòng)實(shí)現(xiàn)的增強(qiáng)功能無(wú)限接近開箱即用。3.2 安裝Oh My Zsh管理配置的地基Oh My Zsh是一個(gè)管理Zsh配置的框架它把主題、插件、別名組織成一套約定俗成的結(jié)構(gòu)。官方提供了一句安裝命令在終端執(zhí)行sh -c $(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)這行命令會(huì)下載一個(gè)安裝腳本并執(zhí)行。執(zhí)行過程中腳本會(huì)提示你設(shè)置Zsh為默認(rèn)shell如果之前已經(jīng)切好了這里一般不會(huì)再問。安裝完成后它會(huì)在家目錄下生成一個(gè).zshrc文件以及一個(gè)隱藏的.oh-my-zsh目錄。以后所有終端配置基本都在.zshrc里改。打開.zshrc能看到ZSH_THEME和plugins這樣的配置項(xiàng)。剛開始建議只改主題和少量插件不要一上來(lái)就把網(wǎng)上的完整配置粘貼進(jìn)去。這里要特別提醒如果不小心把.zshrc改壞了最簡(jiǎn)單的恢復(fù)辦法是找到Oh My Zsh安裝時(shí)生成的備份文件通常是.zshrc.pre-oh-my-zsh。我剛開始折騰時(shí)養(yǎng)成了一個(gè)習(xí)慣每次改動(dòng).zshrc之前先復(fù)制一份到改名文件。這個(gè)習(xí)慣后來(lái)幫我從各種配置事故里快速脫身非常值得保留。3.3 主題選擇從默認(rèn)主題到Powerlevel10kOh My Zsh默認(rèn)主題叫robbyrussell綠色箭頭加目錄名簡(jiǎn)潔但信息密度偏低。想體驗(yàn)豐富一點(diǎn)的先把ZSH_THEME改成agnoster重啟終端后提示符會(huì)變成帶三角形箭頭的折線樣式很多技術(shù)截圖里就是這種效果。不過agnoster在中文環(huán)境下容易出現(xiàn)字符重疊或亂碼因?yàn)樘崾痉锏奶厥夥?hào)需要額外字體支持下一節(jié)會(huì)專門講。如果想要更強(qiáng)的視覺和功能直接用Powerlevel10k。這個(gè)主題的提示符支持顯示當(dāng)前路徑、Git分支、上一條命令耗時(shí)、執(zhí)行狀態(tài)、電池狀態(tài)等而且渲染速度非??臁0惭b方式是通過Oh My Zsh的插件目錄手動(dòng)克隆倉(cāng)庫(kù)git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k然后編輯.zshrc把ZSH_THEME這一行改成ZSH_THEMEpowerlevel10k/powerlevel10k重新打開終端第一次運(yùn)行時(shí)會(huì)進(jìn)入配置向?qū)О刺崾具x擇字體風(fēng)格、顏色方案、提示符樣式等。配置向?qū)ё詈髸?huì)生成一個(gè)~/.p10k.zsh文件之后想微調(diào)直接改這個(gè)文件即可。Powerlevel10k還支持Instant Prompt模式開啟后終端啟動(dòng)時(shí)先顯示基礎(chǔ)提示符其他內(nèi)容后臺(tái)加載體感上幾乎無(wú)等待。我用這個(gè)主題很長(zhǎng)一段時(shí)間覺得它是命令行體驗(yàn)里最有性價(jià)比的一次升級(jí)。3.4 高頻插件自動(dòng)提示與語(yǔ)法高亮配完主題終端還缺兩個(gè)很關(guān)鍵的能力輸入命令時(shí)的歷史自動(dòng)補(bǔ)全以及輸入內(nèi)容時(shí)實(shí)時(shí)反饋是否合法。這兩個(gè)能力分別對(duì)應(yīng)zsh-autosuggestions和zsh-syntax-highlighting。先安裝第一個(gè)git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions再安裝第二個(gè)git clone https://github.com/zsh-users/zsh-syntax-highlighting $ZSH_CUSTOM/plugins/zsh-syntax-highlighting然后在.zshrc里找到plugins這一行改成plugins(git zsh-autosuggestions zsh-syntax-highlighting)保存后執(zhí)行source ~/.zshrc讓配置生效。生效后當(dāng)你輸入命令時(shí)旁邊會(huì)出現(xiàn)灰色的歷史命令余下部分按方向鍵右鍵即可補(bǔ)全當(dāng)你輸入一條不存在的命令時(shí)命令名會(huì)變成紅色正確的命令是綠色。這兩個(gè)插件用了就回不去。有一個(gè)順序細(xì)節(jié)很關(guān)鍵zsh-syntax-highlighting盡量放在plugins列表的最后一位否則高亮功能可能被其他插件覆蓋或者加載不正常。插件數(shù)量也不要堆太多每加一個(gè)都會(huì)拉長(zhǎng)啟動(dòng)時(shí)間。我實(shí)際用下來(lái)git、自動(dòng)建議、語(yǔ)法高亮這三個(gè)再加上少量自定義別名已經(jīng)很夠用了。3.5 別名、PATH、歷史記錄這些細(xì)節(jié)配置文件里除了主題和插件真正日常使用頻率很高的是別名和PATH設(shè)置。我習(xí)慣在.zshrc的底部區(qū)域先規(guī)劃好別名alias llls -lah alias lals -Al alias zshconfigvim ~/.zshrc alias reloadsource ~/.zshrc alias clclearPATH設(shè)置尤其重要尤其是用Homebrew安裝軟件后需要讓Homebrew的bin目錄排在前面??梢栽?zshrc里加export PATH/opt/homebrew/bin:$PATHApple Silicon機(jī)器上Homebrew路徑通常是/opt/homebrew/binIntel機(jī)器是/usr/local/bin按實(shí)際情況填寫。這段要放在比較靠前的位置避免后面用which查找命令時(shí)路徑順序錯(cuò)誤。再一個(gè)值得設(shè)置的是歷史記錄共享HISTFILE~/.zsh_history HISTSIZE5000 SAVEHIST5000 setopt share_history設(shè)置之后多個(gè)終端窗口的歷史命令是相互同步的在A窗口敲過的命令B窗口也能用方向鍵翻到。最后是語(yǔ)言環(huán)境。如果本地終端里中文顯示成亂碼可以在.zshrc加入export LANGzh_CN.UTF-8不過如果你經(jīng)常SSH到遠(yuǎn)程英文環(huán)境的機(jī)器這個(gè)設(shè)定可能造成遠(yuǎn)端locale不一致所以要看實(shí)際場(chǎng)景決定。4. 顏值與效率細(xì)節(jié)字體、快捷鍵、分屏、熱鍵窗口4.1 字體選不對(duì)所有主題都白搭很多人在安裝Powerlevel10k或agnoster之后發(fā)現(xiàn)提示符里的三角箭頭變成了方塊或問號(hào)這就是字體沒選對(duì)。普通終端字體沒有為Powerline符號(hào)專門設(shè)計(jì)字形所以那些特殊字符顯示不出來(lái)。解決辦法是安裝Nerd Fonts方案里的字體或者直接用Powerlevel10k自帶的推薦字體。我自己用下來(lái)比較順手的幾款是MesloLGS NF、FiraCode Nerd Font和JetBrainsMono Nerd Font。通過Homebrew安裝很省事brew install --cask font-meslo-lg-nerd-font brew install --cask font-firacode-nerd-font brew install --cask font-jetbrains-mono-nerd-font裝完字體后在iTerm2的Preferences - Profiles - Text里點(diǎn)擊Font區(qū)域的Change Font選擇新裝的Nerd Font。同時(shí)建議把“Use a different font for non-ASCII characters”也勾上并把非ASCII字體設(shè)置為同一款Nerd Font或者一個(gè)支持中文的字體。這樣Powerline符號(hào)能正常顯示中文也不容易出現(xiàn)渲染問題。字體大小我一般放在12號(hào)左右太小長(zhǎng)時(shí)間看會(huì)累太大在分屏?xí)r又會(huì)浪費(fèi)空間。如果設(shè)置完還亂碼多半是Profile沒選對(duì)或者終端會(huì)話沒有重啟。4.2 快捷鍵把分屏和切換做到肌肉記憶iTerm2默認(rèn)快捷鍵的設(shè)計(jì)已經(jīng)比較合理但很多人不知道。最常用的分屏快捷鍵Command D是垂直分屏也就是左右分成兩個(gè)窗格Command Shift D是水平分屏上下分成兩個(gè)窗格。分屏之后用Command [ 或 Command ] 在窗格之間循環(huán)切換也可以用Command Option 方向鍵精確控制。打開新標(biāo)簽頁(yè)是Command T在多個(gè)標(biāo)簽頁(yè)之間切換用Command 數(shù)字鍵第一個(gè)Tab按1第二個(gè)按2。在終端輸出里搜索內(nèi)容用Command F支持正則海量日志時(shí)很有用。即時(shí)回放用Command Option B它能把終端內(nèi)容往回倒遇到輸出跑太快沒看清楚的場(chǎng)景能救急。這些快捷鍵如果和系統(tǒng)其他軟件沖突可以在Preferences - Keys - Key Bindings里自定義。我個(gè)人的經(jīng)驗(yàn)是不要貪多先記住分屏和切換其他快捷鍵用到再查。剛上手時(shí)想一次性掌握全部快捷鍵反而容易手忙腳亂。4.3 熱鍵窗口全局呼出終端的利器熱鍵窗口是iTerm2不可替代的功能之一。它的表現(xiàn)是你在任何應(yīng)用界面按一個(gè)組合鍵iTerm2就能從屏幕邊緣彈出再按同一個(gè)鍵就收起像系統(tǒng)級(jí)插件一樣沒有窗口邊框。設(shè)置方法在Preferences - Keys - Hotkey點(diǎn)擊“Create a Hotkey Window”然后按下你想用的組合鍵。我在這臺(tái)Mac上選了Option Space。macOS的Spotlight默認(rèn)是Command Space中文輸入法通常占用的是Control Space或Caps LockOption Space很少被其他軟件占用沖突概率低。啟用后熱鍵窗口會(huì)默認(rèn)在屏幕頂部以橫幅樣式彈出。你可以繼續(xù)調(diào)整它的背景透明度、標(biāo)簽欄是否顯示等讓它更輕盈。這個(gè)功能適合隨時(shí)執(zhí)行一條命令不需要切回桌面也不需要在多個(gè)窗口里翻找iTerm2。配合分屏之后基本可以替代大部分“切換窗口”的低效操作。如果你經(jīng)常遇到“突然需要跑個(gè)命令看看狀態(tài)”的場(chǎng)景熱鍵窗口是提升效率最直接的手段。4.4 狀態(tài)欄讓終端窗口自己“開口說(shuō)話”iTerm2較新版本支持在窗口底部顯示一條狀態(tài)欄可以放CPU占用率、內(nèi)存占用、當(dāng)前目錄、Git分支、最近命令耗時(shí)等信息。打開方式是Preferences - Profiles - Session找到Status bar相關(guān)選項(xiàng)勾選Show status bar然后點(diǎn)擊Configure Status Bar在彈出界面里添加組件右側(cè)實(shí)時(shí)預(yù)覽。我比較推薦的組件是Git branch和Current directory。多個(gè)分屏窗口同時(shí)工作時(shí)狀態(tài)欄能避免你忘記自己正在哪個(gè)分支、哪個(gè)目錄。如果覺得狀態(tài)欄占地方可以勾選Auto hide status bar終端空閑時(shí)自動(dòng)隱藏只在觸發(fā)操作時(shí)顯示。狀態(tài)欄頂部還可以放Activity indicator有后臺(tái)任務(wù)運(yùn)行時(shí)會(huì)顯示提示跑長(zhǎng)時(shí)間編譯任務(wù)時(shí)很好用。狀態(tài)欄的配置很個(gè)人化不一定全都要。我自己默認(rèn)只開當(dāng)前目錄、Git分支和CPU占用其他信息需要看時(shí)再手動(dòng)加。配置完之后每個(gè)終端窗口的信息可讀性會(huì)高出一大截。5. 配置同步與遷移換新Mac時(shí)不用從頭再來(lái)5.1 用iTerm2的動(dòng)態(tài)配置保存功能折騰完iTerm2它會(huì)變成一個(gè)很順手的工具。但還有一個(gè)現(xiàn)實(shí)問題擺在面前如果換了一臺(tái)新Mac或者系統(tǒng)重置能不能快速恢復(fù)iTerm2提供了一個(gè)非常方便的動(dòng)態(tài)配置保存選項(xiàng)。在Preferences - General - Preferences頁(yè)面里可以看到“Load preferences from a custom folder or URL”。你可以指定一個(gè)本地文件夾存放配置比如~/dotfiles/iterm2并勾選Save settings讓它自動(dòng)保存。以后任何偏好設(shè)置的修改都會(huì)被程序自動(dòng)導(dǎo)出到指定目錄的plist文件里。換新機(jī)器時(shí)只要在iTerm2里把路徑指到同一個(gè)文件夾就能加載同一套配置。如果你用了同步網(wǎng)盤多臺(tái)Mac之間甚至可以實(shí)時(shí)同步。不過同步前要想清楚網(wǎng)盤在多臺(tái)設(shè)備間同時(shí)打開時(shí)可能會(huì)把舊的配置文件同步覆蓋最好在做大幅度調(diào)整之前先關(guān)閉自動(dòng)同步。iTerm2還有一個(gè)手動(dòng)導(dǎo)出入口在General - Preferences頁(yè)面里可以執(zhí)行Save All Settings或者Copy plist to custom folder總之把配置落盤成文件再遷移是最穩(wěn)的。5.2 Dotfiles管理把Zsh配置文件納入版本管理iTerm2自己管理的配置解決外觀和窗口行為Zsh相關(guān)的配置則要單獨(dú)處理。我的做法是把~/.zshrc、~/.p10k.zsh這類文件放進(jìn)一個(gè)dotfiles目錄然后用符號(hào)鏈接把家目錄里的配置入口指向版本管理目錄。例如mkdir -p ~/dotfiles mv ~/.zshrc ~/dotfiles/.zshrc ln -s ~/dotfiles/.zshrc ~/.zshrc接下來(lái)就可以用Git之類的工具管理這個(gè)目錄。以后改動(dòng)配置記錄到dotfiles倉(cāng)庫(kù)里每次到新機(jī)器上只需要克隆倉(cāng)庫(kù)、重新建好符號(hào)鏈接、再安裝一遍Oh My Zsh和插件配置就回來(lái)了。有人可能會(huì)問直接拷貝.zshrc行不行當(dāng)然也可以但符號(hào)鏈接的好處是你修改的真正文件在dotfiles目錄里不容易漏備份。如果你不想用Git也要定期把.zshrc備份到云盤或移動(dòng)硬盤。我見過太多人配置了半年結(jié)果電腦出問題后全部從頭再來(lái)這種痛苦經(jīng)歷過一次就會(huì)理解備份的價(jià)值。5.3 寫一個(gè)可重復(fù)執(zhí)行的配置腳本思路如果每次裝完系統(tǒng)都要手動(dòng)跑一堆安裝命令其實(shí)效率并不高??梢园亚懊嫠邪惭b步驟壓縮進(jìn)一個(gè)腳本新機(jī)器上執(zhí)行一次就完成大半。腳本的核心思路是先裝Homebrew再用brew安裝iTerm2和字體接著安裝Oh My Zsh然后克隆Powerlevel10k和幾個(gè)插件最后用符號(hào)鏈接把配置指到正確位置。下面給一個(gè)示意結(jié)構(gòu)#!/bin/bash # 一鍵配置終端環(huán)境示意 export ZSH_CUSTOM${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom} brew install --cask iterm2 brew install --cask font-meslo-lg-nerd-font sh -c $(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh) git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions git clone https://github.com/zsh-users/zsh-syntax-highlighting $ZSH_CUSTOM/plugins/zsh-syntax-highlighting ln -sf ~/dotfiles/.zshrc ~/.zshrc腳本里沒有設(shè)置主題和插件列表因?yàn)槟遣糠忠蕾嚹銓?shí)際的.zshrc內(nèi)容真實(shí)使用時(shí)會(huì)加條件判斷。這里想表達(dá)的是配置過程不能只停留在“改好就行了”把它變成可重復(fù)執(zhí)行的資產(chǎn)才是折騰終端的最終目的。執(zhí)行完腳本后新機(jī)器上第一次打開終端可能還會(huì)要求運(yùn)行p10k configure這很正常因?yàn)橹黝}配置向?qū)枰藱C(jī)交互。把這套流程走完換機(jī)成本基本控制在半小時(shí)以內(nèi)。6. 常見問題與排查技巧實(shí)錄6.1 導(dǎo)入配色后界面沒有變化這個(gè)問題絕大多數(shù)情況下是因?yàn)楫?dāng)前使用的Profile不對(duì)。iTerm2允許你建立多個(gè)Profile每個(gè)Profile可以擁有獨(dú)立的字體、配色、快捷鍵布局。如果你在Profiles列表里選中了A Profile卻在B Profile的Colors頁(yè)面導(dǎo)入了主題界面上當(dāng)然不會(huì)變。遇到這種情況先確認(rèn)當(dāng)前正在使用的Profile是哪一個(gè)然后到Colors的Color Presets里重新選擇主題。還有一個(gè)細(xì)節(jié)容易被忽略有些主題導(dǎo)入后需要調(diào)節(jié)Terminal里的Minimum contrast參數(shù)。它控制文字與背景的最小對(duì)比度如果覺得文字蒙了一層灰可以適當(dāng)調(diào)高這個(gè)值。如果調(diào)色后整體顏色和預(yù)期差太遠(yuǎn)不妨換一個(gè)主題試試不同主題在不同Profile上的表現(xiàn)會(huì)有細(xì)微差異。6.2 安裝Powerlevel10k后圖標(biāo)還是方框排在第一位的仍然是字體問題。確認(rèn)iTerm2當(dāng)前Profile的Font區(qū)域確實(shí)選擇了Nerd Font并且“Use a different font for non-ASCII characters”里也選了一款合適的字體。因?yàn)镻owerlevel10k提示符里的分支圖標(biāo)、時(shí)鐘圖標(biāo)都屬于特殊字符普通英文字體沒有包含這些字形。安裝多個(gè)Nerd Font后注意別讓系統(tǒng)默認(rèn)字體接管特殊字符最好在iTerm2設(shè)置里統(tǒng)一把非ASCII字體也指定為Nerd Font。如果字體設(shè)置沒問題就在終端運(yùn)行p10k configure重新走一遍配置向?qū)鼤?huì)按你選擇的字體重新生成合適的圖標(biāo)類型。做完這一步大部分亂碼問題能解決。如果字體和向?qū)Ф荚囘^還是方框可以考慮重啟一次iTerm2因?yàn)槟承┳煮w資源需要在App重啟后才完全載入。6.3 執(zhí)行source ~/.zshrc時(shí)報(bào)command not found這個(gè)提示說(shuō)明.zshrc里引用了某個(gè)沒有安裝或路徑不對(duì)的命令最常見的原因是插件問題。檢查plugins這一行里的插件目錄名是否與克隆時(shí)的目錄名一致比如zsh-autosuggestions目錄名不能寫錯(cuò)。另一個(gè)常見錯(cuò)誤是先把插件加入了plugins列表但還沒有執(zhí)行g(shù)it clone導(dǎo)致Oh My Zsh找不到對(duì)應(yīng)目錄。還有可能是自己加的alias或函數(shù)名和系統(tǒng)命令重名干擾了正常命令解析。排查思路是先把.zshrc里最近新增的內(nèi)容注釋掉然后分段執(zhí)行source看具體是哪一段報(bào)錯(cuò)。不要小看這個(gè)問題.zshrc加載出錯(cuò)后不會(huì)立刻影響當(dāng)前終端但新開窗口時(shí)提示符會(huì)變得很難看甚至長(zhǎng)時(shí)間卡住不加載完整環(huán)境。6.4 終端啟動(dòng)變慢怎么辦插件數(shù)量越多Zsh啟動(dòng)越慢這是不可避免的。想量化啟動(dòng)耗時(shí)運(yùn)行time zsh -i -c exit這行命令會(huì)輸出Zsh以交互模式啟動(dòng)并退出的總耗時(shí)。如果接近1秒甚至更久就要考慮精簡(jiǎn)。先看plugins里有沒有裝了但實(shí)際不用的插件比如z、history-substring-search這些能裁就裁。其次看主題Powerlevel10k本身渲染很快反而是某些老主題因?yàn)橐獔?zhí)行外部程序會(huì)拖慢啟動(dòng)。Powerlevel10k的Instant Prompt功能記得開啟它能讓終端先出現(xiàn)基礎(chǔ)提示符其余后臺(tái)加載延后體感會(huì)明顯變快。如果用了iTerm2的狀態(tài)欄狀態(tài)欄本身不會(huì)顯著影響啟動(dòng)但狀態(tài)欄上的組件如果自動(dòng)刷新太頻繁也可能造成一段時(shí)間的高CPU占用。6.5 iTerm2窗口偶發(fā)卡頓和渲染問題較新的硬件上如果感覺iTerm2滾動(dòng)不流暢可以檢查渲染引擎。在Preferences - Appearance - General里找到渲染引擎選項(xiàng)優(yōu)先選擇Metal作為Preferred rendering engine。Metal渲染在滾動(dòng)和大量文本輸出的場(chǎng)景下流暢度優(yōu)勢(shì)很明顯。窗口透明度和模糊效果開得太高也會(huì)帶來(lái)額外性能開銷全屏運(yùn)行且需要跟服務(wù)器長(zhǎng)交互時(shí)建議適當(dāng)降低特效。還有一個(gè)偶發(fā)問題是字體渲染模糊外接普通分辨率的顯示器時(shí)比較常見。這種多半和縮放設(shè)置有關(guān)而不是終端軟件本身。試著把字體大小調(diào)到整數(shù)像素例如12號(hào)或13號(hào)會(huì)比11.5這種半整數(shù)看起來(lái)邊緣更清晰。6.6 中文字符顯示與locale問題中文亂碼要分兩種情況看本地終端亂碼還是SSH到遠(yuǎn)程服務(wù)器后亂碼。本地亂碼優(yōu)先檢查字體確認(rèn)非ASCII字體選的是支持中文的字體比如PingFang SC。其次是環(huán)境變量在.zshrc里加export LANGzh_CN.UTF-8讓終端進(jìn)程使用UTF-8編碼。如果遠(yuǎn)程SSH也亂問題多半在遠(yuǎn)程服務(wù)器的locale設(shè)置本地加LANG不一定有用需要在遠(yuǎn)程機(jī)器上調(diào)整對(duì)應(yīng)配置。我建議不要在.zshrc里強(qiáng)行寫入單一語(yǔ)言環(huán)境。因?yàn)橥环菖渲每赡茉诒镜睾瓦h(yuǎn)程都會(huì)加載反而可能引發(fā)不一致。更穩(wěn)妥的做法是只在本地配置好遠(yuǎn)程的locale交給對(duì)應(yīng)服務(wù)器的管理流程去處理。6.7 多行粘貼提示這個(gè)功能千萬(wàn)別關(guān)寫到最后想提醒一個(gè)很多人忽略的安全細(xì)節(jié)。iTerm2默認(rèn)在檢測(cè)到剪貼板內(nèi)容包含換行符時(shí)會(huì)彈出一個(gè)提示詢問你是要原樣粘貼還是轉(zhuǎn)義后粘貼。這個(gè)功能默認(rèn)開著但有些教程為了讓自動(dòng)化腳本粘貼方便會(huì)引導(dǎo)大家把“Ask for confirmation when pasting multi-line text”這個(gè)選項(xiàng)關(guān)掉。如果你的工作流里有大量手工粘貼腳本關(guān)掉確實(shí)順滑但同時(shí)也會(huì)失去一道保護(hù)屏障。我個(gè)人建議保留它終端里誤粘貼帶來(lái)的損失比多按一次回車要大得多。如果覺得每次都被攔截很煩可以只在偏腳本化的專用Profile里關(guān)閉日常使用的默認(rèn)Profile繼續(xù)開著這個(gè)小取舍長(zhǎng)期看是值得的。最后再分享一個(gè)我的實(shí)操習(xí)慣配置完成之后把~/.zshrc、~/.p10k.zsh和iTerm2導(dǎo)出的配置文件統(tǒng)一放進(jìn)同一個(gè)備份目錄每次調(diào)整前復(fù)制一份。遇到解釋不了的奇怪問題對(duì)比備份能幫你快速定位我在實(shí)際使用中就靠著這個(gè)習(xí)慣省下過不少時(shí)間。如果你也想把終端收拾得舒服一點(diǎn)這套流程值得完整跑一遍。