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シェルに 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

これは機能しますが、よりエレガントな解決策があるかどうか興味があります。

関連情報