インストール - Fish
概要
Fishは、LinuxやMacOS向けのスマートで使用しやすいコマンドラインシェルである。
Fishには、以下に示す特徴がある。
- オートサジェスト
- Webブラウザのように履歴や補完に基づいて、入力中にコマンドを提案する。
- 美しいVGAカラー
- 24ビットのTrueColorをサポートしている。
- 完全なスクリプト言語
- Fishは完全にスクリプト化されており、その構文はシンプル、クリーン、かつ一貫している。
- Webベースの設定
- Webページから色を設定することや、関数、変数、履歴を表示することができる。
- Man Page Completions
- 他のシェルはプログラム可能な補完機能をサポートしているが、Fishでは、インストールされたmanページを解析して自動的に補完機能を生成する。
- アウトオブザボックス機能
- タブ補完やシンタックスハイライト等の機能が動作するだけでなく、新たに設定する必要がない。
Fishのインストール
パッケージ管理システムからインストール
パッケージ管理システムからFishをインストールする。
# RHEL sudo dnf install fish # SUSE sudo zypper install fish
ソースコードからインストール
ビルドに必要な依存関係のライブラリをインストールする。
# RHEL sudo dnf install cmake ncurses-devel # SUSE sudo zypper install cmake ncurses-devel ncurses5-devel libpcre2-32-0 libpcre2-16-0 libpcre2-8-0 pcre2-devel \ python3-Sphinx gettext-runtime gettext-tools # Manjaro ARM sudo pacman -S --needed cmake ncurses pcre2 python-sphinx gettext
FishのGithubからソースコードをダウンロードする。
または、git
コマンドを使用してソースコードをダウンロードする。
wget https://github.com/fish-shell/fish-shell/releases/download/x.x.x/fish-x.x.x.tar.xz tar xf fish-*.tar.gz # または git clone https://github.com/fish-shell/fish-shell.git
Fishをビルドおよびインストールする。
cd fish-* mkdir build && cd build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<Fishのインストールディレクトリ> -DBUILD_DOCS=ON -DINSTALL_DOCS=ON -DWITH_GETTEXT=ON .. make -j $(nproc) make install
設定
.profileファイルや.bashrcファイル等に、Fishのパスを設定する。
vi ~/.profile
# ~/.profileファイル export PATH="/<Fishのインストールディレクトリ>/bin:$PATH"
Fishの設定を反映させる場合、以下のコマンドを実行する。
source ~/.config/fish/config.fish
グローバルエイリアス
Fishでは、Zshにあるグローバルエイリアスは実装しない方針となっている。
もし、Zshにあるようなグローバルエイリアスを定義するには、bind
コマンドとcommandline
コマンドを使用する。
以下の例では、[L]キーを押下後に[Ctrl] + [X]キーを同時押下することにより、"| less"が展開されるように設定している。
なお、headコマンド
、tail
コマンド、grep
コマンドも同様である。
vi ~/.config/fish/bind_global_alias.fish
# ~/.config/fish/bind_global_alias.fishファイル
function bind_global_alias
switch (commandline -t)
case "l"
commandline -rt '| less'
case "h"
commandline -rt '| head'
case "t"
commandline -rt '| tail'
case "g"
commandline -rt '| grep'
case grep
commandline -rt 'grep -iE '
case prog
commandline -rt '& progress -mp $last_pid'
case progress
commandline -rt '& progress -mp $last_pid'
end
end
# [Ctrl] + [X]キーに対応
bind \cx bind_global_alias
# [Alt] + [X]キーに対応
bind \ex bind_global_alias
# by @GReagle@github
# https://github.com/fish-shell/fish-shell/issues/1963#issuecomment-93775067
FisherManのインストール
FisherManのインストール
FisherManは、Fishのパッケージ管理ツールである。
Fishプラグインのインストール、アップデート、削除において、Fishのタブ補完機能と豊富な構文の強調表示を利用してインタラクティブに行うことができる。
関数、補完、バインディング、スニペットをコマンドラインから管理できる。
シェルの機能を拡張して、プロンプトの外観を変更および異なるシステム間で再現可能な設定を簡単に作成できる。
また、FisherManは、Oh My Fishもサポートしている。
FisherManをインストールするには、以下のコマンドを実行する。
curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher
Fishプラグインのインストール
Fishプラグインをインストールするには、install
コマンドの後にGitHub上のリポジトリへのパスを指定する。
fisher install ilancosman/tide
Fishプラグインの特定のバージョンを取得するには、プラグイン名の後に@
マークを付け、タグ、ブランチ、またはコミットを付加する。
fisher install jorgebucaran/nvm.fish@2.1.0
ローカルディレクトリからFishプラグインをインストールすることもできる。
fisher install /<Fishプラグインがあるローカルディレクトリ>
FisherManは、FishプラグインをFishの設定ディレクトリに展開して、既存のファイルを上書きする。
この動作を変更する場合は、$fisher_path
を任意の場所に設定して、関数のパスに入れること。
インストールされているFishプラグインの表示
現在インストールされている全てのFishプラグインを表示するには、list
コマンドを使用する。
list
コマンドには、出力をフィルタリングするための正規表現を指定することもできる。
fisher list fisher list \^/
Fishプラグインの更新
個別にFishプラグインを最新に更新するには、以下のコマンドを実行する。
fisher update jorgebucaran/fisher
全てのFishプラグインを最新に更新するには、以下のコマンドを実行する。
fisher update
Fishプラグインのアンインストール
個別にFishプラグインをアンインストールするには、以下のコマンドを実行する。
fisher remove jorgebucaran/nvm.fish fisher remove jorgebucaran/nvm.fish@2.1.0
全てのFishプラグインをアンインストールするには、以下のコマンドを実行する。
fisher list | fisher remove
Pecoのインストール
Pecoは、Goで記述されたシンプルな対話型フィルタリングツールである。
grepコマンドと異なり、タイプしながら現在の結果を閲覧することができるため、ログ、プロセス統計、ファイルの検索等のフィルタリングに最適である。
- インストール方法 1 (推奨)
- PecoのGithubにアクセスして、Pecoをダウンロードして解凍する。
tar xf peco_linux_<アーキテクチャ名>.tar.gz
- 解凍したディレクトリを任意のディレクトリに配置する。
- 推奨するディレクトリは、/<Fishのインストールディレクトリ>/binディレクトリである。
- ~/.profileファイル等に、配置したディレクトリの環境変数
PATH
を追加する。 # ~/.profileファイル
export PATH="<Pecoのインストールディレクトリ>:$PATH"
- インストール方法 2
- PecoのGitHubから、ソースコードをダウンロードする。
- この時、GOのインストールディレクトリ内にクローンする。(例. /<GOのインストールディレクトリ>/src/github.com/peco/peco)
- これは、メインのバイナリが内部パッケージを参照しているため、ソースコードが正しいパッケージの場所に置かれている必要があるからである。
git clone https://github.com/peco/peco.git peco
- ダウンロードしたディレクトリに移動して、Pecoをビルドする。
make build
- 次に、releases/<バージョン>ディレクトリにpecoをインストールする。
go build
- 生成された実行ファイルを、例えば、/<Fishのインストールディレクトリ>/binディレクトリ等にコピーする。
- これは、Pecoの依存関係の正しいバージョンをインストールしている。
- 続いて、Pecoをビルドする。
- これにより、クローンされたPecoリポジトリのルートにPecoの実行ファイルがコンパイルされる。
go build cmd/peco/peco.go
- cmd/peco/ディレクトリにあるpeco.goファイルを、任意の場所にコピーする。
Oh My Fishのインストール
Oh My Fishは何年もメンテナンスされていないため、複数のテーマやパッケージが壊れており、特定の部分が動作しない可能性がある。
Curlコマンドからインストール
Curlコマンドを実行して、Oh My Fishをダウンロードする。
curl -L https://get.oh-my.fish > install
Oh My Fishをインストールする。
fish install --path=~/.local/share/omf --config=~/.config/omf
Githubからダウンロードしてインストール
Oh My FishのGithubからOh My Fishをダウンロードする。
または、以下のコマンド実行する。
git clone https://github.com/oh-my-fish/oh-my-fish.git
Oh My Fishをインストールする。
# Gitからインストールする場合 git clone https://github.com/oh-my-fish/oh-my-fish cd oh-my-fish bin/install --offline # Tarballからインストールする場合 curl -L https://get.oh-my.fish > install fish install --offline=omf.tar.gz
ログインシェルの変更
Fishを利用可能なシェル一覧に追加する。
/etc/shellsファイルにFishのパスを追加することにより、chsh
コマンド、または、usermod
コマンドでログインシェルの変更が可能となる。
echo "/<Fishのインストールディレクトリ>/bin/fish" | sudo tee -a /etc/shells
次に、ユーザのログインシェルを変更する。(パスワードの入力が必要となる)
chsh -s /<Fishのインストールディレクトリ>/bin/fish $USER # または sudo usermod --shell /<Fishのインストールディレクトリ>/bin/fish $USER
ログインシェルが変更されているかどうかを確認する。
grep $USER /etc/passwd
再ログイン、または、PCを再起動する。
ベルの設定
以下の例では、sudoコマンドを実行してパスワード認証する場合、ベルを鳴らしている。
Fishの設定ファイルを開く。
vi ~/.config/fish/config.fish
# ~/.config/fish/config.fishファイル
# ベルを有効化
## デフォルトのキーバインディングを使用
## -Uフラグはユニバーサル変数として設定 (全てのセッションで有効)
set -U fish_key_bindings fish_default_key_bindings
## ベルを明示的に有効化
## -gフラグはグローバル変数として設定
set -g fish_ring_bell on
# sudoのエイリアスを作成してベルを追加
function sudo
# パスワード入力の前にベル音を鳴らす
command echo -ne "\a"
# 元のsudoコマンドを実行
command sudo $argv
end