Help us understand the problem. What is going on with this article?

違和感を取り除いて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 に寄せる

: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:



rtakasuke
よろしくね!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした