关于 zsh 中的 Alt+x 以及如何将 Alt+x 绑定到其他东西

Che*_* Li 8 zsh

当我输入时Alt-x,execute:会弹出:

~ % 
execute: _
Run Code Online (Sandbox Code Playgroud)

我可以继续输入(空格无效):

~ %        
execute: what'sthis
Run Code Online (Sandbox Code Playgroud)

Q1:这次促销的目的是什么?

Q2:如何修改这个快捷键到其他键位绑定?因为M-x在 emacs 中相当有用,而我在 emacs 中经常使用 shell,所以两者冲突。

我用谷歌搜索了几个小时,但仍然没有答案(也许我的关键字不正确 - google: "zsh" + "excute:" , "google: zsh keybinding bindkey

Sté*_*las 15

如果你这样做:

bindkey | grep -F '^[x'
Run Code Online (Sandbox Code Playgroud)

或者干脆:

bindkey '^[x'
Run Code Online (Sandbox Code Playgroud)

或者如果对如何表达 Alt+x 有疑问:

bindkey | grep -w x
Run Code Online (Sandbox Code Playgroud)

你会看到的:

"^[x" execute-named-cmd
Run Code Online (Sandbox Code Playgroud)

这是绑定到 ESC x 的小部件的名称,大多数终端在按下时发送 ESC x 字符序列 Alt+x

info zsh execute-named-cmd
Run Code Online (Sandbox Code Playgroud)

会告诉您该小部件的作用(您可能需要zsh-doc在某些系统上安装该软件包)。

顾名思义,它会提示要执行的命令。这里的命令是 zsh 小部件、编辑器命令。这相当于emacs' Meta-x,不同之处在于它的zsh的编辑命令,而不是emacs命令(调用的命令execute-extended-command中emacs)

例如,如果在该提示下键入backward-delete-char并按Return,它将调用默认绑定到的小部件Backspace。您可以在emacs.

相反,如果您键入descTab(Tab为了完成它describe-key-briefly,默认情况下未绑定到任何键的小部件,也可以在 中找到emacs)并按Return,您将看到另一个提示:

$
Describe key briefly: _
Run Code Online (Sandbox Code Playgroud)

比如说,你可以在哪里按下它,Alt+x看看它会做什么。然后你会得到:

"^[x" is execute-named-cmd
Run Code Online (Sandbox Code Playgroud)

如果你在 中做同样的事情emacs,你会看到:

M-x runs the command execute-extended-command
Run Code Online (Sandbox Code Playgroud)

要查看小部件列表,请运行zle -al,zle -l对于非内置小部件,bindkey列出键绑定。

你可以绑定Alt+x到别的东西

bindkey "^[x" some-widget
Run Code Online (Sandbox Code Playgroud)