違和感を取り除いてbashからzshに移行する


はじめに

zsh の違和感を一歩ずつ取り除き、bash から卒業した方法を説明します。

zsh は周囲からの評判も良かったため、以前にも何度か使ったことがありました。
しかし、操作の違和感にどうしても慣れずに、毎回挫折していました。
最新 Mac OS の標準ログインシェルが zsh なったこともあり、改めて bash からの卒業を目指すことにしました。

移行ポリシー

  • 無理せず一歩ずつ移行する
    最初から chsh -s /bin/zsh することはしません。
    zsh な気分のときにだけ立ち上げて、少しずつ慣らしていきます。

  • キーバインドは bash に寄せる
    zsh の操作に慣れることよりも、bash のキーバインドを引き継ぐことを優先します。
    仕事で本番機に bash ログインする機会があるため。

  • フレームワークは使わない
    oh-my-zshPrezto などのフレームワークやプラグインマネージャーが便利という声を聞きますが、使いません。
    道具はシンプルなものが好きです。

Step1: zsh にログインしてみる

zsh な気分になったら、次のコマンドで zsh を起動します

$ zsh --login


bash に戻りたくなったら、新しいターミナルを起動するか、次のコマンドで zsh を終了します。

% exit

Step2: ~/.zshenv と ~/.zshrc を準備する

設定ファイルを準備しましょう。
bash のものとは、ひとまず以下の対応になると考えてください

  • ~/.bash_profile~/.zshenv
  • ~/.bashrc~/.zshrc

exportalias あたりの設定はそのままコピーすれば使えます。

Step3: キーバインドを bash に寄せる

違和感: キーバインドが意味不明で不快。まともに操作できない
個人事情: bash も使う必要があるので、zsh 独自のキーバインドに慣れたくない

bindkey は emacs モードを使用

デフォルトは emacs モードなので、ここでつまづく人は少ないと思いますが、
私が過去に挫折した最大の要因は、うっかり vim モードにしていたことでした。

vim モードだと、
^a(カーソルを行頭へ)、^e(カーソルを行末へ)、^p(コマンド履歴戻る)、^n(コマンド履歴進む) など、
bash でおなじみのキーバインドが使えなくなってしまいます。

よって、はじめは emacs モードをおすすめします。

~/.zshrc
bindkey -e

zsh 独自のキーバインドを修正

bash の ^u(カーソル位置から行頭まで削除) が zsh では行全体を削除する動作になります。

% bindkey -L | grep \"\^U
bindkey "^U" kill-whole-line

これを bash のキーバインドに合わせるには、次のようにします。

~/.zshrc
bindkey "^U" backward-kill-line

私の場合、これだけで違和感が消えました。
他に気になるものがあれば、同様に修正してください。

Step4: プロンプトをカスタマイズする

違和感: プロンプトが見づらくて、なんだかやる気が起きない。
zsh のデフォルトプロンプトが見づらくてモチベーションが上がらなかったので、先にカスタマイズしておきました。

Before After
~/.zshrc
# prompt
autoload -Uz vcs_info
precmd() { vcs_info }
setopt prompt_subst
zstyle ':vcs_info:git:*' check-for-changes true
zstyle ':vcs_info:git:*' stagedstr "%F{yellow} +%f"  # %c
zstyle ':vcs_info:git:*' unstagedstr "%F{green} *%f" # %u
zstyle ':vcs_info:*' formats " %F{green}(%b%u%c%F{green})%f"
zstyle ':vcs_info:*' actionformats " %F{green}(%b%u%c%F{green}|%f%F{red}%a%f%F{green})%f"
local cline=$'\n'
local p_dir="%F{blue}[%m:%~]%f "
local p_git='${vcs_info_msg_0_}'
local p_mark="%B%(?,%F{green},%F{red})>%f%b"
PROMPT="$cline$p_dir $p_git$cline$p_mark "

私が bash で使っていたプロンプトとほぼ同じになりました。
この時点で、私の zsh に対する違和感はほぼ消えました。

Step5: zsh を育てる

葛藤: わざわざ zsh に移るメリットがない気がする…。

ここまでは、操作の違和感を取り除くことに重点を置いていました。
ここからは、zsh の良さを知る・見つける段階になります。

  1. 先輩たちの zshrc を探して、いろいろな設定を試す
  2. 自身が使わない設定は削除する

上記を地道に繰り返して .zshrc を育てます。


わからないことがあれば、公式マニュアルも参考になります。

> man zshoptions

Step6: bash との違いを把握する

不安: zsh に移行してしまって、本当に大丈夫なのだろうか…。

挙動の違いは色々とあるようです。
例えば、以下の記事などが参考になると思うので、軽く目を通しておきましょう。

Step7: 卒業式

気持ちの変化: zsh 最高!!

十分に zsh のメリットを感じられるようになったら、ログインシェルを切り替えましょう。


> chsh -s /bin/zsh


ご卒業おめでとうございます