Rufen Sie Funktionen von bashrc in inputrc auf

Rufen Sie Funktionen von bashrc in inputrc auf

Ich verwende Arch Linux (4.13.11) und in meinem .bashrcgibt es eine benutzerdefinierte Funktion, die eine Datei findet mitfzfund öffnet diese Datei dann mit dem Standard-Editor:

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

Ich habe mein so konfiguriert .inputrc, dass Vim-ähnliche Tastenkombinationen für die Shell verwendet werden:

set editing-mode vi

Am besten könnte ich im Befehlsmodus Ctrl+ drücken, um meine Funktion aufzurufen .ofzf_then_open_in_editor

Ich habe es versucht

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

aber das hat nicht funktioniert.

.inputrcWie kann ich in Tastenkombinationen für in definierte Funktionen erstellen .bashrc?

Antwort1

Das Formular key: functionakzeptiert nur integrierte Readline-Funktionen. Wie Sie herausgefunden haben, benötigen Sie zum Eingeben von Text ein sogenanntes Makro, das in Anführungszeichen stehen muss: key: "my macro\r". Ich verstehe nicht, warum Sie mit einem Einfügebefehl beginnen müssen, da Sie sich in der Eingabeaufforderung normalerweise bereits im Einfügemodus befinden.

Wenn Sie eine Funktion aufrufen möchten, verwenden Sie eine Shell-Befehlsbindung mit der Option -x. Ich kenne keine Möglichkeit, diese Bindung in eine einzufügen ~/.inputrc, aber Sie können den folgenden Befehl in Ihre einfügen .bashrc:

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

Antwort2

Ich habe mein Ziel erreicht, indem ich Folgendes hinzugefügt habe .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"

Wo \015ist der Schlüsselcode für Enter.

Das funktioniert, aber ich bin gespannt, ob es elegantere Lösungen gibt.

verwandte Informationen