遅ればせながら bash から zsh に移行してみた


愛機Mac bookのコンソールに警告が出てくるようになった。

```
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
```

[zsh を Mac のデフォルトシェルとして使う - Apple サポート](https://support.apple.com/ja-jp/HT208050)

Catalina から、ついにデフォルトが zsh になったのか、ということで各種サイトを確認しながら移行することに

- https://qiita.com/AirBeans5956/items/6a00443c6118d7d3f5f4


## zsh への切り替え

冒頭の警告に書いてあるとおりのコマンドですぐに切り替わった。

```shell
$ chsh -s /bin/zsh
```

```shell
% zsh --version
zsh 5.7.1 (x86_64-apple-darwin19.0)
```

## zsh の設定

zsh乗り換え後の初期設定として、簡易的なプラグイン機構やテーマ機構を有する `oh-my-zsh` を設定している記事がよく引っかかるが、見えないところでシェルが重くなるのは本末転倒で避けたいので、これはスキップする。

[まだ oh-my-zsh で消耗してるの？ - Qiita](https://qiita.com/b4b4r07/items/875235f6122a6d779306)

### Bash の設定を Zsh の設定に移行する

（注：雑に言うと）「.bash_profile」と「.zprofile」、「.bashrc」と「.zshrc」が対応しているので、内容をコピーします。

```shell
% cat ~/.bash_profile >> ~/.zprofile
% cat ~/.bashrc >> ~/.zshrc
```

- [x] 雑すぎるので、これらのファイルは後で見直す。

## zsh-completionsをインストール

`zsh-completions` は、Zshの補完機能を強化する。

```shell
% brew install zsh-completions
```

Homebrewでインストール後に .zshrc に設定を追加することで有効になる。

```.zshrc
# 補完機能を有効にする
autoload -Uz compinit
compinit

# sudo の後ろでコマンド名を補完する
zstyle ':completion:*:sudo:*' command-path /usr/local/sbin /usr/local/bin \
                   /usr/sbin /usr/bin /sbin /bin /usr/X11R6/bin

fpath=(/usr/local/share/zsh-completions $fpath)
```

## その他 zsh 拡張をインストール

同じ要領（Homebrew）で他の拡張機能もインストール＆設定した。

### zsh-autosuggestions

コマンドの自動サジェスト機能

```shell
% brew install zsh-autosuggestions
```

```.zshrc
source /usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh
```

### zsh-syntax-highlighting

コマンドのシンタックスハイライト機能

```shell
% brew install zsh-syntax-highlighting
```

```.zshrc
source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
```

## zsh の設定ファイル？？？

`.zprofile` とか `.zshrc` とか具体的にどう用途が違うのだろうか？

[zshの設定ファイルの読み込み順序と使い方Tipsまとめ - Qiita](https://qiita.com/muran001/items/7b104d33f5ea3f75353f)

```
zshenv > zprofile > zshrc > zloginの順で、
それぞれglobalを読み込んだ後で、localを上書き読み込み
```

ということで、私はもともと `.bashrc` は `.bash_profile` を呼び出す設定にしていた（雑）ので、zsh 移行後に `ssh-agent` が2回立ち上がるようになって異変を感じていたが、原因はこれか。`.zshrc` では `.zprofile` を呼び出さないようにした。すべて `.zshrc` に書けば大半は問題ない気がしてきた。

[Zsh - ArchWiki](https://wiki.archlinux.jp/index.php/Zsh#.7E.2F.zshrc_.E3.81.AE.E8.A8.AD.E5.AE.9A)

[zsh: The Z Shell Manual](http://zsh.sourceforge.net/Doc/Release/index.html)

ここらへんも勉強になる。

## .zshrc .zprofile のブラッシュアップ

- ここらへんを参考にしながら、自分なりの設定を見出す
    - [少し凝った zshrc](https://gist.github.com/mollifier/4979906)
    - https://github.com/takatoshiono/dotfiles/blob/master/zshrc
    - https://wiki.archlinux.jp/index.php/Zsh
    - http://zsh.sourceforge.net/Doc/Release/Options.html

## できあがり

2020/01/03時点でのできあがり状況は、こんな感じです。

![Kobito.mjEa6M.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13994/2a918064-6a09-8417-9abc-318eec763cc5.png "Kobito.mjEa6M.png")



GitHub :octocat: https://github.com/shionit/dotfiles

## zsh 今後の活用

まずは履歴やコマンド補完やハイライトが便利〜という程度ですが、理解を深めて活用範囲を広げられるといいなーと（小並感

[bashとzshの違い。bashからの乗り換えで気をつけるべき16の事柄](https://kanasys.com/tech/803#index0)

ここ↑らへんを読んで、まずは理解に努めます。

### zsh 移行のメリット？

まとめようと思ったのですが、上記の通り「履歴やコマンド補完やハイライトが便利」くらいしかまだ見いだせず。

他にもこんなのがあるよ、というがあれば教えていただけると助かります！

(2020/03/09追記)頂いたコメントをもとに調べたら、このサイトで紹介されている各種機能がいい感じでした！

[zshで究極のオペレーションを：連載｜gihyo.jp … 技術評論社](http://gihyo.jp/dev/serial/01/zsh-book)

- グローバルエイリアス
- 接尾辞エイリアス
- プロセス置換
- etc.



### zsh 移行のデメリット

シェルスクリプトの制御構文を始め、互換性が保たれているので、特段デメリットに感じるものは見つけられていません。気軽に踏み込んでもいいかもですね。