Terminal Tricks —— Inline Editing

Terminal Tricks —— Inline Editing

Vi & Emacs Style

现在 shell 一般预装了两套快捷键,Vi 和 Emacs 。这两种模式源自两大经典文本编辑器,为终端用户提供了不同的编辑体验。一般都是以 emacs 做为默认的快捷键,例如下面这些快捷键

KeyAction
Ctrl+a移动到行首
Ctrl+e移动到行尾
Ctrl+k删除光标后面的内容
Ctrl+y粘贴

对于 bash 来说,可以通过 set -o emacsset -o vi 命令切换不同快捷键组合。可以将 set -o vi 其写入 $HOME/.bashrc,把默认快捷键设置为 VI 模式,建议加入 Vim Cult

Nushell 使用 VI 模式

输入 config nu 编辑 Nushell 的配置文件

NU
config. Nu
 $env.config = {     # emacs, vi     edit_mode: vi     # 光标形状,根据需要自行调整     cursor_shape: {         emacs: block         vi_insert: blink_block         vi_normal: blink_underscore     } }

Text Objects

Text Objects 是 Vim 最吸引我的一个 feature,删除括号内的内容,或者删除引号内的内容,都可以很流畅的完成。例如,对于命令:

NUSHELL
$env.LS_COLORS = (vivid generate catppuccin-mocha)

在 NORMAL 模式下将光标移至括号内,键入 di( 即可删除括号内的 Text

退出VIM

Cursor Jump

Key跳转位置
w下一个单词
b上一个单词
I行首
A行尾
F-前面的-字符
f-后面的-字段

当编辑 UNIXGNU 风格的命令行参数时,这种情况下用 F/f 将在不同参数之间切换还是很流畅的

风格类型前缀选项格式示例
Unix-单字母ls -la
GNU--单词grep --color
BSDNothing单字母ps aux
Windows/单词/字母DIR /W

Line Editor

许多 Shell 也支持使用命令外部编辑器中对命令进行编辑,这样就可以使用 NeoVim, Helix 来编辑命令了 🤓,如果不在乎启动速度,甚至可以用 VSCode。

ShellVi 模式Emacs 模式
BashNormal 模式下按 vCtrl+x Ctrl+e
Zsh不知道喵 චᆽච不知道喵 චᆽච
FishAlt+eAlt+e
NushellCtrl+oCtrl+o

下面简单演示一下,假如要使用 scp 将 remote machine 上的文件复制到本地,但是 remote machine 的 host name 写错了

不觉得这很酷吗,作为一名理工男我觉得这太酷了 🤓🤓🤓

Change Default Editor

如何指定编辑命令的编辑器?

一般来说,Shell 会读取 VISUALEDITOR 环境变量,决定使用哪个编辑器。像 NuShell 的话也可以设置 $env.config.buffer_editor 变量

SHELL
# if using nushell, add this line to config.nu$env.config = {   buffer_editor: "helix"}# if using bash/zsh, add this line to .bashrc/.zshrcexport VISUAL=nvim  # if using fish, add this line to config.fishset -gx VISUAL nvim

Unix 设置系统环境变量,也可以参考这篇文章的方式 👉 [[Unix 环境变量|Set System Env-Vars in UNIX]]

Terminal Tricks —— Inline Editing

https://vluv.space/inline_editing/

作者

GnixAij

发布于

2025-08-14

更新于

2025-09-06

许可协议

评论