我想提高我的终端技能,特别是输入命令时的技能,以提高我的效率。例如,当输入命令时,我想删除光标左侧的一个单词,而不是按退格键 5 次。
我已经知道这是如何工作的:终端应用程序可以捕获键盘快捷键,例如Ctrl-backspace
,并将特殊的键码发送到 shell。 shell 具有用于此类编辑的内置功能,它可以识别键码并执行我们想要的操作。我解释得正确吗?
这很有效,而且功能很棒,但是我在哪里可以找到可能的事情的列表?就在今天,我意识到这0x1f
意味着“撤消”。我从来不知道这是可能的,我喜欢它!我想看看还有什么可能,但我不知道该寻找什么!我试了半个小时就放弃了。
我使用的是 Macos、默认的 Zsh 5.8 shell 和 iTerm2 应用程序。
答案1
这些键盘快捷键记录在 shell 手册中。由于你的shell是zsh,所以看本章“Zsh 行编辑器”在手册中,可在本地使用man zshzle
.
关于Control和ESC的按键绑定与键盘按键的对应关系,请参见键绑定表?和键盘输入和文本输出如何工作?一些背景。请特别注意,您可以按Ctrl+,V然后按某个键来查看它发送的转义序列。在 Mac 终端上,默认情况下,Option按键发送 ESC,然后发送按键发送的内容(通常)。
答案2
我找到了答案,我描述的功能是通过命令控制的bindkey
。运行不带任何选项的bindkey将打印出当前的绑定,下面是一个示例:
"^@" set-mark-command
"^A" beginning-of-line
"^B" backward-char
"^D" delete-char-or-list
"^E" end-of-line
"^F" forward-char
"^G" send-break
"^H" backward-delete-char
"^I" expand-or-complete
"^J" accept-line
"^K" kill-line
...
因为我不知道这些被称为“键绑定”,所以我在谷歌上找不到答案。
现在我有了一个可能的列表,我只需要将其转换为十六进制,以使答案对使用 iTerm2 的人真正有用。