created: 2023-11-02T10:40:04.370Z
fzf と一緒に使うと便利そうな bash 関数
bash だと READLINE_LINE
と READLINE_POINT
という変数に値を代入すると、シェルのラインバッファ(入力欄)の内容を書き換えることができる。fzf や peco を使う場合はこれらの変数をよく使う。
ただ、これらの変数は変数なので、パイプの末にとれた値を扱う際にちょっと不便だった。 結果行を変数として受け取りたいので、コマンド置換を使ったこんな形になる。
v=$(cat ... | すごく長いパイプに次ぐパイプ | fzf)
READLINE_LINE=$v
READLINE_POINT=0
これでも別にいいんだけれども、コマンド置換の中身がずらずらと長いとエスケープとか心配になるし、使っていい文字とかもよくわからない。
アイデア
そこでこんな関数を .bashrc の中に置いてみたら便利だった。
function result_into_bash_readline() {
result=$($1)
READLINE_LINE=$result
READLINE_POINT=0
}
普通に 1 行だけ結果を出力するような関数を書いたら、文字列で関数名を渡せば結果行を入力欄にいれられる。
function _fzf_git_files() {
....
}
bind -x '"\C-g\C-f": result_into_bash_readline "_fzf_git_files"'