我的.inputrc
:
"\e[A": history-search-backward
"\e[B": history-search-forward
set show-all-if-ambiguous on
set completion-ignore-case on
# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\eOc": forward-word
"\eOd": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word
另外,我没有触及定义指令.zprezto/modules/editor/init.zsh
的任何内容。bindkey
但是,当我按下CtrlLeft或CtrlRight我的终端(URxvt)闪烁时,什么也没有发生。另一方面,在 XTerm 中它是有效的。这似乎是 URxvt 问题。
答案1
该~/.inputrc
文件是 bash 的东西,zsh
据我所知不是这样的东西。它控制 的行为readline
,zsh
相当于zle
。您可以使用以下命令修改其行为bindkey
命令。
因此,要Ctrl Left往返Right,请将这些行添加到您的~/.zshrc
(可能有一个更好的地方,相当于~/.inputrc
但我不知道它并且~/.zshrc
有效):
bindkey "\eOc" forward-word
bindkey "\eOd" backward-word
bindkey "\e[1;5C" forward-word
bindkey "\e[1;5D" backward-word
bindkey "\e[5C" forward-word
bindkey "\e[5D" backward-word
bindkey "\e\e[C" forward-word
bindkey "\e\e[D" backward-word
答案2
显示的键绑定适用于 xterm(以及复制 xterm 行为的程序)。 urxvt
是 的后代rxvt
,它使用不同的键绑定。默认情况下,controlleft对于 rxvt/urxvt 发送escapeOd.你可以通过运行看到这一点
cat -v
并输入该组合键。它将回显为^[Od
.同样的问题也适用于其他光标键。
urxvt
提供资源设置keysym.sym
(在 中引入的功能的扩展rxvt
),您可以使用它可以用于修改这些终端发送的密钥以更紧密地匹配xterm
。那将是这样的资源设置:
URxvt.keysym.Control-0xff51: \033[1;5D
其中(如手册页中所示),Control
是修饰符,0xff51
是左光标键的代码,您可以使用xev
.
要获取所有键,您必须为每个键(和修饰符)添加资源。
进一步阅读: