fzf、使っていますか?ぼくはそこそこ使ってはいるのですが、どうしてもC-t
を押すのが面倒くさく感じてしまいます。そこで、$ vim<space><space>
のようにspaceを2回続けて入力するとfzfが起動するようにしてみました。
(わかりづらいですがspaceを2回押してfzfを起動しているんです、信じてください)
コード
zsh で連続したスペースにキーバインドを割り当てる - Qiita
この記事を参考にして実装しました。
function _double_space_to_fzf() { if [[ "${LBUFFER}" =~ " $" ]]; then LBUFFER="${LBUFFER}$(__fsel)" local ret=$? zle redisplay return $ret else zle self-insert fi } zle -N _double_space_to_fzf bindkey ' ' _double_space_to_fzf
カンタンにいうと
- spaceに
_double_space_to_fzf
というZLEウィジェットを登録します - 直前がspaceならばspaceを入力せず、fzfを起動します
- 直前の文字がspaceでなければ、spaceをそのまま入力します
なぜfzf-file-widgetを使わないのか?
fzfはfzf-file-widgetというZLEウィジェットをC-t
にバインドしています。そのため、fzf-file-widgetをそのまま使えばいいのではないか、と思うかもしれません。実際、上のコードのthen節はほとんどfzf-file-widgetそのままです。
function _double_space_to_fzf() { if [[ "${BUFFER}" =~ " $" ]]; then fzf-file-widget else zle self-insert fi } zle -N _double_space_to_fzf bindkey ' ' _double_space_to_fzf
しかし、これだとzsh-autosuggestionsと競合してしまい表示がおかしくなってしまいます。fzf-file-widgetの typeset -f zle-line-init >/dev/null && zle zle-line-init
という部分が原因のようなので、そこを除いて書き直しました。