![鱼控制左控制右键绑定](https://linux22.com/image/1310542/%E9%B1%BC%E6%8E%A7%E5%88%B6%E5%B7%A6%E6%8E%A7%E5%88%B6%E5%8F%B3%E9%94%AE%E7%BB%91%E5%AE%9A.png)
我正在使用 terminator 和 fish,我想使用 Alt-Left 等来导航 terminator,使用 Ctrl-Left 和 Ctrl-right 来按单词移动光标。问题是当我这样做时
bind \cleft backward-word
它不会改变 Ctrl-left 或 right 的行为。这似乎遵循了文档,我从 -K 和 -f 标志中取出了键和命令,
bind -a
表明绑定存在。
我已经对其他序列使用了相同的命令,但这个序列却无法正常工作。我是不是漏掉了什么?
答案1
我已修复此问题。配置如下:
bind \e\[1\;5C forward-word
bind \e\[1\;5D backward-word
通过执行以下命令来“获取”它:
. .config/fish/config.fish
(“。”是鱼中的来源)
希望这对你有帮助!
答案2
在 fish 命令行中输入bind \cleft backward-word
应该可以完成这项工作。如果您希望它在每次启动时执行,请输入:
function fish_user_key_bindings
bind \cleft backward-word
end
在.config/fish/config.fish
默认情况下,会话之间不会保存按键绑定。config.fish 中的裸绑定语句不会产生任何效果,因为它是在设置默认按键绑定之前获取的。要保存自定义按键绑定,请将绑定语句放入名为 fish_user_key_bindings 的函数中,该函数将自动加载。
答案3
首先要注意的是ctrl+left-arrow没有任何意义,在任何 shell 中都无法使用。这是因为该ctrl键本身实际上不会发送任何字符(除非您对终端配置做了一些非常不寻常的事情)。该键的作用是修改按下的下一个字母。例如,ctrl+a会导致终端发送单字节十六进制值 0x01。由于诸如左箭头之类的键通常会发送以该esc字符开头的字符序列,并且 escape 已经是控制字符,因此将控制修饰符应用于它不会产生任何作用。
正如您所发现的,通常的方法是使用alt。如果您已将终端配置为将其视为“元”键,该键将后面的内容作为转义字符的前缀,然后您可以按alt+page-up让终端发送\e\e[5~
。如果您从 git 源构建 fish,您将获得一个名为 的方便程序fish_key_reader
,它使了解不同键发送的内容变得更加容易。它将包含在 fish 2.3.1 版本中,该版本将在几周后推出。
最后,自定义键绑定应放在您的个人配置文件中,而不是全局/usr/share/fish/functions/fish_default_key_bindings.fish
脚本中。您应该创建一个名为$HOME/.config/fish/functions/fish_user_key_bindings.fish
以下内容的文件:
function fish_user_key_bindings
bind \e\[1\;5C forward-word
bind \e\[1\;5D backward-word
end
答案4
接受的答案几乎可行,但我发现我无法通过 config.fish 文件自动绑定按键。我最终直接修改了 fish_vi_key_bindings.fish(位于 /usr/share/fish/functions 下)。
另外,仅在 vi 键绑定下将 ctrl-left 和 ctrl-right 添加到正常模式是不够的,还必须添加插入和可视模式。
bind \e\[1\;5C forward-word
bind \e\[1\;5D backward-word
bind -M insert \e\[1\;5C forward-word
bind -M insert \e\[1\;5D backward-word
bind -M visual \e\[1\;5C forward-word
bind -M visual \e\[1\;5D backward-word
为。。。道歉这应该是对已接受答案的评论,不是一个独立的答案,但由于我没有足够的声誉来添加评论(我个人认为这个声誉系统不合理),我觉得我应该与面临同样问题的人或有解决问题经验的人分享这个。