zshからfishに移行
Macで使用するシェルをzshからfishに移行しました。
fishとは
fishはFriendly Interactive SHellの略で、Posixとは異なるシェルの実装です。
一般的にbashやzshなどのシェルは、Posixという規格に従っています。 PosixはUnix系オペレーティングシステムで標準的なコマンドとインターフェースのセット を定義する規格です。 しかし、fishは独自のコマンドと構文を持ち、Posixとの互換性は一部制限されています。 既存のPosix準拠のスクリプトを完全に実行することができない場合があるデメリットが ありますが、次のようなメリットもあります。
-
POSIX非互換とすることで、ユーザーエクスペリエンスを向上させるために自由に設計でき ユーザーフレンドリーなインターフェイスが可能となっています。 自動補完、ハイライトされた構文、わかりやすいエラーメッセージなど、 直感的で分かりやすいインターフェイスでストレスが少なくなります。
-
POSIX互換の制約がないことで、スクリプトを書く際にシンプルな構文 を提供することができています。スクリプトの記述が容易になり、 読みやすく保守しやすくなります。
-
独自の機能や拡張を導入することができます。 特定のユースケースに適した機能を提供し、シェルをカスタマイズできます。 例えば、fishは独自の補完システムを持ち、タブ補完が強化されています。
このような非互換により既存のPosix準拠スクリプトが正しく動作しないデメリットは ありますが、逆に新しいアプローチや新機能を取り入れる際に柔軟性を提供します。
M1 Macへのfishのインストール
以下の手順でインストール可能です。Homebrewがインストールされていることが前提となります。
$ brew install fish $ which fish # インストールしたfishのパスの確認 /opt/homebrew/bin/fish $ sudo echo '/opt/homebrew/bin/fish' >> /etc/shells $ chsh -s /opt/homebrew/bin/fish
インストール後はfish_config
コマンドでいろいろと設定できます。
starshipのインストール
折角なので、気分を変えるためにシェルのプロンプトに Starship を利用することにしました。
Rust製ですが、パッケージマネジャーからのインストールを奨励しているようです。 Macの場合はHomebrewで導入できます。 導入後は、config.fishに初期化のためのステートメントを追加します。
今回はプリセットの中からTokyo Night
を使うことしました。iTerm2のカラースキーム
もTokyo Nightにしました。
$ brew install starship $ echo 'starship init fish | source' >> ~/.config/fish/config.fish $ starship preset tokyo-night -o ~/.config/starship.toml
結果、こんな感じになります。
Nerd Fontが前提なりますが、コマンドライン上にパスが表示され、可能な場合はアイコン表示なりかなり派手なインターフェイスになります。
パッケージマネージャー fisher
fishは多くの拡張機能やプラグインが開発され公開されていますが、 これらを管理するためのパッケージマネージャーもいくつか公開されています。
今回は、fisherを使用することにします。
GithubのfisherのREADMEでガイドされている コマンドをコピーしてきてターミナルにペーストするだけでインストールできます。
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher
現在次の4つのプラグインを使用しています。
$ fisher install decors/fish-ghq $ fisher install patrickf1/fzf.fish $ fisher install sijad/gitignore $ fisher install jethrokuan/z
-
fish-ghq
はfzf
と連動して、ghqのリポジトリーへのアクセスを補助してくれるプラグインです。 -
fzf.fish
はfzf
を使用して、コマンドライン履歴やファイル一覧などを表示してくれるプラグインです。 -
gitignore
は.gitignore
ファイルを自動生成してくれるプラグインです。 -
z
はz
コマンドを再現してくれるプラグインでディレクトリの移動をサポートしてくれます。
関連記事
- 2024-02-04 19:58 WezTermを導入
- 2021-12-26 01:54 ハッカー風ターミナルを作る
- 2018-06-02 21:34 ZPlug + Prezto のインストール
- 2018-05-26 23:59 zshへの移行
- 2017-04-04 11:02 iTerm2で英語キーボードを使う時の不具合を解消する