Warp:是时候改变你的命令行工具了
2023 年 04 月 12 日
Matrix 首页推荐
Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。
文章代表作者个人观点,少数派仅对标题和排版略作修改。
我用 Warp 还没几天,好像就忘记其他命令行工具的模样了。
Warp( /wɔːrp/ 卧铺)是新出不久的命令行工具(Terminal),叠加了 Rust 和 GPT 的双层 Buff,号称「The terminal for the 21st century」,可谓对传统 Terminal 拉满了嘲讽。
"warp" 在游戏中通常用来描述一种瞬间移动或瞬间传送的类型。
命令行工具是我每天都需要使用的重要生产力伙伴。在 Windows 平台我常用 MobaXterm,在 macOS 我使用 iTerm 比较多。一直隐隐觉得这些工具都有一些问题,但也一直没有深入思考,直到遇到了 Warp。
我认为传统命令行工具背负着一个无形的枷锁:TTY。
TTY(Teletypewriter)是 Linux 系统中的一种终端设备,通常会提供命令行界面,允许用户在终端窗口中输入文本命令与操作系统进行交互。这里隐含了重要的信息,即在使用 TTY 时候,更强大的工具尚未启动,当然也不会有其他图形化界面。
常规命令行工具的构建,都在无形中受到了 TTY 带来的影响:
- 键盘优先:命令行工具本能的会忽视鼠标、触摸板的输入,就像移动光标只能按左右键。
- 离线操作:命令行工具很多时候仅会在离线环境下使用,例如很多机房里操作系统的命令行窗口。
- 隐私担忧:命令行工具天然的有着一层隐私和安全的担忧,好像我们都会认为命令行工具是很私人的东西。
这些原因都会导致命令行工具出厂设定就极致简单和朴素,功能的更新也会受限于发型版本而十分迟滞。同时第三方的命令行工具也并未跳出这些框框。而 Warp 好像生来就在尝试打破这些「桎梏」。
IDE 思路
Warp 一个核心的理念变更,我认为是用现在流行的 IDE 思路来开发命令行工具。首先就要抛弃仅支持使用键盘的交互的使用负担。毕竟,这不是唯一能和系统交互的 TTY 工具了。
命令行上的文本编辑
输入的命令可以在任意位置让鼠标介入,就像在编辑文本一样。
可以在任意位置移动光标,做选择、删除、复制和粘贴。
支持多行选择和列选编辑。小小功能,大大提升了临时性的多服务器命令操作。
在当前屏幕下可以直接 Command+F 搜索屏幕内容。
对于文件可以使用本地文本编辑快速点击打开。很多时候直观就是效率。
开箱即用的补全、推荐和纠错
无处不在的 tab 键,既能补全命令,又能给出提示。这些细节的堆积,让我们对 tab 键产生了一个隐形的认知,即 tab 好像是命令的小助手一般存在。
对于输错的选项和参数,tab 也是一键补对。
最棒的地方在于,这些都是开箱即用的,甚至是可以用在连接远程服务器环境上的。
Command Palette 统一入口
快捷键 Command + P
和 Command + K
一样,仿佛成了各大应用软件和网页协商好的统一入口。
我一直非常喜欢统一入口的设计,因为这极大降低了软件使用的门槛。很多时候记忆快捷键是个负担。比记忆快捷键还重的负担是,质疑自己记忆是否正确。
后续所有的操作,在你无法准确记忆触发条件的时候,都可以来到 Command Palette,他会帮你兜底。
Session 概念
Warp 可以保留命令行的 Session 状态,这样下次一键就能 」恢复现场「 了。
例如,我们需要同时连接三台服务器。可以通过 Palette 搜索 Save 或者直接键入 #
号,来调出 Session 页面。
在这个页面,点击右上角 +
号,可以新建一个如下的 Session 配置:
---
name: Pulsar-vm.t.com
windows:
- tabs:
- title: pulsar t.com
layout:
split_direction: vertical
panes:
- cwd: /home/futeng/pulsar-node
commands:
- exec: "ssh vm11.t.com"
- cwd: /home/futeng/pulsar-node
commands:
- exec: "ssh vm12.t.com"
- cwd: /home/futeng/pulsar-node
commands:
- exec: "ssh vm13.t.com"
color: green
下次调用这个配置可以直接连接三台服务器:
快速恢复现场,节省打工人的力气。
更有意思的是在 Palette 中输入 @
可以快速导航到对应 Session 操作中去。上例中,分别通过查找执行的命令,如 top、vim 和 tail 来定位对应的 Session 页面。对提升操作效率很有帮助。
开源与协作
Workflow
Warp 尝试将你的命令行操作流固化为一个 Workflow,并以开源仓库的方式提供,共建共享。甚至还提供了一个插件库的分享页面,仿佛一个迷你型应用商店。
官网的一个最简单的 Workflow 例子如下,采用 YAML 格式,非常易读:
name: Example workflow
command: echo {{string}}
arguments:
- name: string
description: The value to echo
创建你的第一个 Workflow
我以一个相对复杂的脚本为例。大家可以忽略命令里面的内容。
Warp 会自动将 ~/.warp/workflows
目录下格式正确的 yaml 解析成 Workflow。
# 需要手动创建 workflows 目录
mkdir -p ~/.warp/workflows
# 创建 workflows 文件
vim ~/.warp/workflows/create-topic-under-futeng-ftns.yaml
YAML 的配置中 Command 则是存放命令的地方。打上 tag 则会分组呈现。
一个完整的例子如下:
# The name of the workflow.
name: Create a topic and grant privileges to produce and consume to role "pulsar-consumer-test".
# The corresponding command for the workflow. Any arguments should be surrounded with two curly braces. E.g `command {{arg}}`.
command: |-
alias pulsar-shell='JAVA_HOME=/Users/futeng/.sdkman/candidates/java/17.0.6.fx-librca/ /Users/futeng/Documents/workspaces/client/apache-pulsar-shell-2.11.0/bin/pulsar-shell'
tenant=futeng; namespace=ftns; topic={{topic_name}}; partition_num=3; user_role="pulsar-consumer-test"
pulsar-shell -e "config use pulsar-azure"
pulsar-shell -e "admin topics create-partitioned-topic --partitions $partition_num $tenant/$namespace/{{topic_name}}"
pulsar-shell -e "admin topics list-partitioned-topics $tenant/$namespace"
pulsar-shell -e "admin topics grant-permission --role $user_role --actions produce,consume $tenant/$namespace/{{topic_name}}"
pulsar-shell -e "admin topics permissions $tenant/$namespace/{{topic_name}}"
# Any tags that the workflow should be categorized with.
tags:
- pulsar
# A description of the workflow.
description: Create a topic and grant privileges to produce and consume to role "pulsar-consumer-test".
# List of arguments within the command.
arguments:
# Name of the argument within the command. This must exactly match the name of the argument
# within the command (without the curly braces).
- name: topic_name
# The description of the argument.
description: The topic name under 'futeng/ftns' you want to create grant permissions.
# The default value for the argument.
default_value: test
# The author of the workflow.
author: Fu Teng
# The valid shells where this workflow should be active. If valid for all shells, this can be left empty.
# See FORMAT.md for the full list of accepted values.
shells: []
我们可以用快捷键(Control+Shift+R)唤醒 Workflow 面板,或者从 Command Palette 里触发。
从演示中可以看到, Workflow 能简化批量操作、积累知识。当然类似概念代码片段的不是新鲜内容了。但是结合 Warp 对格式做规范,后期如果能嵌入到团队协作中,那么就真正激活了代码片段的长尾价值。
引入块(Block)概念
Warp 将在 Notion 中大放光彩的 「块(Block)」的思路引入命令行。当前版本可以实现基于块的基本操作,例如复制命令或结果等。
块的概念对命令之间做了很好的隔离。这样就很方便实现做单个块内部的功能,例如拷贝执行过的命令。在传统的命令行工具中,你可能需要使用鼠标,从左往右的复制命令。
对出来的结果可以做全网分享,例如本次你可以从链接复制到一个 git 操作,虽然这个操作本身没啥特别含义:https://app.warp.dev/block/eqrsjImpjCMCxU4C33ZDYk
后期的块可能会像 Jupyter 一样可随意放置、拖拽以更换顺序,最后再组合,甚至支持分享和协作。
AI 加持
终于来到了 Warp 最引以为傲的 AI 能力演示环节。
AI 命令搜索
通过快捷键 Control + ~
可以触发 AI 命令搜索,支持使用自然语言提问。
对于不那么热门的命令,也是能很好的搜索出来:
像 ChatGPT 一样去提问
提示词如下:
How to export a Docker image, cut it up into chunks, each smaller than 100M, and finally assemble and import it into the Docker
AI 给出了解决思路并对每个命令的使用做了详细的注解。
随时随地的提问
示例中,故意选择 python 的老版本执行,并对报错直接寻求 AI 的帮助。可以看到 AI 很好的识别了问题,并给出了解决建议。注意,AI 相关功能的使用对国内网络没有特殊要求。
缺点和小结
Warp 还有非常多独特的巧思值得探讨,但现存的缺点也不容忽视:
隐私与安全
命令行工具会包含敏感信息。Warp 虽然极力避免或尽量少的收集必要数据,但仍然会带来隐私与安全的担忧。
- Warp 需要登录使用,并且服务端会收集登录信息、崩溃日志等。基于公司商业化目的和产品特殊功能如提供 AI 能力需要,使用账号机制无可厚非,不过仍然绕不过安全这个大问题。
- Warp 默认会收集通用的运行指标数据,例如是否创建了一个块,是否使用了 AI 搜索等。好在运行数据收集是可以在配置中选择关闭的,并且官方申明所有数据收集是不包括命令行的输入和输出的。
- 第三方机构会收集你的数据,包括 OpenAI 会收集你的提示语,其他基于云的服务也会有数据被留存在服务器上。虽然 Warp 禁止第三方使用这些数据,但是安全隐患仍然无法被排除。
Warp 为了应对安全性问题,计划最终将开放基于 Rust 的客户端代码,但是服务端代码将暂时闭源。
基于以上考虑,对于敏感机构和公司,目前可能还不是最好的使用时机。
商业模式
Warp 的商业计划目前是对任何个人免费使用,对企业特性包括协作和其他基于云的功能做收费。目前 Warp 仍然处于早期建设阶段,因此对于后期的付费策略,用户还是得始终保持谨慎态度。
其他功能
Warp 虽然内置了大量开箱即用的功能,包括很好的支持了 bash、zsh 和 fish,但对于广大的用户群来说,始终会有痛点功能需要更进。
对于我来说,最难受的点可能是对远程登录信息的管理(登录密钥)。这块可能也是基于隐私和安全考虑,Warp 一直没有给出明确的方案。目前看需要自行管理,并使用 Session 功能来提升使用的方便性。
评论区