学生の頃にzshを使い始めてかれこれ10年以上になるが、2ヶ月ほど前にfishに移行した。 ようやく慣れてきたのでメモを残しておく。
使用しているfishのバージョンは2.4.0で、プラグインなどは入れてない。 oh-my-fishを使うと便利っぽいけど、困ったときに入れたらいいかなと思ってまだ困ってないので使ってない。
config
とりあえず~/.zshrcをベースに~/.config/fish/config.fishを作った。
aliasとかexportとかは大体そのままコピペで動くが、なぜかPATHのexportだけはうまくいかなかったのでsetを使うように変更した。
他はifをendで閉じるとか、&&のかわりに; andを使うとか、$( )は( )にするとか、気をつけないといけないポイントはいくつかあるけどそのへんは適当に。
補完
サーバーにログインするときはsshrcを使っていて、sshコマンドと同じようにタブでホスト名を補完してほしい。そういうときの設定は以下。
1
| |
complete - edit command specific tab-completions
一時的な環境変数
例えばzshの場合だとこんな感じのコマンドを実行することがあるけど
1
| |
fishだとこれではダメで、envをつける必要がある。
1
| |
How do I set an environment variable for just one command?
ブレース展開
{ }の中身が展開されるため、展開を抑制したいときはエスケープが必要。
1
| |
とか、
1
| |
とか。ちょっと面倒。gitの引数の場合はタブ補完でバックスラッシュをちゃんとつけてくれる。
プロセス置換
コマンド実行結果をファイルのように扱うやつ。zshだとこんな感じ。
1
| |
fishの場合はpsubを使う。
1
| |
psub - perform process substitution
履歴
zshのshare_history相当のものが無いため最初は戸惑ったが、普段使っているコマンドのパターンはそれほど多くなかったので履歴が育てば不要だった。
それでもtmuxの別のwindow/paneで少し前に打ったコマンドがほしくなることはたまにあって、そういうときはhistory mergeを実行して履歴を再読込している。
自動でmergeするのを試してみたけどコマンド実行のたびに微妙に待たされてストレスたまるので手動運用のほうがよいと思う。