Chamar funções de bashrc em inputrc

0

Estou no Arch Linux (4.13.11) e no meu .bashrc , há uma função personalizada que encontra um arquivo usando fzf e, em seguida, abre esse arquivo com o editor padrão:

# 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
}

Eu configurei meu .inputrc para usar atalhos do tipo Vim para o shell:

set editing-mode vi

De preferência, eu poderia pressionar Ctrl + o quando em modo de comando para chamar minha função fzf_then_open_in_editor .

Eu tentei

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

mas isso não funcionou.

Em .inputrc , como posso criar atalhos de teclado para funções definidas em .bashrc ?

    
por Matthias Braun 20.11.2017 / 18:57

2 respostas

0

Eu consegui o que queria adicionando isso a .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_editor5"

Onde 5 é o código-chave para Enter .

Isso funciona, mas estou curioso para saber se existem soluções mais elegantes.

    
por 20.11.2017 / 18:57
0

O formulário key: function aceita apenas funções incorporadas readline. Como você descobriu, para inserir texto, você precisa do que chamou de macro, que precisa estar entre aspas: key: "my macro\r" . Não vejo por que você precisa começar com um comando de inserção, como geralmente você já está no modo de inserção no prompt de comando.

Se você quiser chamar uma função, use uma ligação de comando do shell com a opção -x . Eu não sei de nenhuma maneira de colocar essa ligação em um ~/.inputrc , mas você pode colocar o seguinte comando no seu .bashrc :

bind -x '"\C-o": fzf_then_open_in_editor'
    
por 20.11.2017 / 20:06