Warp,iTerm2 還是 Alacritty?我的終端折騰小記

語言: CN / TW / HK
《後來的我們 - 五月天》

前言

作為一個開發者,不論是本地代碼運行調試還是在遠程服務器上進行項目的部署運維,都離不開下圖所示的終端,也就是科技電影中常出現的黑窗口。

各個操作系統一般都有自己默認的 Shell,如 Windows 操作系統下的“Powershell”、macOS 與 Linux 系統的 bash、zsh 等;帶圖形版界面的系統也都會預置終端仿真器(Terminal Emulator),如 macOS 平台下的“終端.app”以及 Linux 各發行版自帶的終端程序等。

作為一個生產力工具愛好者與顏控,我對終端配置美化的折騰從未停止過,也幾經迭代。可能與大多數開發者不同的是,我並不是某種特定方案的擁躉,而是會去嘗試各種工具,依照自己的習慣進行配置降低各個方案之間的操作差異,在日常開發過程中根據用途無縫切換使用,有時甚至是隨機選一個使用以切換心情。

本文主要講述了我的終端方案選擇及配置細節。

終端配置方案需求

終端配置分為幾個方面:

  1. 工具配置 。在使用 macOS 或 Window 系統進行開發時,我們往往需要一個終端仿真器(Terminal Emulator)連接到本機開發環境或遠程服務器。這通常是我們開發過程中的常駐應用,其顏值、響應速度與快捷鍵等也會很大程度影響我們的開發體驗,因此是我們配置與美化的重點。
  2. 功能配置 。我們在使用命令行對系統服務/文件進行一些操作時,需要使用 Shell,如 bash、zsh 等,對其進行一些命令提示、自動補全等配置能有效提升我們的使用體驗。
  3. 集成配置 。除了運行 git 等常用命令行工具外,終端往往還需要滿足文本編輯、多任務管理等進階需求。因此,通過終端配置實現 vim、tmux 等工具的深度集成也是我們開發體驗優化的重要一環。

我梳理了自己的終端使用需求,列出了以下幾個核心要點:

  1. 風格簡約 。作為一個每天都需要長時間面對的軟件,再 fancy 的主題也會看膩,甚至影響自己的注意力。因此,我對終端工具外觀與操作邏輯配置的基本思路為 Minimal Distraction,簡約而不單調。
  2. 響應速度快 。最開始我對終端的配置側重在美觀與功能,安裝了很多插件配置,但也出現了每次軟件開啟會有幾秒延遲的不良體驗。因此,使用過程的響應速度也是我方案選擇與優化的重點。
  3. 可定製性 。因為我的代碼編輯器與窗口管理使用的都是 Vim 『HJKL』 特殊鍵位,因此我也希望能夠進行比較靈活的快捷鍵配置,降低自己在各個軟件直接切換的成本。
  4. 可移植性 。我時常需要在不同的設備上進行操作,偶爾也會有設備的迭代,會希望自己的配置能比較方便地移植到新設備/服務器等,最好是可以複用同一個配置文件。
  5. 可拓展性 。我希望能夠根據自己的需求拓展一些功能與插件,如使用 fzf 對文件或命令歷史記錄進行檢索,通過命令跳轉至指定目錄,使用 waka-time 記錄自己的編程時間等。

我的終端配置説明

即使需求已經比較明確,找到合適的工具與配置方案依舊是一件困難但充滿樂趣的事。接下來我將逐個對我仍在使用並且比較滿意的方案進行描述,並提供我的配置文件供大家參考。

此外,因為我大多數時間都在 macOS 系統上進行開發,所以我的終端工具配置主要是基於 macOS 平台的,但有些工具或插件(如 Alacritty、ohmyzsh、Neovim 等)是跨平台的,配置方式大同小異,可以根據實際情況進行參照與配置。

Warp

我本身是一個折騰流,會希望能自己能夠對各類配置有足夠的定製化空間。然而,如果要我只推薦一款工具給剛使用終端不久的新手,我會毫不猶豫地選擇『 Warp 』。

Warp 是一個基於 Rust 開發的速度極快、功能強大且開箱即用的現代化終端工具。不需要額外配置就支持智能提示、AI 命令智能搜索、命令歷史查詢、自定義 workflow 等功能。

我是很早參與 Warp 內測的那一批用户,即使是在功能還很不完善的早期,我也被它精緻的外觀和順滑的使用體驗所驚豔到了。因為基於 Rust 語言開發,Warp 的命令執行與響應速度很快,並且它還內置了很多常用功能,我們無需在 Shell 層配置使用歷史記錄搜索、命令提示等各類插件就能獲得強大的功能支持。

它還有很多傳統終端不具備的特色功能,如“block”的概念,每一條命令的執行都以一種“命令塊”的形式呈現,可以通過上下左右鍵在各個 block 之間移動,避免了有些命令輸出結果太長導致需要一直拉動滾動條閲覽;並且我們可以通過右上角對特定 block 進行書籤收藏、命令複製、內容檢索甚至在線分享等。

與常規終端工具體驗不同的是,Warp 的命令輸入窗口長期固定在底部(更接近於 IDE),將我們命令輸入與結果反饋進行了視覺上的分離;並且它的輸入模式接近於文本編輯器,我們可以通過鼠標或是鍵盤任意移動光標編輯、修改命令或是輸入多行命令依序執行,這也是我所認為的 Warp 的 killer feature。

我們僅需在輸入框使用對應的快捷鍵即可喚出歷史記錄檢索、自定義 workflow 等功能,並且可以使用鼠標滾輪或是方向鍵進行選擇,十分靈活。更強大的是,當我們使用 Warp 通過 SSH 連接到遠程終端時,這些快捷鍵依然有效,如歷史記錄搜索等,而無需在目標服務器進行配置。

另外值得一提的是我們可以通過內置快捷鍵 Command+DCommand+Shift+D 來水平或垂直拆分終端,無需集成其他工具或進行額外配置。

隨着技術的發展,文本編輯器不斷迭代更新,增加了豐富的功能並提供了更好的使用體驗,然而與我們開發人員朝夕相處的終端卻一直髮展遲緩,Warp 正是在這個階段應運而生,也正如它官網所描述的那樣:

The terminal for the 21st century.

iTerm2

在使用 Warp 之前,我的主力終端工具為 iTerm2 ,相信這也是很多開發者剛入手 Mac 時的必裝軟件(畢竟默認終端的顏值和可玩性都不太行)。iTerm2 是一個集美觀與功能性為一體的老牌終端工具,即使是默認配置也已經很好的滿足了我們的需求。

外觀與配色

我對一位 YouTuber 『 Takuya Matsuyama 』的配置加以改造,定製了一個性冷淡風外觀方案。

首先在 偏好設置 - Appearance 部分對主題、Tab 欄與狀態欄進行如下配置,保持較為簡潔的佈局。

完成主題配置後,右鍵底部狀態欄可進行詳細配置。我選取了部分狀態欄組件實時顯示設備狀態,這部分可根據自己的偏好進行選擇。

Profile - Colors 面板選取自己的主題配色或導入其他配色方案。可以點擊 這裏 下載我的配置文件,導入並根據自己的需求進行調整。

完成配色方案選擇後,我通過調整 Transparency 和 Blur 來實現背景透明與毛玻璃效果(即窗口模糊),此處可以根據具體設備的視覺效果進行調整。

完成了終端工具的配置後,我們還需要對 Shell 進行配置,以集成一些定製主題、智能提示、搜索歷史記錄等拓展模塊,我使用的是 zsh + ohmyzsh + starship 方案,因這些配置各個方案通用,詳見下述 Alacritty 配置説明部分。

多服務器管理

目前我主要使用 iTerm2 來連接我的各個遠程主機/服務器,它提供了方便的多配置管理功能,可以通過設置不同的 Profiles 實現不同服務器或配置環境的快速切換,並且可以用醒目的 Badge 來作為標識。

當我們在工作或個人使用中需要連接到多台開發機時,可以通過 Command+O 或通過右鍵 Dock 欄 iTerm2 圖標選擇對應 Profile 打開服務器,同時也可以通過內置快捷鍵 Command+DCommand+Shift+D 來水平或垂直拆分終端,便於多服務器同時操作,無需不斷切換窗口。

Alacritty

iTerm2 已經是 macOS 平台上顏值與功能都非常平衡的終端工具了,但綜合使用下來它的響應速度與配置的自由度還是不那麼完美,因此我現在主要將其用於連接遠程服務器,本地常用終端後續更換為了 Alacritty

Alacritty 也是一款使用 Rust 編寫的跨平台終端工具,提供了一些基礎默認配置,並通過 ~/.config/alacritty/alacritty.yml 文件進行各項自定義配置,可以點擊 這裏 訪問我的完整配置。

外觀配置

外觀部分我主要通過如下配置進行窗口與字體配置,實現了一種半透明的極簡配置,甚至都沒有任何邊框與按鈕,其他配置可自行查看,如選中即複製等在 iTerm2 上慣用的功能均可通過幾個簡單的配置項實現。

window:
  opacity: 0.85
  padding:
    x: 18
    y: 16
  dynamic_padding: false
  decorations: buttonless

font:
  normal:
    family: "MesloLGSDZ Nerd Font Mono"
    style: Regular
  size: 13.0
  use_thin_strokes: true

ohmyzsh + starship

我使用 zsh 作為默認終端,通過 ohmyzsh 來拓展插件功能。zsh + ohmyzsh 是目前非常流行的 Shell 配置方案,其具備了豐富的插件系統,可以通過幾行配置輕鬆實現各項拓展功能。首先,我們按照其 官方説明 進行安裝。

sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

安裝完成後,通過在 ~/.zshrc 中添加如下配置來啟用 ohmyzsh:

export ZSH="$HOME/.oh-my-zsh"
source $ZSH/oh-my-zsh.sh

我配置了 starship 來美化 Shell 提示。同樣,我們根據 官方説明 進行安裝配置:

curl -sS https://starship.rs/install.sh | sh

完成後在 ~/.zshrc 中添加如下配置即可:

eval "$(starship init zsh)"

此外,我們還可以通過在 ~/.zshrc 的 plugin 部分添加插件配置,例如我配置瞭如下插件支持,實現了智能提示、語法高亮、 Ctrl + R 搜索命令歷史記錄以及 j + <path> 實現快捷跳轉等。

plugins=(
  git
  zsh-autosuggestions
  zsh-syntax-highlighting
  zsh-history-substring-search
  autojump
  zsh-wakatime
  fzf-zsh-plugin
)

我的完整配置可點擊 這裏 進行查看,各插件安裝説明詳見官方文檔。

tmux

因為 Alacritty 本身不提供窗口拆分、Session 管理等功能,所以我們需要集成 tmux 這一強大的跨平台窗口管理工具。

macOS 平台用户用過 brew install tmux 安裝即可,其他平台可根據 官方説明 進行安裝。

其通過 ~/.tmux.conf 進行配置,點擊 這裏 查看我的配置,因其配置使用需要一定學習與記憶成本,本文不做詳述,建議通過官方文檔或其他完整教程進行學習。

Neovim

我們的日常開發的代碼編寫一般在 VS Code 或 Jetbrains 家的 IDE 中進行,而調試則需要使用終端,如果不想頻繁切換於各個軟件之間,我們可以選擇 vim 這一可用於命令行的編輯工具。

然而,原生 vim 就是一個簡單的窗口,與我們的配置好的終端顯得格格不入,因此,我們也將對 vim 進行美化配置。限於篇幅,本文不會涵蓋 vim 的具體配置使用相關內容,僅對我的配置方案進行描述。

我使用的是 neovim 這一 vim 的衍生版本,其高版本採用 lua 進行配置與插件管理。我使用的我的一個朋友 Cluas 定製的方案,並在其基礎上進行了一些修改調整,可點擊 這裏 查看,僅需將 nvim/ 目錄 clone 或下載後複製到 ~/.config 即可。

其顯示效果如下:

快捷鍵配置

tmux 是一個強大的窗口管理工具,然而每次都需要使用 <Ctrl+b> + %<Ctrl+b> + : 來進行水平或垂直分屏,或是使用 <Ctrl+b> + c 來新建窗口等操作十分繁瑣。

那麼,有沒有能夠通過 macOS 自帶的例如其他終端編輯器使用的 Command+DCommand+Shift+DCommand+T 來實現分屏或新建窗口等配置呢?

經過了一番調研與折騰,我參照着 Josh Medeski 的這篇『 macOS Keyboard Shortcuts for tmux 』完美實現了這一需求。

其基本實現方式為,在終端輸入 xxd -psd 命令後,鍵入所需要映射的 tmux 快捷鍵,如 <Ctrl+b> + c ,其會顯示該輸入的 hex codes 為:

^Bc
02630a

其中, 02 代表 <Ctrl+b>63 代表 c ,而 0a 代表回車鍵,因此,在 tmux 中新建窗口的快捷鍵對應 hex code 為 \x02\x63 。我們在 ~/.config/alacritty/alacritty.yml 中的 key_bindings 部分配置如下選項即可:

key_bindings:
  - { key: T, mods: Command, chars: "\x02\x63" }

其他快捷鍵配置實現原理一致,可點擊 這裏 查看我的所有快捷鍵配置並自行修改調整。

總結

至此,我對我目前所使用的三種終端工具進行了介紹與配置説明,開箱即用的 Warp 有其強大之處,iTerm2 在易用性與定製化上實現了不錯的平衡,而 Alacritty 也自有折騰的樂趣。

如我前文所述,有時候換一個終端就是一種全新的心情,閒暇時不斷優化折騰也不失為一種放鬆。當然,每個人的終端配置都各有自己的偏好與特點,本文只是對我的方案進行了介紹,更多滿足了自己的審美追求與功能需求,希望能夠為你的終端配置提供一個參考,如你在配置中遇到問題或有了更好的優化建議,也歡迎交流。

參考資料

  1. GitHub - pseudoyu/dotfiles
  2. GitHub - Cluas/nvim
  3. Warp 官網
  4. iTerm2 官網
  5. Alacritty 官網
  6. ohmyzsh 官網
  7. starship 官網
  8. Neovim 官網
  9. GitHub - tmux/tmux
  10. macOS Keyboard Shortcuts for tmux

相關文章

2022-07-05
基於 frp 內網穿透的瘦客户端開發工作流