WSL: シェルをBashからZshへ変更する

## はじめに
Windows機の買い替えにより、WSLを新規にいれました。まっさらのUbuntu(22.04)をインストールしましたので、その際のシェルをbash->Zshへと変更手順した際の備忘録です。

#### シェルとは
> Linuxにおけるシェルとは、Linuxの核となるカーネルへ要求を伝達するプログラムです。ユーザーとLinuxOSを繋ぐインターフェイスの役割を果たしています。

## Shell: bash -> Zshへ

- WSL:OSリリース確認
~~~ bash:Ubuntu
$ lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.2 LTS
Release:        22.04
Codename:       jammy
~~~

- 現在のシェルの確認
~~~ bash:Ubuntu
$ echo $SHELL
/bin/bash
~~~

- 現在設定できるシェルの確認
~~~ bash:Ubuntu
$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/usr/bin/sh
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen
~~~

- シェルZshのインストール
~~~ bash:Ubuntu
$ sudo apt-get update
$ sudo apt-get install zsh
~~~

- バージョン確認
~~~ bash:Ubuntu
$ zsh --version
~~~

- シェルの変更
~~~ bash:Ubuntu
$ chsh -s /bin/zsh
~~~

- 新しいターミナルを立ち上げて、空の設定ファイルを作成する
~~~ Zsh:Ubuntu
$ touch ~/.zshrc
~~~

- 現在のシェルの確認
~~~ Zsh:Ubuntu
$ echo $SHELL
/bin/zsh
~~~


## Zshのコマンド操作・設定

#### コマンド操作の基本例

| コマンド | 説明 | 
| --- | --- | 
| !!   | 直前のコマンドを実行 |
| control + r   | Historyのコマンド検索 |
| control + a   | カーソルを先頭 |
| control + k   | カーソルから行末まで削除 |
| control + e | カーソルを行末へ |
| control + b | カーソルを1文字戻る |
| control + f 　| カーソルを1文字進める |
| control + d | カーソル位置の文字を削除 |

#### 設定の例(スペルミスやHISTORY系中心に)
~~~ Zsh:Ubuntu
$ vim ~/.zshrc

setopt auto_cd 　　　        #一致するディレクトリに cdなしで移動できる
setopt correct              #コマンドのスペルを修正(正しい可能性のある候補を表示)
setopt correct_all          #コマンドラインの引数のスペルを修正
setopt hist_ignore_dups     #直前と同じコマンドは履歴に追加しない
setopt share_history　　    #他のzshで履歴を共有する
setopt inc_append_history　 #即座に履歴を保存する

$ source ~/.zshrc
~~~

#### History 設定
~~~ Zsh:Ubuntu
$ vim ~/.zshrc

export HISTFILE=~/.zsh_history
export HISTSIZE=10000
export SAVEHIST=10000

$ source ~/.zshrc にて反映
~~~

## Oh My Zshのインストール

> Oh My Zshは、Zsh構成を管理するためのオープンソースのコミュニティ主導のフレームワークです

https://ohmyz.sh

- インストール
~~~ Zsh:Ubuntu
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
~~~

- いままでの設定ファイルをバックアップから追記で戻す
~~~ Zsh:Ubuntu
$ cat ~/.zshrc.pre-oh-my-zsh >> ~/.zshrc
~~~

## Oh My Zshプラグイン

#### ①powerlevel10k

https://github.com/romkatv/powerlevel10k

- FONTのインストール
- ターミナルのフォント設定の変更
- インストール(githubのOhmyzshのところを確認)

~~~ Zsh:Ubuntu　
$ git clone --depth=1 https://github.com/romkatv/powerlevel10k.git${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
~~~

- 設定ファイルのテーマを編集（Set ZSH_THEME="powerlevel10k/powerlevel10k" in ~/.zshrc.）

#### ②zsh-autosuggetion

https://github.com/zsh-users/zsh-autosuggestions

- インストール(githubのOhmyzshのところを確認)
~~~ Zsh:Ubuntu
$ git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
~~~
- 設定ファイル plugin に追記

#### ③zsh-syntax-highlighting

https://github.com/zsh-users/zsh-syntax-highlighting

- インストール(githubのOhmyzshのところを確認)
~~~ Zsh:Ubuntu
$ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
~~~
- 設定ファイル plugin に追記


## おまけ：モダンなコマンド追加

#### ①exaのインストール

lsの代替コマンドです。とてもカラフルでいい感じです。

https://gladevise.com/exa-install-settings

- cargoのインストール
~~~
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
~~~

- exaのインストール
~~~
$ cargo install exa
~~~

を実行すると、error: linker `cc` not found　というエラーが発生する。
gccがないためなので、以下を実行しgccやmakeをインストールした後に、再度、exaのインストールを実行する

~~~
$ sudo apt install build-essential

$ gcc --version
~~~

以下のコマンドで、カラフルでアイコンまでついた表示となるので、エイリアス登録しておく。
~~~
$ exa -aal --icons
~~~

#### ②batのインストール

catの代替コマンド

https://github.com/sharkdp/bat

- batのインストール
~~~
$ sudo apt install bat
~~~

Githubに下記のように書いてあり、 batcat というコマンド名でインストールされるので、エイリアス登録 **alias cat="batcat"** を行う。

> Important: If you install bat this way, please note that the executable may be installed as batcat instead of bat (due to a name clash with another package).


## 最終的にこんな感じ
![ubuntu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167772/e2151e80-6395-2202-07f9-da38a128b8c8.png)

## まとめ
- Zshの設定やOh-My-Zshのプラグインはまだまだたくさんありますので、徐々にいれていきます。今回は初期設定と見た目を元に戻すことを実施しました。


## 参考URL

https://www.yokoweb.net/2020/06/03/win10-wsl2-ubuntu-20_04-gcc-make-install/