Вызов функций из bashrc в inputrc

Вызов функций из bashrc в inputrc

Я использую 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, чтобы использовать сочетания клавиш в стиле 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". Я не понимаю, зачем вам начинать с команды вставки, поскольку обычно вы уже находитесь в режиме вставки в командной строке.

Если вы хотите вызвать функцию, используйте привязку команд оболочки с опцией -x. Я не знаю способа поместить эту привязку в ~/.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.

Это работает, но мне интересно, есть ли более элегантные решения.

Связанный контент