文化的なfish環境を得る為の最短ルート

10数行のコピペだけで素早く最低限のfish環境を整えるためのメモです。
具体的には、fish+fisher+Theme+Z+fzfをインストールして使えるようにします。

Ubuntu20.04で確認していますが、Ubuntu18.04も同じと思います。

# 変更履歴
・2021/01/23 「Themeとプラグインを入れて整える」に「historyでpecoを起動」を追加
・2021/02/18 変数回りの誤り訂正等

# 背景

一時的に普段と違う環境で作業することになった場合など、初めのうちは時間効率など気にしてbashで頑張ろうとするのですが、数日後に結局我慢できずにそこそこ時間をかけてfish環境を整えてしまうので、自分用のメモとして残すことにしました。これで初日からfishでイキりコンソールを使えます。

#fishシェルをインストール
[公式](https://fishshell.com/) のまま

```sh
sudo apt-add-repository ppa:fish-shell/release-3
sudo apt-get update
sudo apt-get install fish
```

デフォルトシェルをfishへ

```sh
sudo usermod -s /usr/bin/fish <username>
```

これで一応使い始めることができます。
中間補完も使えます。

#Themeとプラグインを入れて整える

```sh
# パッケージマネージャ（fisherとoh-my-fish）をインストール
curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher
curl -L https://get.oh-my.fish | fish

# テーマをインストール
# fisher install simnalamburt/shellder
# simnalamburt/shellderがインストールできなくなっていたため、oh-my-fish/bobthefishに変更(2022/2/5)
install oh-my-fish/theme-bobthefish

# フォルダ移動を便利に（> z [TAB]で履歴へジャンプ）
fisher install jethrokuan/z

# コマンド履歴(historyでpecoを起動）
sudo apt install peco
fisher install oh-my-fish/plugin-peco
abbr -a history peco_select_history

# fzfで曖昧検索を超絶便利に
sudo apt install -y fzf
sudo apt install -y bat
sudo apt install -y fd-find
alias fd='fdfind' && funcsave fd
alias bat='batcat' && funcsave bat
# 執筆時に使っていたPatricF1/fzf.fishが使えなくなっていたためjethrokuan/fzfに変更(2022/2/5)
# fisher install PatrickF1/fzf.fish
fisher install jethrokuan/fzf

```

インストールは以上で完了です。
(ターミナルが文字化けする場合は、[解説／補足：フォントを入れる](#Fontを入れる)を参照してください)

#解説／補足

以下はインストール後に有益かもしれない補足情報です。

##Pathの追加

```sh
set -U fish_user_paths <追加するpath> $fish_user_paths
```

##環境変数の操作

### 環境変数を設定する
~~設定ファイルに書かなくても永続化されます。~~
永続化するにはファイルに書くか、用途が少し違いますがユニバーサル変数として設定する必要があります。

```sh
set -x <環境変数名> <値>
```

### 環境変数を削除する

```sh
set -e <環境変数名>
```

### ユニバーサル変数を設定する
ユニバーサル変数は他のfishセッションからも参照可能で、永続化します。

```sh
set -U <変数名> <値>
```

##エイリアスの設定と永続化

```sh
alias <新しい名前>='<元のコマンド>' && funcsave <新しい名前>
```

##展開エイリアスの追加

コマンドに別名を付ける機能ですが、エイリアスと違いヒストリには元のコマンドで記録されます。複数人で運用するときなどに混乱しなくて良いです。

```sh
abbr -a <新しい名前> <元のコマンド>
```

##themeを探す

https://github.com/oh-my-fish/oh-my-fish/blob/master/docs/Themes.md

本記事でインストールしているのは次のテーマです。
Gitのstatusが一目でわかって便利です。

[simnalamburt/shellder](https://github.com/oh-my-fish/oh-my-fish/blob/master/docs/Themes.md#shellder)

![687474703a2f2f692e696d6775722e636f6d2f785a4a486771382e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51434/c61ba005-2693-4ad3-8ce3-049c93d14100.png)

##Fontを入れる

本記事のshellderを含む、Fishのテーマの多くが絵文字フォントを利用しています。文字化けする場合は利用しているOSに次のサイトにあるフォントなどをインストールして、ターミナルソフトのフォント設定を変更する必要があります。

https://github.com/powerline/fonts

私は[Ubuntu Mono](https://github.com/powerline/fonts/tree/master/UbuntuMono)を入れています。

##Zの使い方

ターミナルで「z+[SPACE]+[TAB]」と打つと、フォルダの移動先候補が現れます。

複数のフォルダを行ったり来たりするのが楽になります。

```sh
z+[SPACE]+[TAB]
```

##fzfの使い方

とりあいず、ホームディレクトリで「**CTRL + f**」を押してみましょう、フォルダやファイルをランチャー形式で選べる画面が表示されると思います。

続いて、普段はファイル名補完などで「TAB」キーを押すタイミングで「CTRL+f」を押してみましょう（例えば「vi [CTRL+f]」など）。補完候補がランチャー形式で表示されます。右ペインにファイルのプレビューが表示さるなど便利です。


![SnapCrab_NoName_2021-1-15_18-21-8_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51434/c870a10f-8b3b-0315-da68-269b65cb985b.png)

また、CTRL+rでコマンド履歴が表示されます。
リストが表示されるだけのfish標準のhistoryコマンドと違い、上下キーや「CTRL+p」「CTRL+n」でカーソル移動して履歴を再実行できるので便利です。

# 最後に

これまでもドットファイル運用やAnsibleのルールブックなど色々ため込んできましたが、ケース対応が煩雑で結局インストール方法をネットで検索している自分がいます。この記事で卒業できると良いのですが。