oh-my-zsh 中 Ctrl-Left/Right 绑定的问题

oh-my-zsh 中 Ctrl-Left/Right 绑定的问题

由于某种原因,在我的 MacBook Pro 上安装 oh-my-zsh 后,我无法绑定 Ctrl-Left Arrow 和 Ctrl-Right Arrow 以在 ZSH 中的单词之间移动。

在 iTerm2 中,我将我的键绑定配置为“发送转义序列” [1;5D 和 [1;5C,这在安装 oh-my-zsh 之前就可以正常工作。

我也尝试取消注释

bindkey '^[^[[C' emacs-forward-word
bindkey '^[^[[D' emacs-backward-word

在 ~/.oh-my-zsh/lib/key-bindings.zsh 中,也无济于事。在这两种情况下,按 Ctrl-Left/Right 只会将“5D”和“5C”发送到屏幕上。

TLDR:有人在使用 oh-my-zsh 时使用 Ctrl-Left 和 Ctrl-Right 在单词之间移动吗?

答案1

将您的 bindkey 行更改为:

bindkey '^[[1;5C' emacs-forward-word
bindkey '^[[1;5D' emacs-backward-word

答案2

按中的^v(Ctrl-v)或,然后按您想要使用的 ,以获取相应的 bindkey 值。在命令中使用此输出。它因系统而异,取决于终端驱动程序等。catzsh shellkey-combinations(Ctrl+left)

就我而言Ctrl-left^[O5D。因此,bindkey '^[O5D' backward-word

如果你想领先一步,https://stackoverflow.com/a/8645267/2538943提供了在 cmd 的帮助下通用化 zsh 键绑定的想法autoload zkbd ; zkbd。完成后,将以下行添加source ~/.zkbd/$TERM-${${DISPLAY:t}:-$VENDOR-$OSTYPE}到您的 .zshrc。从现在开始,您可以像这样编写它[[ -n ${key[Left]} ]] && bindkey "${key[Left]}" backward-char。通过这种方式,您也可以将相同的 .zshrc 复制到不同的机器上。

附加信息:Peter Stephenson 说...the function keys on your keyboard... It depends a good deal on how your windowing system or terminal driver handles them... 因此最好在运行任何此类脚本之前验证所有这些键绑定,尽管在大多数情况下可能不会改变。

要详细了解 zsh 的键绑定,请查看本指南。http://zsh.sourceforge.net/Guide/zshguide04.html

如果你想知道按下的键是如何显示的,https://unix.stackexchange.com/questions/116629/how-do-keyboard-input-and-text-output-work/116630#116630

答案3

这个对我有用:

bindkey "[C" emacs-forward-word   #control left
bindkey "[D" backward-word        #control right

事实上,我在“”之间按下了Control+leftControl+ ,这产生了神奇的效果。right

答案4

因此,您的终端仿真器为该键发送一个 CSI 序列(ESC++),但您已使用命令告诉您的 shell[监视终端输入1;5Cbindkey不同的CSI 序列(ESC+ESC++ [C,您想知道为什么这不起作用?

由于非常明显的原因,它不起作用。

相关内容