Macのbashをzshに切り替え&そこそこ使える初期設定集(2023年版)
https://4.bp.blogspot.com/-aJjlevJyK9U/XGjx40QThrI/AAAAAAABRco/j9aRPnYHpX4PU6RZjhTWRh6_8xnPfbNEQCLcBGAs/s800/animal_chara_computer_azarashi.png
【前提】
古から利用しているMac Book Airでbashからfishを呼び出す設定になっていました(このような設定になっているのは当時それなりの理由があったからで、機会があれば紹介します)が、最近fishをやめてzshを使おううと思ったので、それに伴いbashからzshに移行しました。その際の設定を備忘録として残しておきます。
【デフォルトシェルの切り替え】
chshコマンドを利用してbashからzshに切り替えます。用意されているshell一覧を確認する際は/etc/shellsを確認してください。
code:sh
$ cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/fish
今回はzshに切り替えるので、以下のコマンドを実行します。
code:sh
chsh -s /bin/zsh
(一般ユーザーの場合パスワードの入力を求められます。)
コマンド実行後、ターミナルを再起動し、起動しているシェルのPIDとSHELL変数をチェックします。チェックします。($ exec $SHELL -lなどでシェルを起動してみてもSHELL=/bin/bashで環境変数が定義されている場合はターミナルを再起動しましょう)
code: sh
$ ps aux | grep $$ | grep -v grep
tascript 11861 3.8 0.0 34152376 2960 s000 S 7:16PM 0:01.31 -zsh
$ echo $SHELL
/bin/zsh
これでzshが起動していることがわかります。あとは、設定ファイルの雛形として、~/.zshrc、~/.zprofileを用意し、~/.bashrcおよび~/.bash_profileの設定を移行しましょう。
【Visual Studio Codeのターミナルを利用している場合】
ターミナルのプロファイルを設定する必要性があります。設定していない場合、zshの設定が反映されず、変更前のシェルが起動してしまいます。コマンドパレット(Shift + Command + P)で基本設定: ユーザー設定を開くからterminal.integrated.profiles.osxを検索するとsettings.jsonを編集することができます。setting.jsonには以下を追記します。
code:settings.json
"terminal.integrated.profiles.osx": {
"zsh": {
"path": "/bin/zsh",
"args": [
"-l"
]
}
}
再度コマンドパレットを開き「ウィンドウの再読み込み」を実行すると設定が反映されます。
ちなみに2023年2月現在「terminal.integrated.shell.osx」でシェルの設定をしようとすると、下記の警告が表示され、上記の設定を推奨されます。
これは推奨されていません。既定のシェルを構成するための新しい推奨方法は、Terminal › Integrated › Profiles: Osx にターミナルプロファイルを作成し、そのプロファイル名を Terminal › Integrated › Default Profile: Osxの既定値として設定することです。これは現在、新しいプロファイル設定より優先されていますが、将来は変更されます
【シンタックスハイライト、コマンド履歴の入力補完、コマンド履歴のフィルタリング】
zsh-syntax-highlightingzsh-syntax-highlighting、zsh-autosuggestions、pecoを利用します。それぞれbrew installコマンドで必要なパッケージをインストールします。最低限の設定ですが、下記に~/.zshrcの設定例を記載します。
code:.zshrc
# プラグインの実行
source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source $(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
# シンタックスハイライトの基本設定
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern cursor)
# pecoを利用したコマンド履歴を「Control + r」で呼び出す 
function peco_history() {
BUFFER=$(history -n -r 1 | peco --query "$LBUFFER")
CURSOR=$#BUFFER
zle clear-screen
}
zle -N peco_history
bindkey '^r' peco_history
設定後$ exec $SHELl -lでzshを起動するとシンタックスハイライト、入力補完、コマンド履歴のフィルタリングができるようになっています。pecoは標準入力をもとに「Control + r」コマンドで履歴の予測変換を実施します。定義した関数およびコマンドの解説をすると、
1. peco_history関数でzshのコマンド履歴を1から最新までを出力し、pecoの標準入力に渡す
2. pecoではキーボード入力による標準入力で1のデータをフィルタリングする
3. zle(Zsh Line Editor)を利用して、関数の登録及び関数呼び出し用のキーバインドを設定する
となっています。
ここまで実施しておけば、最低限zshが動作してそこそこ便利な設定になっているでしょう。
あとは、のんびり育ててあげてください。