新しく Windows PC に Windows Subsystem for Linux をセットアップした際、どうせならということでシェルをデフォルトの bash から fish に変更した。fish は bash や zsh などとは使い勝手や設定の書き方などが少し異なるので、覚えるついでにメモとして残しておこうと思う。
ワイルドカード・パイプ・リダイレクト
ワイルドカードやパイプ、リダイレクトは bash や zsh と同じような感じで使える。
$ ls /mnt/c/Dropbox/images/*.png
/mnt/c/Dropbox/images/Screenshot_20180517-142511.png*
/mnt/c/Dropbox/images/Untitled.png*
$ cat .vimrc | head -3
scriptencoding utf-8
" vim:set ts=8 sts=2 sw=2 tw=0: (この行に関しては:help modelineを参照)
"
$ uname -a >> uname.txt; cat uname.txt
Linux T480 4.4.0-17134-Microsoft #285-Microsoft Thu Aug 30 17:31:00 PST 2018 x86_64 x86_64 x86_64 GNU/Linux
シンタックスハイライト
入力したコマンドが有効か否かで文字の色を変更したり下線を表示したりする機能がある。
例えばコマンドが存在しない場合には以下のように赤色で表示される。
パスが存在しない場合にはアンダーラインが表示される。
補完
fish shell には非常に協力な補完機能が用意されており、ファイルやフォルダだけでなくサブコマンドの補完や省略したパスの補完なども行える。
例えば以下のように /m/c/d/ と入力して tab を押すと /mnt/c/Dropbox/ まで自動的に展開してくれる。
コマンド入力時に灰色になっている部分は履歴から補完している部分で、その状態で→矢印もしくは ctrl+f を押すと一気に入力してくれる。良く利用するコマンドやパスなどを何度も打つ必要がない。
タブを押すと候補を一覧で表示してくれる。
履歴検索
コマンド履歴は他のシェルと同様に上下キーや ctrl+p/n で呼び出すことができる。
しかし履歴を検索する方法は異なっている。他のシェルでは履歴を検索する際 ctrl+r を押してから文字を入力して検索するという方法だったが、fish では先に語句を入力してから ctrl+p を押すことで検索できる。
fish を利用する際にまず間違える部分ではないかと思う。
fish の設定ファイル
.bashrc に相当する、fish のユーザー毎の設定ファイルは ~/.config/fish/config.fish となる。fish のインストール後だと無いかもしれないのでそういう場合には自分で作る。
ログイン直後に実行するコマンドなどを書いておくと良い。自分は rbenv の PATH を指定するのに使ったりしている。
$ cat ~/.config/fish/config.fish
# for rbenv
export PATH="$HOME/.rbenv/bin:$PATH"
eval "rbenv init - | source"
set fish_greeting "The cake is a lie"
fish プロンプトの編集
プロンプトの設定は ~/.config/fish/functions/fish_prompt.fish の設定を読み込んでいる。プロンプトを変更するにはこのファイルを編集すれば良い。
面倒なら oh-my-fish や fisherman を利用してテーマを適用すると楽。
WSL Ubuntu 18.04 のシェルを fish に変更したので設定とか | Lonely Mobiler環境変数とか
環境変数とかシェルで利用する変数は set コマンドを利用して値を指定したり set -e で削除できる。表示するのは echo コマンドを利用する。
$ set HOGE 12345
$ echo $HOGE
12345
$ set -e HOGE
$ echo $HOGE
$
PATH のように複数の値がある変数は ; などで区切るのではなく、リストで表現するようだ。
$ echo $PATH
/home/ryomatsu/.rbenv/shims /home/ryomatsu/.rbenv/bin /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin (以下省略)
もしくは env コマンドも利用できる。
$ env HOGE=12345
fish 起動時のメッセージを変更する
fish を実行すると表示される Welcome to fish のメッセージを変更するには $fish_greeting を書き換えるか fish_greeting 関数を自分で定義すると良い。
$ echo $fish_greeting
Welcome to fish, the friendly interactive shell
$
$ echo "set fish_greeting \"hoge\"" >> ~/.config/fish/config.fish
fish_greeting 関数を書くには ~/.config/fish/functions/fish_greeting.fish ファイルを作成し、以下のように表示したい文字列を指定する。
function fish_greeting
echo "The cake is a lie."
end
このようにするとログイン時に "The cake is a lie." と表示される。
fish のドキュメント・チュートリアル・ヘルプを見る
fish のドキュメントは単に help コマンドを実行すれば良い。
公式ドキュメントは英語だが日本語に訳してくれる方もいる。わからないことがあったら以下のページを見ると良さそうだ。
fish2.4日本語ドキュメント:すぐ使える25の便利機能と実例