学生の頃に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するのを試してみたけどコマンド実行のたびに微妙に待たされてストレスたまるので手動運用のほうがよいと思う。