如何在 fish shell 中将转义插入模式重新映射为 'jk'?

How to remap escape insert mode to 'jk' in fish shell?

我在 vim 中使用 jk 作为转义序列,在 bash 和 zshell 中使用 vi 模式。我如何在鱼中做到这一点 shell?

即在 vim:

inoremap jk <esc>

bash:

bind -m vi-insert '"jk": vi-movement-mode'

zsh

bindkey -M viins 'jk' vi-cmd-mode

鱼shell相当于什么?

我假设您已经通过执行 fish_vi_key_bindings 启用了 vi 模式。否则这个问题就没有意义:-)

创建一个名为 ~/.config/fish/functions/fish_user_key_bindings.fish 的文件,其中包含:

function fish_user_key_bindings
    bind -M insert jk "if commandline -P; commandline -f cancel; else; set fish_bind_mode default; commandline -f backward-char force-repaint; end"
end

您可以 运行 bind 交互,但它不会在新的鱼会话中持续存在,除非您创建该自动加载函数。此外,如果您在 vi 和 emacs 绑定之间切换,您将需要保护该绑定,因此它仅适用于 vi 模式:

if test "$__fish_active_key_bindings" = "fish_vi_key_bindings"
    bind ....
end

这是一个博客 post,它完全符合我的要求:

https://fedragon.github.io/blog/2015/03/22/vimode-fishshell-osx/

TLDR;)

~/.config/fish/functions/fish_user_key_bindings.fish
---------------------------------------------------
function fish_user_key_bindings
  fish_vi_key_bindings
  bind -M insert -m default jk backward-char force-repaint
end

~/.config/fish/config.fish
---------------------------------------------------
set fish_key_bindings fish_user_key_bindings