软件推荐:Warp
文章目录
介绍
Warp 是一个跨平台的终端:Windows、macOS、Linux 都有官方版本。它用 Rust 写,GPU 渲染,把每次「回车 + 输出」包成一个 Block,再围绕 Block 加了一整套传统终端没有的东西:重启恢复现场、输入自动提示、Tab 列出命令参数、输入框 Vim 模式、输出过滤……
Warp 2020 年由 Zach Lloyd(前 Google 工程师)创立,用 Rust 从零写。2023 年加上 AI,2024 年 2 月发布 Linux 版,2025 年 2 月发布 Windows 版。也就是说,它直到去年才真正配得上「跨平台」这三个字;今年 4 月 28 日又把客户端开源了,大部分代码 AGPL-3.0,UI 框架 MIT,OpenAI 是创始赞助方。
我第一次听说它是在 2022 年,当时只有 macOS 版,还要排队。我最早放弃它,是因为两个很现实的原因:闭源,以及当时必须登录才能用。
真正让我装上的,是 2025 年的 Windows 版——我日常在 Windows 上写代码,一个只有 macOS 的终端再好也和我没关系。现在这两个理由都淡了——不登录也能用终端和补全,客户端也在上个月开源了。
一句话概括:Warp 没有改变终端里能做什么,它改变的是「用过的东西怎么找回来」。
Warp 的很多功能都不是它首创:自动提示来自 fish,参数补全来自 IDE,Vim 模式来自编辑器,输出过滤来自日志工具。它的本事是把这些成熟的东西搬进终端,再用 Block 串起来。这个串法,才是它和别的终端不一样的地方。
环境
- Windows 11 23H2,PowerShell 7.5
- Warp v0.2026.05.13
跨平台
| 平台 | 要求 | 安装 |
|---|---|---|
| Windows | Windows 10 1903(build 18362)及以上,x86_64 / ARM64 | winget install Warp.Warp,或下载安装包 |
| macOS | 10.14 及以上,Intel / Apple silicon,需要 Metal | brew install --cask warp |
| Linux | glibc 2.31 及以上,OpenGL ES 3.0 或 Vulkan,x86_64 / ARM64 | deb / rpm / pacman / AppImage,官方也提供 apt、dnf、pacman 源 |
Windows 版走 ConPTY,PowerShell 7、PowerShell 5、WSL2、Git Bash 都能开;cmd.exe 目前不支持,官方还在 GitHub issue 里挂着。这对还在用 cmd 的人来说是个硬门槛,不过如果你在 Windows 上开发,大概率已经迁到 PowerShell 或 WSL 了。
Linux 版支持原生 Wayland,但要手动在 Settings > Features > System 里打开。打开之后全局热键会失效——Wayland 协议不提供这个能力,不是 Warp 的锅。macOS 需要 Metal,太老的机器会被挡在门外。
快捷键是日常最大的差异:macOS 用 ⌘,Windows / Linux 用 Ctrl。文档里每个功能都按平台分别列了快捷键,抄的时候注意。
另外,它跑的还是你原来的 shell:.zshrc、.bashrc、PowerShell 的 $PROFILE、fish 的 config.fish 都照旧,别名和环境变量不用重写。换终端的成本主要是习惯,不是配置。
一条命令就是一个 Block
这是 Warp 所有功能的地基,值得先讲。
在传统终端里,输出是一条连续的字符流。你敲一条命令,它吐一堆字,然后继续往下滚;想把「刚才那条命令的输出」单独拿出来,只能靠鼠标拖选,还得小心别把提示符和别的命令一起选进去。
Warp 把每次回车之后的东西包成一个 Block:命令、输出、退出码都在里面。退出码非 0 的 Block 会标红,侧边栏也是红的,扫一眼就知道哪条挂了。
Block 带来的是「输出变成了对象」:
- 右键菜单里可以只复制命令、只复制输出,或者两个一起复制。
Ctrl+↑选中最近的 Block,再用↑/↓在 Block 之间移动,不用滚轮找半天。- 输出很长时,顶部会钉一条 Sticky Command Header,告诉你这一屏是谁吐的;点一下回到 Block 开头。
- 可以给 Block 加书签(只在当前 session 有效)、分享成网页链接、把命令存成 Workflow。
Ctrl+Shift+F在当前 pane 的所有 Block 里搜,支持正则和大小写。
后面要讲的恢复、过滤、查找,全都建立在「输出是有边界的」这件事上。没有 Block,就没有这些。
关掉再打开,现场还在
这是 Warp 最打动我的功能,也是我认为它和传统终端最不一样的地方。
默认开启。关掉 Warp、重启系统、第二天再打开,上次的窗口、标签页、分屏都还在,每个 pane 里最近的命令和输出也原样躺着。不是「恢复标签页标题」那种恢复,是连 dotnet build 吐的那几百行日志、git log 的颜色、报错的红字一起恢复。
我以前的习惯是:跑完一个长命令,先把关键输出复制到笔记里,再关终端;系统提示重启时,先想办法把没看完的日志存下来。用了 Warp 之后这一步没了——直接关,下次打开接着看。
命令历史大多数 shell 本来就会存,Warp 多出来的是「输出」和「窗口 / 标签 / 分屏布局」,而且是按 Block 存的,不是一张屏幕截图。这两样东西,大多数终端要么不管,要么只恢复到「屏幕内容」这一层。
它是怎么存的
Warp 把上一个 session 的窗口、标签页、pane 和最近的 Block 写进一个本地 SQLite 数据库,每次退出时用最新的现场覆盖。数据库的位置:
| 平台 | 路径 |
|---|---|
| Windows | %LOCALAPPDATA%\warp\Warp\data\warp.sqlite |
| macOS | ~/Library/Group Containers/2BBY89MBSN.dev.warp/Library/Application Support/dev.warp.Warp-Stable/warp.sqlite |
| Linux | ${XDG_STATE_HOME:-~/.local/state}/warp-terminal/warp.sqlite |
装了 sqlite3 的话可以直接打开看:
|
|
这个设计有两个好处:一是恢复不依赖云端,断网也能用;二是数据在你自己机器上,想看、想删都行。
它不恢复什么
要泼一盆冷水:恢复的是现场,不是进程。
上次开着的 npm run dev、dotnet watch、ssh 连接,重启后都不会自己回来。Warp 恢复的是这些命令留下的记录,进程本身已经随着退出结束了。所以它解决的是「输出丢了」,不是「任务断了」;后者还是得靠 tmux、systemd、nohup 或者干脆重跑。
另外,恢复的是「退出时」的现场,而且只覆盖最近的若干条 Block,不是无限滚动的全部历史。它记录的是退出时的状态,不是实时快照,别把它当成事务日志。
隐私
因为输出会落盘,敏感内容也会落盘。数据库没有额外的加密,能用 sqlite3 直接打开;在共用电脑上,或者经常在终端里 export TOKEN=... 的人,建议先想一下这件事。另外,遥测和崩溃报告默认开启,可以在 Settings > Privacy 里关掉「Help improve Warp」和「Send crash reports」;免费版用 AI 时遥测必须开着,不用 AI 就可以全关。
恢复功能的开关在 Settings > Features > Restore windows, tabs, and panes on startup,关掉之后不再记录新的输出。想彻底清掉,退出 Warp 后删掉上面那个 warp.sqlite 就行。当前 session 里的 Block,可以用 Ctrl+Shift+K 清空(macOS 是 ⌘+K)。
输入:从「记住命令」到「挑一个」
自动提示
打字的时候,Warp 会根据 shell 历史和补全给出灰色提示,按 → 或 Ctrl+F 接受,Ctrl+Shift+→ 一次接受一个词(macOS 是 Ctrl+→)。
这有点像 fish 的 autosuggestion,但 Warp 是跨 shell 的:PowerShell、zsh、bash、fish 都有。对经常敲一长串 docker run -it --rm -v ... 的人,这个功能省下的是「翻历史 + 找那条命令 + 改参数」的时间。
提示来自本地历史和补全,不联网,也不消耗 AI 额度。
Tab 补全:把参数摊开
这是 Warp 和普通终端补全差别最大的地方。
在普通终端里,git checkout 后面按 Tab 能补出什么,取决于 shell 和补全脚本:没配置时只有文件名,配置了才有分支;参数(--orphan、--track)基本靠背。Warp 给一批常用命令内置了补全规则(spec),按 Tab 会把子命令、选项、参数、分支、容器、Pod 之类的候选一起列出来,而且是模糊匹配:
| 输入 | 按 Tab 之后 |
|---|---|
git checkout |
本地分支列表,带搜索 |
git commit - |
--message、--amend、--no-verify 等选项和说明 |
docker |
run、ps、images、compose 等子命令 |
kubectl |
子命令、资源类型、命名空间 |
cargo |
子命令和常用参数 |
npm |
子命令和脚本 |
补全支持别名:alias gc='git checkout' 这种 shell alias,gc 后面按 Tab 也能出 git checkout 的候选;git st 这种子命令别名也认。
默认要按 Tab 才弹。嫌麻烦可以在 Settings > Features > Terminal Input 里打开「Open completions menu as you type」,边打边出菜单。
限制也很明确:它只认内置的 spec。 git、docker、kubectl、npm、cargo、brew、terraform、aws 这些常见命令覆盖得不错,但你自己写的 CLI、公司内部的工具、刚发布的小众命令,没有 spec 就没有参数提示,只能退回 shell 自己的补全。Warp 的 spec 来自 Fig 的生态,覆盖范围跟着上游走,这不是「装完就什么都能补」的魔法。
Vim 模式
输入框原生支持 Vim 键位,不是模拟,是 Warp 自己实现的一套。
打开方式:Settings > Features > Text Editing,勾上「Edit code and commands with Vim keybindings」;也可以在 Command Palette 里搜「vim keybindings」。
打开之后,输入框默认在 insert 模式,Esc 进 normal,然后就是熟悉的操作:
- 移动:
hjkl、wbe、0^$、ggG、%跳括号。 - 编辑:
d、c、y、p、x、r、~、J、.重复上一次修改。 - 文本对象:
iw、aw、i"、a(、i{。 - 可视模式:
v、V,配合d、y、c、U。 - 寄存器:
"a到"z、"+、"*,以及 unnamed register。 - 字符搜索:
f、t、F、T、;、,。
有两个和 Vim 不一样的地方要知道:
/、?、*、#不搜索当前 buffer,而是打开 Warp 的 Command Search。Warp 的输入框通常只有一两行,搜 buffer 意义不大,它把这个键位让给了命令历史搜索。习惯/<关键词>的人第一次会愣一下。- 目前只支持默认键位,不能自定义 mapping;唯一能改的是「退出 insert 模式」的快捷键,在
Settings>Keyboard shortcuts>Exit Vim insert mode。
还有一点容易误会:Vim 模式作用于输入框,不是输出区。你没法用 j / k 在 Block 之间移动,也没法用 : 命令操作历史输出。它是让你「改命令」的时候手感一致,不是把整个终端变成 Vim。
但对我来说这就够了。命令越写越长,ci"、di(、cw 这些操作比按几十次方向键舒服太多;尤其是改一条从历史里翻出来的长命令,Vim 模式的效率完全不是一个量级。
命令搜索
Ctrl+R 打开 Command Search,模糊搜索历史命令、Workflow、Prompt,结果按相关度排序,可以用 history:、prompts: 前缀过滤。
这是 Warp 自己的搜索面板,不是 shell 的反向搜索。如果你习惯 fzf 或 atuin,它们和 Ctrl+R 会抢同一个键,需要自己改键。
输出:在一万行里找那一行
过滤
Block 右上角有个漏斗图标,或者按 Alt+Shift+F(macOS 是 Option+Shift+F),就能对当前 Block 的输出做过滤:
- 纯文本匹配,支持正则、区分大小写、反向过滤。
- 可以加「上下文行数」,比如匹配行前后各显示 3 行。
- 过滤是非破坏性的:原始输出还在,清掉过滤条件就回来。
这个功能在下面这些场景里非常好用:
dotnet build刷了几千行,只想看error和它前后几行。kubectl describe pod输出几十屏,只想看Events。- 跑测试,几万个测试名里只关心失败的那几个。
- 日志里搜一个 request id,前后文一起看。
传统终端的做法是「搜关键词 + 高亮」,你还得在几千行里自己找上下文;Warp 是直接把不匹配的行藏起来,屏幕上只剩你要的。对于「输出很多,但只关心一小部分」的调试场景,这是质变。
查找
Ctrl+Shift+F(macOS 是 ⌘+F)打开 Find,在当前 pane 的所有 Block 里从下往上搜,支持正则、区分大小写,也可以只搜选中的 Block。
过滤和查找的区别:
| 过滤 | 查找 | |
|---|---|---|
| 范围 | 当前 Block | 当前 pane 的所有 Block |
| 结果 | 只显示匹配行 | 高亮匹配,跳转 |
| 上下文行 | 支持 | 不支持 |
| 快捷键 | Alt+Shift+F |
Ctrl+Shift+F |
两个都要用:先用 Find 定位到哪个 Block,再用 Filter 把那个 Block 缩小到几行。
限制也有:过滤只在单个 Block 内,查找只在当前 pane 内。想跨标签页、跨窗口搜所有历史输出,得靠别的手段,比如把输出重定向到文件再用 rg。
其他值得一提的
Warp Drive
Warp Drive 是它的「命令知识库」:Workflow(带参数的命令模板)、Notebook(可执行的 Markdown 笔记)、Prompt(常用提示词)、环境变量,都能存进去,可以同步、可以分享给团队。
Workflow 对我来说最实用:把「一长串带参数的命令」存成模板,参数用 {{...}} 占位,可以设默认值、可以设枚举,下次从 Command Palette 里搜名字,填参数,回车。比在笔记里翻命令再复制粘贴快得多。
AI
Warp 内置了 AI:自然语言生成命令、解释报错、Agent Mode(让 AI 在终端里自己跑命令、改文件)。也支持 BYOK,接自己的模型。
我用得不多。一方面是大部分时候 Tab 补全和自动提示已经够了;另一方面是 AI 功能要登录、要额度,免费版有限制。它是个加分项,不是我用 Warp 的理由。不登录也能用终端和补全,这点倒是比早期舒服很多。
界面和窗口
主题、字体、光标、背景透明度、窗口模糊都能调,内置主题不少;标签页、分屏、全局热键、Command Palette(Ctrl+P)也都有。Prompt 可以自定义,SSH 远程会话可以开 Warpify,让 Block、补全这些功能在远程主机上也能用。
开源
2026 年 4 月 28 日,Warp 把客户端开源了:
- 仓库:warpdotdev/warp
- 大部分代码 AGPL-3.0,UI 框架
warpui和warpui_core是 MIT。 - OpenAI 是仓库的创始赞助方。
- 可以自己
./script/bootstrap、./script/run编译,提交 PR 的流程也写清楚了。
对一个每天要往里敲 token、密码、生产命令的软件来说,源码可见这件事本身就有价值:它怎么存 session、什么时候联网、AI 请求发到哪里,都可以自己看。Warp Drive、AI 这些云端服务仍然是闭源的,开源不等于免费,也不等于所有功能都能离线跑。
和现有终端比
我不想把它吹成「所有终端的替代品」,它和下面几个不是同一个思路:
| Warp | Windows Terminal | iTerm2 | WezTerm | |
|---|---|---|---|---|
| 平台 | Windows / macOS / Linux | Windows | macOS | Windows / macOS / Linux |
| 输出按 Block 组织 | 是 | 否 | 否 | 否 |
| 内置参数补全 | 是 | 否(靠 shell) | 否(靠 shell) | 否(靠 shell) |
| 内置 Vim 输入 | 是(跨 shell) | 否(靠 shell) | 否(靠 shell) | 否(靠 shell) |
| 输出过滤 | 是 | 只能搜索 | 只能搜索 | 只能搜索 |
| 配置方式 | 图形界面 + 配置文件 | JSON | 图形界面 + 属性列表 | 配置文件(Lua) |
| 客户端开源 | AGPL-3.0 | MIT | GPLv2 | MIT |
至于「重启恢复输出」这一条,各家做得不一样:Windows Terminal 恢复的是标签页,不是输出;iTerm2 靠 macOS 的窗口恢复能保留 scrollback,但恢复的是屏幕内容,不是结构化的 Block,而且仅限 macOS;tmux 能保住进程和屏幕,但那是另一套东西,而且你得先学会用。
Windows Terminal 胜在轻、稳、和 Windows 集成好,启动快,资源占用低;iTerm2 胜在 macOS 生态和可编程性;WezTerm 胜在配置自由;Ghostty 更纯粹、更快,但目前主要是 macOS 和 Linux 上的选择。它们都是「更好的终端模拟器」,Warp 想做的是「终端之上的交互层」。
所以选型很简单:如果你只需要一个稳定、轻量、可定制的终端,上面几个都很好;如果你每天在终端里泡几个小时、经常被海量输出淹没、经常关掉终端又后悔,Warp 值得试。
不足
恢复不了进程
前面说过,再强调一次:它恢复的是输出记录,不是运行中的任务。npm run dev、ssh 隧道、docker compose up 该断还是断。别因为「Warp 能恢复」就省掉 tmux。
输出会落盘
Block 存在本地 SQLite 里,默认开启。敏感信息、token、生产环境地址都可能被记下来。共用电脑、或者有合规要求的机器,记得关掉恢复,或者定期删库。
Vim 模式不完整
只支持默认键位,不能自定义 mapping;没有宏,没有 : 命令,没有插件。对 Vim 重度用户来说,它解决的是「输入框里的编辑」,不是「把终端变成 Vim」。而且它只作用于输入框,不能用来浏览输出。
补全只覆盖内置命令
自定义 CLI、内部工具、刚出的新命令,没有 spec 就没有参数补全,只能退回 shell 自己的补全。常见命令覆盖得不错,但别指望「什么都能补」。
平台差异
- Windows 不支持
cmd.exe,只支持 PowerShell 7 / PowerShell 5 / WSL2 / Git Bash。 - Linux 原生 Wayland 下全局热键不可用,窗口位置也不恢复。
- macOS 需要 Metal,Linux 需要 OpenGL ES 3.0 或 Vulkan;纯服务器、无 GPU 的环境跑不了。
比轻量终端重
Rust + GPU 渲染 + 一堆 UI,体感上比 Windows Terminal 重:启动慢一点,内存占用也高一些。老机器、集显、远程桌面里不一定舒服;如果你只是开个终端跑两条命令,它属于杀鸡用牛刀。
中文资料少
官方文档是英文的,中文教程不多;而且 Warp 更新很快,设置项和 UI 经常调整,网上一些教程的截图可能对不上。遇到找不到的选项,直接搜官方文档,或者翻 GitHub issue 和 Slack。文档本身写得细,按平台分的快捷键、每个功能的入口都有。
AI 是商业化的入口
终端本身免费,但 AI 有额度限制;用得多要订阅。写作时(2026 年 5 月)的定价是 Build 20 美元/月起、Max 200 美元/月,具体以官网定价页为准。如果你完全不用 AI,免费版也能当普通终端用。
总结
Warp 不是「更快的终端」,也不是「更漂亮的终端」。它把终端里的输出从「一次性消耗品」变成了「可以回头找的记录」,然后围绕这个记录做了恢复、过滤、查找、分享。这是我用过的终端里,唯一一个让我改变操作习惯的。
如果你符合下面几条,值得装一个试试:
- 每天在终端里待很久,经常跑构建、测试、
kubectl、docker。 - 经常关掉终端 / 重启系统,之后再也想不起来上次的输出。
- 用 Vim,受不了输入框里按方向键。
- 同时用 Windows、macOS、Linux,想要一套一致的操作。
如果你只是偶尔开个终端跑两条命令,或者追求极简、低占用、完全可配置,Windows Terminal、WezTerm 可能更合适(macOS 上还可以看 Ghostty);Warp 的 UI 和功能对你是负担。
它现在开源了,试错成本比两年前低很多:下载、不登录,当普通终端用一天,再决定要不要留下。至少「关掉再打开,输出还在」这件事,一旦习惯了就很难回去。