在 inputrc 中调用 bashrc 中的函数

在 inputrc 中调用 bashrc 中的函数

我在 Arch Linux (4.13.11) 上,在我的 中.bashrc,有一个自定义函数可以使用以下命令查找文件弗兹夫然后使用默认编辑器打开该文件:

# Search a file with fzf inside a Tmux pane and then open the file in an editor
fzf_then_open_in_editor() {
  local file=$(fzf-tmux)
  # Open the file if it exists
  if [ -n "$file" ]; then
    # Use the default editor if it's defined, otherwise Vim
    ${EDITOR:-vim} "$file"
  fi
}

我已经将.inputrc, 配置为在 shell 中使用类似 Vim 的键绑定:

set editing-mode vi

最好,我可以在命令模式下按Ctrl+o来调用我的函数fzf_then_open_in_editor

我试过

set keymap vi-command
"\C-o": fzf_then_open_in_editor

但这没有用。

在 中.inputrc,如何为 中定义的函数创建键绑定.bashrc

答案1

该表单key: function仅接受 readline 内置函数。正如您所发现的,要输入文本,您需要所谓的宏,该宏必须用引号括起来:key: "my macro\r"。我不明白为什么您需要从插入命令开始,因为通常您已经在命令提示符下处于插入模式。

如果要调用函数,请使用带有 option 的 shell 命令绑定-x。我不知道有什么方法可以将此绑定放入 a 中~/.inputrc,但您可以将以下命令放入您的 中.bashrc

bind -x '"\C-o": fzf_then_open_in_editor'

答案2

我通过将其添加到以下内容得到了我想要的.inputrc

set keymap vi-command
# Go to insert mode with i, write the function's name, then hit enter
"\C-o": "ifzf_then_open_in_editor\015"

\015的密钥代码在哪里Enter

这可行,但我很好奇是否有更优雅的解决方案。

相关内容