Shell Daily 2026-01-10: 沉浸式编辑 (Edit in Editor)

Shell Daily 2026-01-10: 沉浸式编辑 (Edit in Editor)

你有没有这种崩溃时刻:正在终端里手搓一条超长的 curl 命令,包含一大堆 Header 和 JSON 数据,突然发现中间漏了一个引号。你只能按住左箭头键,看着光标像蜗牛一样慢慢挪回去,改完再挪回来。

别折磨自己了。Shell 其实允许你调用完整的文本编辑器来编写当前这条命令。

怎么用

在默认的 Shell 模式(Emacs 键位)下,输入到一半时,只需按下组合键:

Ctrl + x,松开后紧接着按 Ctrl + e

系统会立即打开你的默认编辑器(通常是 Vim 或 Nano),并加载你当前已输入的命令。你可以在里面舒适地换行、缩进、查找替换。保存并退出编辑器后,Shell 会自动执行这条命令。

  • 配置:通过 export EDITOR=vim 指定你顺手的编辑器。
  • 兼容性Bash / Zsh 默认支持

适用场景

  • 构造复杂请求:编写带有复杂参数的 API 请求或 SQL 语句。
  • 临时脚本逻辑:在命令行里写 iffor 循环时,利用编辑器的缩进功能,避免语法错误。

示例 1:拯救长命令

假设你正在写一条复杂的 Docker 启动命令:
docker run -d -p 8080:80 -v /var/data:/data --name web-server ...

写到一半发现挂载路径写错了。直接 Ctrl+x Ctrl+e,进入 Vim,像修改代码一样快速跳转修改,:wq 退出即自动运行。

示例 2:编写多行逻辑

想临时写个循环批量处理文件,在 Prompt 里挤在一行非常容易写错:
for f in *.log; do mv "$f" "${f%.log}.old"; echo "Done $f"; done

呼出编辑器后,你可以把它排版成赏心悦目的样子:

for f in *.log; do
    # 甚至可以舒服地加注释
    mv "$f" "${f%.log}.old"
    echo "Processed: $f"
done

这不仅清晰,万一执行报错了,按“向上箭头”调出历史,再次 Ctrl+x Ctrl+e 还能回到编辑器继续改。

(注:如果你是 Vim 键位党 (set -o vi),在 Normal 模式下直接按 v 也能触发同样的效果。)

posted @ 2026-01-10 15:22  Terrasse  阅读(6)  评论(0)    收藏  举报