LoginSignup
6
4

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-03-14

はじめに

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 に寄せる

:warning: 違和感: キーバインドが意味不明で不快。まともに操作できない
:warning: 個人事情: 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: プロンプトをカスタマイズする

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

Before After
image.png image.png
~/.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 を育てる

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

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

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

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


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

> man zshoptions

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

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

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

Step7: 卒業式

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

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


> chsh -s /bin/zsh


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



6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4