
Я использую 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.
Это работает, но мне интересно, есть ли более элегантные решения.