LoginSignup
0

More than 3 years have passed since last update.

fish で peco + z 実行後 direnv が読み込まれない

Last updated at Posted at 2019-03-02

fish で、 z + peco を使った履歴cdツールを実行した時、
direnv が読み込まれない問題が発生していた。

移動後リターンを一回入れてあげれば読んでくれるんだけど、それを忘れて rails c とか実行するとクラッシュするし、spring stop しないと環境変数読み込み直してくれないしでイライラすることが何回かあった。

その辺のプラグインとか使えばいいのかもしれないけれど、個人的に sort 順逆にしたりとかしていじっていたので、調べてみたらdirenvfishのイベントを拾って実行していたので、cdの後にイベントを発火させるようにすることで解決した。

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

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

  z -l | sort -nr | peco $peco_flags | awk -F ' {5,}' '{ print $2 }' | read recent
  if [ $recent ]
    cd "$recent"
    commandline -r ''
    commandline -f repaint
    echo
    emit fish_prompt
  end
end

イベントの発火はemit fish_promptの部分。

上記のpeco_z.fishfish shellでzの結果をpecoって爆速でディレクトリ移動する - @ka2nを参考にさせていただきました。

2020-08-28 追記

direnv のコードが改善されて、イベント名が変わって上記コードが動かなくなりました。
emit fish_prompt の部分を emit fish_postexec にすることでできた。

どのイベントを使っているのかはdirenv hook fishを実行すると見ることができます。
--on-event の後ろがイベント名

function __direnv_export_eval --on-event fish_postexec;
    "/usr/local/bin/direnv" export fish | source;
end

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0