ログインシェルをfishにしてみる

なんかみんなやってるしログインシェルいろいろ設定したいなーと思ったけど、ちょっと面倒だなと思っていたところにfishなるものが。楽しい。
とりあえず必要そうなものを入れてみたメモ。

---

(2021/05)
M1 macbookに乗り換えたので改めて見直し。大きくは変わってないはず。

(2020/11/25)
fisherがバージョン4系になり、 `fisher add` ではなく `fisher install` になった（というか戻った？）ようなので更新。(編集リクエストありがとうございます)

(2019/02/12)
だいぶインストール時のコマンドが変わったようなので更新。

## 事前準備

* brewのインストール

https://brew.sh/index_ja

## とりあえずこれだけあれば
### fish設定

fish、fzf、ghq、fd、batインストール
※後述プラグインに必要なコマンドもインストールしてます

```
$ brew install fish fzf ghq fd bat
$ fish -v
```

`/etc/shells`末尾に ~~/usr/local/bin/fish~~ `/opt/homebrew/bin/fish` を追加。
2021/05追記
fishのインストール先が /opt/homebrew/bin/fish に変わったようです。
`which fish` で確認するのが良さそう。

```
sudo vi /etc/shells
```

デフォルトシェルを fish に変更

```
$ chsh -s `which fish`
```

ターミナルを再起動して、fishシェルに切り替わっているか確認する

```
Welcome to fish, the friendly interactive shell
```

### fisher install
fish用プラグインマネージャ。
インストール方法は変わることがあるため公式を見たほうがいいです。

https://github.com/jorgebucaran/fisher


```
$ curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher
$ fisher -v
```

以下いろいろインストール。
#### z補間
https://github.com/jethrokuan/z

```
fisher install jethrokuan/z
```

#### fzf補間

2021/05追記

今まで `jethrokuan/fzf` を使っていましたが、こちらのプラグインがさらに優秀すぎて感動したので乗り換えました。おすすめ。

https://github.com/PatrickF1/fzf.fish

```
fisher install PatrickF1/fzf.fish
# OR 履歴検索だけで良ければこちらでも問題ない
fisher install jethrokuan/fzf
```

とりあえずこれで、Ctrl + Rで履歴検索ができる。
Ctrl + F でファイル検索もできる。
（Ctrl + F は自分は右矢印キーの機能としてよく使用するため、後述の「binding設定」で変更している）
他にも便利キーありますが詳細はgithubで。

#### ghq補間

https://github.com/decors/fish-ghq

```
fisher install decors/fish-ghq
```
クローン先を統一する。Ctrl + Gで対象リポジトリを検索して移動できる。

```
ghq get 対象リポジトリ
```
デフォルトは~/ghq以下に保存される。リポジトリ保存先変更するには以下。

```
git config --global ghq.root 保存先ディレクトリ
```

---

（2021/05追記）
3年ほどfish使ってきて以下あまり使ってないなと思ったので小さく。

##### bashの記法に対応
[GitHub - edc/bass: Make Bash utilities usable in Fish shell](https://github.com/edc/bass)

```
fisher install edc/bass
```

##### bdコマンドで親ディレクトリへ移動
```
fisher install 0rax/fish-bd
```

##### alias補完
```
fisher install oh-my-fish/plugin-balias
```

### binding設定

https://github.com/PatrickF1/fzf.fish

で`ctrl + f`でファイル検索を行うkey bindingが設定されるが、これを`ctrl + s`に変更したいのでやってみる。（自分は`ctrf+f`を右移動としてよく使うため。）
 `~/.config/fish/conf.d/fzf.fish`にkey binding用の設定ファイルが生成されているのでこちらを変更する。
※本当は公式記載の、独自ファイルを生成して〜でやった方がいいと思うが、一箇所変更したいだけなので横着する

`~/.config/fish/conf.d/fzf.fish`ファイル内の`\cf`→`\cs`に変更する

`\c`が`ctrl`を意味するので`\cs`で`ctrl + s`の意味になる。
`\e`は`escキー`のこと。

### aliasなど設定
#### 編集
* alias  
`~/.config/fish/config.fish`
* 関数定義  
`~/.config/fish/functions`

#### 書式注意
bashと書式違うので注意。[こちら対応表のリンク](https://github.com/fish-shell/fish-shell/wiki/Shell-Translation-Dictionary)。
例えば

```
export PATH=/usr/local/bin:$PATH
↓
set -x PATH /usr/local/bin $PATH
```

#### 独自のfunction定義したい
[bashやfishの起動時設定ファイル整理](https://qiita.com/bleru/items/009f56a234ce77694465)

### タブ補完

`.config/fish/completions` 以下にタブ補完用のスクリプトを置く。

公式リポジトリから持ってくる方法
https://github.com/fish-shell/fish-shell/tree/master/share/completions

gitの場合

```
curl https://raw.githubusercontent.com/fish-shell/fish-shell/master/share/completions/git.fish > ~/.config/fish/completions/git.fish
```

 
## その他
### fish_configコマンド
ブラウザが開いてコマンドラインのフォントや色をGUIで設定できる。楽しい。

```
fish_config
```

### 公式ドキュメントを開く

```
help doc
```

## 参考サイト
- [Windows10で快適なfishシェル環境構築 - Qiita](https://qiita.com/ysks/items/6c9d751d9a3b3b1b8020)
- [fish shell を使いたい人生だった](https://dev.classmethod.jp/etc/fish-shell-life/)
- [fishシェル始めました](http://yukidarake.hateblo.jp/entry/2016/10/10/210906)
- [やっぱり良かったpeco + ghq](https://blog.craftz.dog/%E3%82%84%E3%81%A3%E3%81%B1%E3%82%8A%E8%89%AF%E3%81%8B%E3%81%A3%E3%81%9Fpeco-ghq-4eb57aeda33e)
- https://blog.lorentzca.me/add-completions-to-fish-shell/