@ka2n

Technology and beer

fish shellでzの結果をpecoって爆速でディレクトリ移動する

qiita.com

のfish shell版

z.shはfishermanでインストールできるものを使う。-> GitHub - fisherman/z: Pure-fish z directory jumping https://github.com/rupa/zを直接使うプラグインがあったけど、z -lの出力がstdout/stderrに出力されなかったので使えなかった。

fisher z

関数は元記事のものをだいたいそのまま

# ~/.config/fish/config.fish
function peco_z
  set -l query (commandline)

  if test -n $query
    set peco_flags --query "$query"
  end

  z -l | peco $peco_flags | awk '{ print $2 }' | read recent
  if [ $recent ]
      cd $recent
      commandline -r ''
      commandline -f repaint
  end
end

function fish_user_key_bindings
  bind \x1b peco_z # Ctrl-[にバインドする
end 

*1

bindする時に\c[と指定したかったのだけど、Unexpected end of string, square brackets do not matchと怒られたのでfishの別のプラグインを参考に設定。ターミナルの時点でシーケンスじゃなくて\x1bで送られてくるからかな?

使ってみるとghqに比べて少しだけ時間がかかるので、もう少し早く動くz.sh実装があればそっちに移行したい(あるいは作るか)。

*1:Jan 9, 2017 22:12 コマンドを呼び出す前の入力値をpecoに渡すように更新