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 语句。
- 临时脚本逻辑:在命令行里写
if或for循环时,利用编辑器的缩进功能,避免语法错误。
示例 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 也能触发同样的效果。)

浙公网安备 33010602011771号