HOME/Articles/

fish shell導入してみた

Article Outline

fish shell導入してみた

今までzshを使用してましたが、Qiitaなどでチラチラとfish shell関連の記事を見かけるようになったため、気になって導入してみました。

動作環境

macOS Mojave (バージョン10.14.4)

fishとは

90年代の方に向けた最後の(finally)コマンドラインシェル(shell)のようです。 名前の通り、公式サイトを覗くと魚(fish)がトレードマークになってます。

特徴(公式サイトより)

  • Autosuggestions : Webブラウザライクな自動補完
  • Sane Scripting : esacなど不要な文法で記述可能
  • Man Page Completions:manページから自動でコマンド補完
  • Glorious VGA Color:24bitカラーをサポート
  • Web Based configuration Webベースの設定が可能
  • Works Out of The Box:新たな学習や設定は不要

インストール

homebrewを使用してインストールします。

$ brew install fish
$ fish -v
fish, version 3.0.2

デフォルトシェルを変更します。

$ sudo vi /etc/shells # 末尾に/usr/local/bin/fishを追加
$ chsh -s /usr/local/bin/fish # デフォルトシェルをfishに変更
$ fish
Welcome to fish, the friendly interactive shell

Auto Suggestions

一度入力したコマンドであれば、過去の履歴からコマンドのオプションやパラメータを自動提案(Auto Suggestion)してくれます。以下は(色がないので全くわかりませんが)、AWS CLIのコマンドの途中まで入力した際にfishがこのパラメータじゃね?というのを提案してくれてます。

> aws ec2 describe-instances

タブ補完

試しにコマンド入力し、タブキーを入力すると、確かにオプションを自動補完してくれます。以下はgitコマンドの例。

> git <Tab>
add                             (Add file contents to the index)
apply     (Apply a patch on a git index file and a working tree)
archive           (Create an archive of files from a named tree)
bisect  (Find the change that introduced a bug by binary search)
blame  (Show what revision and author last modified each line …)
branch                        (List, create, or delete branches)
(以下省略)

Fisher

fish用のパッケージマネージャはいくつかあるようですが、Fisherを使ってみます。現時点で以下のパッケージマネージャがあるようです。

  • Fisher
  • Fundle
  • Oh My Fish

それぞれのパッケージマネージャの違いの詳細については、下記サイトを参考に。 https://github.com/jorgebucaran/fisher/issues/481

Fisher特徴

  • 特別な設定は不要
  • Oh My Fishパッケージ互換
  • 高速なパッケージダウンロード
  • キャッシュダウンロード機能

システム要件

  • fish 2.2+
  • curl 7.10.3+
  • git 1.7.12+

インストール

ワンライナーでインストールできます。

> curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish
> fisher --version
fisher version 3.2.9 ~/.config/fish/functions/fisher.fish

使い方

fisherをインストールしたので、fishのプロンプトのデザインや便利なパッケージを導入してみようと思います。fishの有名どころのパッケージについては、以下のGitHubでいくつか公開されています。

https://github.com/jorgebucaran/awesome-fish

ここでは、以下のパッケージをインストールします。

  • oh-my-fish/theme-bobthefish - Robust, git-aware, powerline prompt
  • jethrokuan/z - Pure-fish rupa/z-like directory jumping
# oh-my-fish/theme-bobthefish 
> fisher add oh-my-fish/theme-bobthefish
> git clone https://github.com/powerline/fonts.git --depth=1
> cd fonts
> ./install.sh
> cd ..
> rm -rf fonts

iTermの場合は、「Preferences⇨Profile⇨Fonts」から Source Code Pro for Powerlineを選択します。

VSCodeのターミナルを使用する場合は、設定画面からフォントファミリの先頭に、'Source Code Pro for Powerline'を追加します。(おそらくスペースを含む場合はシングルクォートでくくる必要があります)。設定画面において、「font」で検索すると設定箇所を見つけやすいです。 また、ターミナルアプリケーション、およびターミナルにて使用するシェルも設定画面で設定可能です。ここでは、それぞれ「iTerm.app」と「/usr/local/bin/fish」を指定しています。

では、次にjethrokuan/zをインストールします。 zはディレクトリ間の移動を補完してくれるパッケージのようです。「z 文字列」のように入力すると、履歴からマッチするパスを補完してくれます。

# jethrokuan/z
> fisher add jethrokuan/z
> cd /User/hoge
> z hoge<Tab> # タブキーを入力すると、以下のように補完してくれる
> z /User/hoge

まとめ

.bashrcや.zshrcを記載しなくとも、見栄えの変更や機能拡張をサクッと設定できる点は良いな思いました。自動補完も便利ですね。少しはスタイリッシュなターミナル環境が整ったので、触りながらより手に馴染む環境を模索していこうと思います。

参考

fish公式サイト

Fisher

powerline

powerline-fonts

fish shell を使いたい人生だった

fish shellが結構良かった話