fish
1$ brew install fish
Bash や Zsh のようなシェルの仲間です。 デフォルトでいい感じに表示してくれるので、パソコンを買い替えた場合に便利です。
ログインシェルを fish にしたい
/etc/shells
にfish
を追記するchsh -s
コマンドでデフォルトシェルを変更する
1$ which fish
2# /usr/local/bin/fish
3# /opt/homebrew/bin/fish
4$ sudo vi /etc/shells
5$ chsh -s /opt/homebrew/bin/fish
fish
のパスを/etc/shells
に追記すると chsh -s
できるようになります。
fish
のパスは OS で異なることがあるので which fish
で確認しておきます。
/etc/shells
の編集には管理者権限が必要です。
chsh -s
を実行すると変更前に管理者パスワードを確認されます。
fishを設定したい
1$ fish_config
fish_config
を実行すると、ブラウザが起動します。
色やプロンプトなど設定できます。
変更点を確認したい
1$ fish_delta
fishのデフォルトから変更を加えた箇所を確認できます。
プロンプトを微修正したい
1$ code ~/.config/fish/functions/fish_prompt.fish
上記のfish_config
で選んだプロンプトを少しだけ修正したい場合は、fish_prompt.fish
を直接編集してしまいましょう。
僕はAstronaut
の2段組のプロンプトを選んだのですが、作業中のディレクトリ名は省略形に変更したいです。
パスを設定したい(fish_add_path
)
# Homebrew
fish_add_path /usr/local/bin
# pipx
fish_add_path $HOME/.local/bin
# Rust
fish_add_path $HOME/.cargo/bin
fish_add_path
を使ってパスを追加できます。
注釈
これまでは以下の方法set -x
を使った方法でよかったのですが、v3.2から非推奨になりました。
$ set -x PATH $PATH $HOME/.cargo/bin
パスを確認したい(fish_user_paths
)
$ echo $fish_user_paths
echo $fish_user_paths
~/.cargo/bin ~/.local/bin /usr/local/bin
$ printf '%s\n' $fish_user_paths
~/.cargo/bin
~/.local/bin
/usr/local/bin
パスはfish_user_paths
で確認できます。
変数を設定したい(set
)
1set 変数名 値
2set -l 変数名 値1 値2
3set -gx 変数名 値 # bash/zshのexportに相当
4set 変数名 # ""に初期化
5set -q 変数名 # 変数名が定義されているかを確認
bash
/ zsh
ではexport
コマンドを使って変数を定義しますが、fish
ではset
コマンドを使います。
set
には変数のスコープを指定できるオプション(-l / --local
、-g / --global
、-u / --universal
)が3種類あります。
また、変数を外部変数にするかを指定できるオプション(-x / --export
、-u / --unexport
)があります。
外部変数にすると、別のプログラムから変数が参照できるようになります。
set -q
で変数が定義されているか確認できます。
if
文と組み合わせて条件分岐に使えます。
リダイレクトしたい
$ pbcopy < ~/.gitconfig
$ echo "hello" > stdout.md
$ echo "hello" 2> stderr.md
$ echo "hello" 2>&1 stdout_and_stderr.md
コマンド補完を整理したい
$ fish_update_completions
Parsing man pages and writing completions to ~/.local/share/fish/generated_completions/
7148 / 7148 : zic.8
fish_update_completions
でコマンド補完の候補を更新できます。
有効になったコマンド補完は~/.local/share/fish/generated_completions/
で確認できます。
コマンド履歴を整理したい
// 履歴の数を確認
$ wc -l ~/.local/share/fish/fish_history
41529
// 履歴ファイルの内容を確認
$ tail -n 30 ~/.local/share/fish/fish_history
- cmd: fish_key_reader
when: 1718746545
- cmd: bind
when: 1718746557
- cmd: fish_update_completions
when: 1718746615
- cmd: cd ~/.local/share/fish/
when: 1718746873
paths:
- ~/.local/share/fish/
- cmd: wc -l ~/.local/share/fish/fish_history
when: 1718747030
paths:
- ~/.local/share/fish/fish_history
- cmd: tail -n 30 ~/.local/share/fish/fish_history
when: 1718747220
paths:
- ~/.local/share/fish/fish_history
Fishはコマンド履歴からも補完してくれます。
しかし、打ち間違えてしまったコマンドを覚えてしまっていることもあります。
そのときは履歴ファイル(~/.local/share/fish/fish_history
)を直接開き、
該当するコマンド履歴を削除します。
コマンド履歴の構造は、以下のようになっていました。 不要な項目は、この構造ごと削除します。
- cmd: コマンド名
when: 時刻(unixtime)
paths:
- 実行したパス
めんどくさい場合は、履歴ファイルをまるっと削除してもいいかもしれません。