zsh绑定键命令列表

68

我在哪里可以找到一份使用bindkeyzsh命令列表,并带有描述?

每次我查找某个标准操作(例如,end-of-line)的名称时,都需要进行谷歌搜索并猜测找到的命令是否是我要寻找的。

相关:

6个回答

88
  • bindkey -l 命令将给出现有键位映射的列表。

  • bindkey -M <keymap> 命令将列出特定键位映射中所有绑定的键位。

  • 如果你在 zsh 命令行中使用 emacs 模式,则 emacs 键位映射可能最为重要。

  • 如果你在 vi 模式下使用,则可能会对 viinsvicmd 感兴趣。

(有关更多详细信息,请参阅zshzle(1)手册页。)

一旦你有了键位绑定列表,就可以在官方 ZLE 文档 中搜索操作名称(或 zsh 术语中的“widget”)。


14
执行 bindkey 命令而不带参数会打印出所有的按键绑定。 - Keith Hughitt
5
确实如此,但只是针对当前的按键映射,这可能并不是你想要的。 - wjv
啊,好发现 - 我以为它会打印所有的东西。感谢您的澄清! - Keith Hughitt
2
实际上,我的早期评论也不太准确!在没有参数的情况下使用bindkey将显示main键映射的内容。mainemacsviins的别名,具体取决于您是否设置了类似于emacs或vi的行编辑。只有使用-M标志才能看到vicmd的内容。 - wjv

50
zle -al

列出所有已注册的zle命令


谢谢,这正是我在寻找的。 - Kutsan Kaplan
3
这是一份比我之前回答更确切的原问题答案。赞一个! 还可以提到,标准小部件列表可在Zsh手册中找到:http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#index-widgets_002c-standard - wjv

39

可用于行编辑器的命令称为小部件(widgets)。标准小部件列于zshzle手册的STANDARD WIDGETS章节中。该手册也可以从zsh网站获取。


在该链接的“移动”部分中,我没有看到任何与“向上翻页”或“向下翻页”行为相对应的选项。 zsh bindkey是否没有提供这种内置选项? - ely
@ely 这似乎更像是一个新问题而不是对这个问题+答案的评论。你期望页面上/下有什么功能?如果你想要滚动显示内容的东西,那应该是终端中的绑定,而不是zsh(或其他 shell)中的功能。 - qqx
这个回答似乎比上面的其他回答更有用。而且,那些其他回答都没有包含文档,所以从技术上讲,它们并没有回答问题。给你点赞。 - undefined

14
  1. Zsh行编辑器文档:https://web.cs.elte.hu/local/texinfo/zsh/zsh_10.html
  2. 查看系统当前的bindkey设置:$ bindkey,例如($ bindkey|grep case,查找down-case);
  3. $ zle -al用于列出所有注册的zle命令;
  4. 绑定您个人的键位到zsh命令,$ vim ~/.zshrc,添加
# bindkey
bindkey "^U"    backward-kill-line
bindkey "^u"    backward-kill-line
bindkey "^[l"   down-case-word
bindkey "^[L"   down-case-word

# alt+<- | alt+->
bindkey "^[f" forward-word
bindkey "^[b" backward-word

# ctrl+<- | ctrl+->
bindkey "^[[1;5D" backward-word
bindkey "^[[1;5C" forward-word
  1. 查看其他内容:oh-my-zsh down-case-word bug: https://github.com/robbyrussell/oh-my-zsh/commit/55a9d685fd960390a4f400ac461d901049a78beb

Zsh行编辑器的官方文档网址为http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html;你提到的链接只是由匈牙利某个大学维护的副本。 - Franklin Yu
@lupguo 怎样绑定超级/Win键呢? - MartinT

2

我正在使用putty上的zsh。对于我来说,绑定键是不同的。你可以通过按下CTRL+V,然后按下左箭头来查找这个信息。它会显示使用的字符序列。所以对于我来说,它是:

bindkey "^[[D" backward-word
bindkey "^[[C" forward-word
bindkey "^H" backward-kill-word

read 命令对我有效,因为我将 ctrl+v 绑定到粘贴:https://www.techrepublic.com/article/find-and-bind-key-sequences-in-bash/ - DharmaTurtle

1
安装oh-my-zsh之后,我输入bindkey 'anything',然后按tab键,再输入yes。可以清空可用的绑定键列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接