摆脱桎梏、拥抱现代的命令行工具:聊聊我为什么选择 Warp
2023-4-13 11:32:21 Author: sspai.com(查看原文) 阅读量:46 收藏

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 带来的影响:

  1. 键盘优先:命令行工具本能的会忽视鼠标、触摸板的输入,就像移动光标只能按左右键。
  2. 离线操作:命令行工具很多时候仅会在离线环境下使用,例如很多机房里操作系统的命令行窗口。
  3. 隐私担忧:命令行工具天然的有着一层隐私和安全的担忧,好像我们都会认为命令行工具是很私人的东西。

这些原因都会导致命令行工具出厂设定就极致简单和朴素,功能的更新也会受限于发型版本而十分迟滞。同时第三方的命令行工具也并未跳出这些框框。而 Warp 好像生来就在尝试打破这些「桎梏」。

IDE 思路

Warp 一个核心的理念变更,我认为是用现在流行的 IDE 思路来开发命令行工具。首先就要抛弃仅支持使用键盘的交互的使用负担。毕竟,这不是唯一能和系统交互的 TTY 工具了。

命令行上的文本编辑

输入的命令可以在任意位置让鼠标介入,就像在编辑文本一样。

warp-54.gif

可以在任意位置移动光标,做选择、删除、复制和粘贴。

image.png

支持多行选择和列选编辑。小小功能,大大提升了临时性的多服务器命令操作。

warp-search.gif

在当前屏幕下可以直接 Command+F 搜索屏幕内容。

image.png

对于文件可以使用本地文本编辑快速点击打开。很多时候直观就是效率。

开箱即用的补全、推荐和纠错

无处不在的 tab 键,既能补全命令,又能给出提示。这些细节的堆积,让我们对 tab 键产生了一个隐形的认知,即 tab 好像是命令的小助手一般存在。

warp-2-tab.gif

对于输错的选项和参数,tab 也是一键补对。

warp-2-correct.gif

最棒的地方在于,这些都是开箱即用的,甚至是可以用在连接远程服务器环境上的。

warp-2-allcanuse.gif

Command Palette 统一入口

快捷键 Command + PCommand + K 一样,仿佛成了各大应用软件和网页协商好的统一入口。

warp-3-clearall.gif

我一直非常喜欢统一入口的设计,因为这极大降低了软件使用的门槛。很多时候记忆快捷键是个负担。比记忆快捷键还重的负担是,质疑自己记忆是否正确。

后续所有的操作,在你无法准确记忆触发条件的时候,都可以来到 Command Palette,他会帮你兜底。

Session 概念

Warp 可以保留命令行的 Session 状态,这样下次一键就能 」恢复现场「 了。

image.png

例如,我们需要同时连接三台服务器。可以通过 Palette 搜索 Save 或者直接键入 # 号,来调出 Session 页面。

image.png

在这个页面,点击右上角 + 号,可以新建一个如下的 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

 下次调用这个配置可以直接连接三台服务器:

warp-session-22.gif

快速恢复现场,节省打工人的力气。

warp-session-at.gif

更有意思的是在 Palette 中输入 @ 可以快速导航到对应 Session 操作中去。上例中,分别通过查找执行的命令,如 top、vim 和 tail 来定位对应的 Session 页面。对提升操作效率很有帮助。

开源与协作

Workflow

Warp 尝试将你的命令行操作流固化为一个 Workflow,并以开源仓库的方式提供,共建共享。甚至还提供了一个插件库的分享页面,仿佛一个迷你型应用商店。

image.png

官网的一个最简单的 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 里触发。

warp-workspace.gif

从演示中可以看到, Workflow 能简化批量操作、积累知识。当然类似概念代码片段的不是新鲜内容了。但是结合 Warp 对格式做规范,后期如果能嵌入到团队协作中,那么就真正激活了代码片段的长尾价值。

引入块(Block)概念

Warp 将在 Notion 中大放光彩的 「块(Block)」的思路引入命令行。当前版本可以实现基于块的基本操作,例如复制命令或结果等。

warp-2-3-block.gif

块的概念对命令之间做了很好的隔离。这样就很方便实现做单个块内部的功能,例如拷贝执行过的命令。在传统的命令行工具中,你可能需要使用鼠标,从左往右的复制命令。

对出来的结果可以做全网分享,例如本次你可以从链接复制到一个 git 操作,虽然这个操作本身没啥特别含义:https://app.warp.dev/block/eqrsjImpjCMCxU4C33ZDYk

后期的块可能会像 Jupyter 一样可随意放置、拖拽以更换顺序,最后再组合,甚至支持分享和协作。

AI 加持

终于来到了 Warp 最引以为傲的 AI 能力演示环节。

AI 命令搜索

通过快捷键 Control + ~ 可以触发 AI 命令搜索,支持使用自然语言提问。

wrap-1.gif

对于不那么热门的命令,也是能很好的搜索出来:

image.png

像 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

wrap-3.gif

AI 给出了解决思路并对每个命令的使用做了详细的注解。

随时随地的提问

warp-ai-fix.gif

示例中,故意选择 python 的老版本执行,并对报错直接寻求 AI 的帮助。可以看到 AI 很好的识别了问题,并给出了解决建议。注意,AI 相关功能的使用对国内网络没有特殊要求。

缺点和小结

Warp 还有非常多独特的巧思值得探讨,但现存的缺点也不容忽视:

隐私与安全

命令行工具会包含敏感信息。Warp 虽然极力避免或尽量少的收集必要数据,但仍然会带来隐私与安全的担忧。

  • Warp 需要登录使用,并且服务端会收集登录信息、崩溃日志等。基于公司商业化目的和产品特殊功能如提供 AI 能力需要,使用账号机制无可厚非,不过仍然绕不过安全这个大问题。
  • Warp 默认会收集通用的运行指标数据,例如是否创建了一个块,是否使用了 AI 搜索等。好在运行数据收集是可以在配置中选择关闭的,并且官方申明所有数据收集是不包括命令行的输入和输出的。
  • 第三方机构会收集你的数据,包括 OpenAI 会收集你的提示语,其他基于云的服务也会有数据被留存在服务器上。虽然 Warp 禁止第三方使用这些数据,但是安全隐患仍然无法被排除。

Warp 为了应对安全性问题,计划最终将开放基于 Rust 的客户端代码,但是服务端代码将暂时闭源。

基于以上考虑,对于敏感机构和公司,目前可能还不是最好的使用时机。

商业模式

Warp 的商业计划目前是对任何个人免费使用,对企业特性包括协作和其他基于云的功能做收费。目前 Warp 仍然处于早期建设阶段,因此对于后期的付费策略,用户还是得始终保持谨慎态度。

其他功能

Warp 虽然内置了大量开箱即用的功能,包括很好的支持了 bash、zsh 和 fish,但对于广大的用户群来说,始终会有痛点功能需要更进。

对于我来说,最难受的点可能是对远程登录信息的管理(登录密钥)。这块可能也是基于隐私和安全考虑,Warp 一直没有给出明确的方案。目前看需要自行管理,并使用 Session 功能来提升使用的方便性。

小结

看到这里,我想大家可能会跟我产生一样的感触。虽然我们可能对 Warp 的安全和隐私问题始终会有着一层担忧,不过:

  • 重复造轮子还是有意义的。产品的迭代自有其魅力。
  • AIGC 可能真的能赋予所有工具以新的活力。

我是傅腾同学,我非常期待能和大家一起去研究、探讨这些新鲜有趣的生产力工具,希望保持关注。

关联阅读

  • Warp 官网:https://www.warp.dev/
  • 我的分享链接:https://app.warp.dev/referral/YQQRJ4
  • Workflows 仓库:https://github.com/warpdotdev/workflows
  • Workflow 分享页面:https://www.commands.dev/
  • Warp 隐私简述页面:https://www.warp.dev/privacy
  • Warp 官方隐私政策文件:https://assets-global.website-files.com/60352b1db5736ada4741b380/60b7f8d410ec2b9fc2a45af9_privacy-notice.pdf

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀

© 本文著作权归作者所有,并授权少数派独家使用,未经少数派许可,不得转载使用。

傅腾同学

欢迎关注我的同名公众号和futeng.space。公开学习、持续输出、一起前行。


文章来源: https://sspai.com/post/79262
如有侵权请联系:admin#unsafe.sh