zshからfishに移行

カテゴリー:  Tech タグ:  fish terminal zsh

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

結果、こんな感じになります。

Sharship

Starship (Preset tokyo-night)

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-ghqfzfと連動して、ghqのリポジトリーへのアクセスを補助してくれるプラグインです。
  • fzf.fishfzfを使用して、コマンドライン履歴やファイル一覧などを表示してくれるプラグインです。
  • gitignore.gitignoreファイルを自動生成してくれるプラグインです。
  • zzコマンドを再現してくれるプラグインでディレクトリの移動をサポートしてくれます。

関連記事

コメント

Comments powered by Disqus