惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Vulnerabilities – Threatpost
T
The Blog of Author Tim Ferriss
S
SegmentFault 最新的问题
D
DataBreaches.Net
博客园_首页
罗磊的独立博客
B
Blog
T
Threat Research - Cisco Blogs
C
Cisco Blogs
GbyAI
GbyAI
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
G
GRAHAM CLULEY
H
Help Net Security
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
爱范儿
爱范儿
SecWiki News
SecWiki News
T
Threatpost
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Schneier on Security
Schneier on Security
T
The Exploit Database - CXSecurity.com
Google Online Security Blog
Google Online Security Blog
T
Tor Project blog
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Y
Y Combinator Blog
H
Hacker News: Front Page
V
V2EX
Security Latest
Security Latest
Cloudbric
Cloudbric
Simon Willison's Weblog
Simon Willison's Weblog
Attack and Defense Labs
Attack and Defense Labs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed
博客园 - 三生石上(FineUI控件)
NISL@THU
NISL@THU
S
Secure Thoughts
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
V2EX - 技术
V2EX - 技术
Vercel News
Vercel News
P
Palo Alto Networks Blog
IT之家
IT之家
MyScale Blog
MyScale Blog
有赞技术团队
有赞技术团队
Application and Cybersecurity Blog
Application and Cybersecurity Blog
D
Docker
Google DeepMind News
Google DeepMind News
Webroot Blog
Webroot Blog

pseudoyu

周报 #106 - OpenClaw 实践、搬家与生活的能量 周报 #105 - 打破无聊的社会 2025 年末回顾 - Anything different is good 周报 #104 - 被遗忘的生活一隅 周报 #103 - 工作随想与被吞噬的生活 周报 #102 - 我是如何使用 AI 的 周报 #101 - 消失了三个月,我的生活发生了什么变化 周报 #100 - 过去这十年 周报 #99 - 离开 RSS3,迷茫与重启人生 周报 #98 - 生活之书与 Agentic Coding 周报 #97 - 日本旅行小记 28 岁的自白:去找寻自己 周报 #96 - 基于 Roo Code/Cursor 的 iOS 开发工作流 周报 #95 - All AI 与 No AI 周报 #94 - 生活的界限与真实感 周报 #93 - 婚礼纪录片与失落的电影院 周报 #92 - 数码产品 Porn 与断舍离 周报 #91 - 一席、消失的时代与自由意志 周报 #90 - OVH 服务器、Coolify 与对 AI Coding 的思考 周报 #89 - 博客改版与 TheWan App 发布 周报 #88 - 方大同、《回留》与人生清单 周报 #87 - 我们主持了自己的宝可梦婚礼,还为它办了一个展 周报 #86 - 用影像打败时间 周报 #85 - 京华烟云 Moment in Peking 周报 #84 - 想起他们 Echos of Reverie 周报 #83 - 年初收纳(房间、设备、服务、软件) 周报 #82 - Brand New Year 与写日记 2024 年末回顾 - 不完美的日子 周报 #81 - Engaged -> Married 与时间的尺度 周报 #80 - 关于求婚、爱情与婚姻 求婚誓言 | 爱的本质是被看见 周报 #79 - 清迈旅居、曼谷之行与 Follow RSSHub 开发实践 #01:Telegram 频道 RSS 订阅实现与部署方案 Follow —— 信息获取的另一种形态 周报 #78 - NAS、Chromebook 与 Zeabur 折腾小记 周报 #77 - 一间只属于自己的房间(对亲密关系的思考) 周报 #76 - 关于 Adulting 的思考 周报 #75 - 回答 Dayu 关于独立博客的 9 个问题 周报 #74 - 清迈异闻录 周报 #73 - 《社交网络》、Ego 与中秋的现充生活 周报 #71 - Indie App 体验计划 周报 #70 - 消失的附近,Burnout 与 Boreout 周报 #69 - AI Coding 体验与学习的源动力 周报 #68 - 关于写博客这件事与我生活的色彩 使用 GoatCounter 与 Zeabur 搭建网站数据统计系统 周报 #67 - 使用 follow 重塑我的信息输入系统 周报 #66 - 10x 工程师、技术热情与个人工具箱 从零开始搭建你的免费博客评论系统(Remark42 + fly.io) 周报 #65 - Adventure X 体验、Apple Notes 笔记实践与 EpubKit 周报 #64 - 生活在此处(《斯通纳》与《Normal People》) 使用 WebP Cloud 与 Cloudflare WAF 为你的图床添加隐私和版权保护 当云服务器崩溃时,我是如何救援重要数据的 周报 #63 - 不愉快的订花经历、商家和消费者与日渐 AI 化的人 从零开始搭建你的免费图床系统(Cloudflare R2 + WebP Cloud) 2024 年了,我的博客有了什么变化 周报 #62 - 香港之行、5am club 计划与 Rust 学习 周报 #61 - 好朋友的婚礼与对婚姻的思考 27 岁的自白:成长是一件很扫兴的事 周报 #60 - 虫子旁、教育理念与 EpubKit 周报 #59 - 沙漠之行、家庭与家人 周报 #58 - 远程工作这一年 周报 #57 - 生活在别处(巴厘岛之行) 周报 #56 - 面基 Randy 与考科目二 周报 #55 - 油画体验、博客系统升级与对 self-hosting 的思考 周报 #54 - 漂流计划、钱包被盗与 Home Server 周报 #53 - 空白的三个月、生活漂流与春节 周报 #52 - 自谦型人格与感情的另一个视角 周报 #51 - 追星小鹿 Lawrence 与生病 周报 #50 - 天坛漫步、重拾阅读和费曼学习法 周报 #49 - 烧焦的键盘、庞贝神话展、健康调整与神奇的梦 周报 #48 - 内蒙之行、清迈游民、重启的周报与生活 周报 #47 - 采访、拳击与工作状态 周报 #46 - 告别长发、周报初心与合约开发 个人信息获取与知识管理系统(Heptabase + Logseq + Readwise) 周报 #45 - 读书笔记、知识管理与双城生活 周报 #44 - 静寂工人、xLog 与日常 周报 #43 - In the Mood for Love 周报 #42 - 感情观、生活状态与自我 周报 #41 - 生日的仪式感、时间管理与北京之行 26 岁的自白:推石头的人 周报 #40 - 开源之夏、代码之外与流逝的睡眠 周报 #39 - 初患新冠、过去的心绪与失而复得的分享欲 周报 #38 - Foundry、Logseq 与 Surge Ponte 周报 #37 - 浮生半月闲( 武汉 | 香港 | 五月天) 周报 #36 - 肠胃炎、捏捏近况与新的旅途 周报 #35 - 登报、搬家和生病的捏捏 周报 #34 - Don't Stop the Clocks 周报 #33 - 北京 x 故事 x 离别 周报 #32 - 武汉、久别重逢与流动的心绪 周报 #31 - 开源、前端开发与 ChatGPT 实践 周报 #30 - 开源预算、写作初心与对技术的谦卑 Cosmos 区块链架构与 Tendermint 共识机制 周报 #29 - 日语学习经验、Steam Deck 与居酒屋 周报 #28 - Mastodon、故乡与捉迷藏的猫 周报 #27 - 何以为家 周报 #26 - 博客、客制化键盘和新服务器 周报 #25 - 基于 Crossbell 的个人信息输出与同步系统(重构) 摄影集 #02 - Moment In Peking (The Autumn) 摄影集 #01 - Cat In The Box 2022 年末回顾 - 迷茫、低谷与改变
Warp,iTerm2 还是 Alacritty?我的终端折腾小记
pseudoyu · 2022-07-10 · via pseudoyu

前言

作为一个开发者,不论是本地代码运行调试还是在远程服务器上进行项目的部署运维,都离不开下图所示的终端,也就是科技电影中常出现的黑窗口。

my_terminal_tools

各个操作系统一般都有自己默认的 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_interface

我本身是一个折腾流,会希望能自己能够对各类配置有足够的定制化空间。然而,如果要我只推荐一款工具给刚使用终端不久的新手,我会毫不犹豫地选择『Warp』。

Warp 是一个基于 Rust 开发的速度极快、功能强大且开箱即用的现代化终端工具。不需要额外配置就支持智能提示、AI 命令智能搜索、命令历史查询、自定义 workflow 等功能。

我是很早参与 Warp 内测的那一批用户,即使是在功能还很不完善的早期,我也被它精致的外观和顺滑的使用体验所惊艳到了。因为基于 Rust 语言开发,Warp 的命令执行与响应速度很快,并且它还内置了很多常用功能,我们无需在 Shell 层配置使用历史记录搜索、命令提示等各类插件就能获得强大的功能支持。

warp_code_block

它还有很多传统终端不具备的特色功能,如“block”的概念,每一条命令的执行都以一种“命令块”的形式呈现,可以通过上下左右键在各个 block 之间移动,避免了有些命令输出结果太长导致需要一直拉动滚动条阅览;并且我们可以通过右上角对特定 block 进行书签收藏、命令复制、内容检索甚至在线分享等。

edit_command_in_warp

与常规终端工具体验不同的是,Warp 的命令输入窗口长期固定在底部(更接近于 IDE),将我们命令输入与结果反馈进行了视觉上的分离;并且它的输入模式接近于文本编辑器,我们可以通过鼠标或是键盘任意移动光标编辑、修改命令或是输入多行命令依序执行,这也是我所认为的 Warp 的 killer feature。

warp_other_feature

我们仅需在输入框使用对应的快捷键即可唤出历史记录检索、自定义 workflow 等功能,并且可以使用鼠标滚轮或是方向键进行选择,十分灵活。更强大的是,当我们使用 Warp 通过 SSH 连接到远程终端时,这些快捷键依然有效,如历史记录搜索等,而无需在目标服务器进行配置。

另外值得一提的是我们可以通过内置快捷键 Command+DCommand+Shift+D 来水平或垂直拆分终端,无需集成其他工具或进行额外配置。

随着技术的发展,文本编辑器不断迭代更新,增加了丰富的功能并提供了更好的使用体验,然而与我们开发人员朝夕相处的终端却一直发展迟缓,Warp 正是在这个阶段应运而生,也正如它官网所描述的那样:

The terminal for the 21st century.

iTerm2

在使用 Warp 之前,我的主力终端工具为 iTerm2,相信这也是很多开发者刚入手 Mac 时的必装软件(毕竟默认终端的颜值和可玩性都不太行)。iTerm2 是一个集美观与功能性为一体的老牌终端工具,即使是默认配置也已经很好的满足了我们的需求。

外观与配色

iterm2_interface

我对一位 YouTuber 『Takuya Matsuyama』的配置加以改造,定制了一个性冷淡风外观方案。

首先在 偏好设置 - Appearance 部分对主题、Tab 栏与状态栏进行如下配置,保持较为简洁的布局。

iterm2_theme_config

完成主题配置后,右键底部状态栏可进行详细配置。我选取了部分状态栏组件实时显示设备状态,这部分可根据自己的偏好进行选择。

iterm2_status_components

Profile - Colors 面板选取自己的主题配色或导入其他配色方案。可以点击这里下载我的配置文件,导入并根据自己的需求进行调整。

iterm2_window_blur_setting

完成配色方案选择后,我通过调整 Transparency 和 Blur 来实现背景透明与毛玻璃效果(即窗口模糊),此处可以根据具体设备的视觉效果进行调整。

完成了终端工具的配置后,我们还需要对 Shell 进行配置,以集成一些定制主题、智能提示、搜索历史记录等拓展模块,我使用的是 zsh + ohmyzsh + starship 方案,因这些配置各个方案通用,详见下述 Alacritty 配置说明部分。

多服务器管理

iterm2_profile_settings

目前我主要使用 iTerm2 来连接我的各个远程主机/服务器,它提供了方便的多配置管理功能,可以通过设置不同的 Profiles 实现不同服务器或配置环境的快速切换,并且可以用醒目的 Badge 来作为标识。

iterm2_multiple_servers_management

当我们在工作或个人使用中需要连接到多台开发机时,可以通过 Command+O 或通过右键 Dock 栏 iTerm2 图标选择对应 Profile 打开服务器,同时也可以通过内置快捷键 Command+DCommand+Shift+D 来水平或垂直拆分终端,便于多服务器同时操作,无需不断切换窗口。

Alacritty

iTerm2 已经是 macOS 平台上颜值与功能都非常平衡的终端工具了,但综合使用下来它的响应速度与配置的自由度还是不那么完美,因此我现在主要将其用于连接远程服务器,本地常用终端后续更换为了 Alacritty

Alacritty 也是一款使用 Rust 编写的跨平台终端工具,提供了一些基础默认配置,并通过 ~/.config/alacritty/alacritty.yml 文件进行各项自定义配置,可以点击这里访问我的完整配置。

外观配置

alacritty_interface

外观部分我主要通过如下配置进行窗口与字体配置,实现了一种半透明的极简配置,甚至都没有任何边框与按钮,其他配置可自行查看,如选中即复制等在 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

alacritty_starship_config

我使用 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

acacritty_tmux_demo

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

macOS 平台用户用过 brew install tmux 安装即可,其他平台可根据官方说明进行安装。

其通过 ~/.tmux.conf 进行配置,点击这里查看我的配置,因其配置使用需要一定学习与记忆成本,本文不做详述,建议通过官方文档或其他完整教程进行学习。

Neovim

我们的日常开发的代码编写一般在 VS Code 或 Jetbrains 家的 IDE 中进行,而调试则需要使用终端,如果不想频繁切换于各个软件之间,我们可以选择 vim 这一可用于命令行的编辑工具。

然而,原生 vim 就是一个简单的窗口,与我们的配置好的终端显得格格不入,因此,我们也将对 vim 进行美化配置。限于篇幅,本文不会涵盖 vim 的具体配置使用相关内容,仅对我的配置方案进行描述。

vi_homepage

我使用的是 neovim 这一 vim 的衍生版本,其高版本采用 lua 进行配置与插件管理。我使用的我的一个朋友 Cluas 定制的方案,并在其基础上进行了一些修改调整,可点击这里查看,仅需将 nvim/ 目录 clone 或下载后复制到 ~/.config 即可。

其显示效果如下:

neovim_file_preview

neovim_edit_file

快捷键配置

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