鱼控制左控制右键绑定

鱼控制左控制右键绑定

我正在使用 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

fish bind 文档

默认情况下,会话之间不会保存按键绑定。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

为。。。道歉这应该是对已接受答案的评论,不是一个独立的答案,但由于我没有足够的声誉来添加评论(我个人认为这个声誉系统不合理),我觉得我应该与面临同样问题的人或有解决问题经验的人分享这个。

相关内容