MacOSのCatalinaがリリースされ変わったこといえば,デフォルトのShellがbashではなくzshになったことでしょうか。
僕は,黒い画面と言ったら「bash1択でしょ」としか考えていなかったからzshってなんやねんってところから始まる。
なので,今回はbashからzshへお引越しを行うことにした。
この際にzshにも慣れてみようと思う。
Catalina」とともにbashからzshへ
そもそも僕はzshへ乗り換えなくったってbashで十分満足していた。
仕事ではbashを使うからzshを使うメリットもないし,むしろ扱うShellは統一していた方が楽だろうし...
なぜzshへ乗り換えるのか。
The default interactive shell is now zsh.
Catalinaへアップデートしたあとにターミナルを開くとMacから提案されたのだ。
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
CatalinaのデフォルトShellはzshだよ。乗り換えなよ。
zshの設定
zshのインストール
bashからzshへ乗り換える場合,Homebrewでzshのインストールを行ったりするのだが,Catalinaへアップデートしたらzshもすでに使える環境になっていたので今回はインストールの必要はない。
念の為,zshを使えるかどうか確認しておきましょうか。
$ cat /etc/shells使えるShell一覧が表示されます。
/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh/bin/zshがあれば問題ありません。zshを使う準備は整っています。
(Homebrew等でzshを入れた人は/usr/local/bin/zshを/etc/shellsに追記する必要があります。Catalinaをお使いの場合はまぁ問題ないでしょう。)
ログインシェルの変更
ターミナルでログインをした際にzshで起動するように設定していきます。
これもコマンド一発です。
$ chsh -s /bin/zshこれで,bashからzshへ切り替わりました。
chsh: no changes made
*エラーとなった場合
これは,chsh -s /bin/zshでエラーとなりbashから切り替わらなかった方向けになります。chsh: no changes madeという文言が表示され,エラーになるかと思います。
この場合ターミナル > 環境設定から一般

開くシェル:の項目から
- デフォルトのログインシェルを選択し,ターミナルで
chsh -s /bin/zshコマンドをもう一度打つ。 - コマンド(完全パス)を選択し,
/bin/zshと入力
このどちらかで設定可能です。
zshの設定ファイル
無事にzshへの乗りかえができたかと思います。
これで,晴れてzshライフを送ることになります。
さて,いつものようにコマンドを叩いて開発を勧めていきます。
ところがどっこい,自分で設定したaliasが使えないではないか。
あぁそうか.bashrcに記載していたのはbashに限り有効なのか。。
.zprofileと.zshrc
zshにも.bash_profileや.bashrcの役割を果たすファイルがもちろん存在する。
そう.zprofileと.zshrcだ。これにbashで使っていた設定(alias)もろもろを引き継いでおきましょう。これまでの設定を壊さないためにも追記で書きましょう。
$ cat .bash_profile >> .zprofile
$ cat .bashrc >> .zshrcこの2つのこコマンドでOK,sourceコマンドなり再ログインを行うと設定が完了しているかと思います。
zshおすすめ設定
zshおすすめ設定①
zshの強みといえばなんといっても補完機能!!らしい。。
たしかにzshを導入したあとに少し触れてみるとTabキーを押したときの挙動がbashとは明らかに違う。(どう違うかはzshを使って確認してみてください)個人的にはbashよりも扱いやすいような気がする。
cdで移動する際なんか,bashでTabキー2回叩いていたディレクトリ表示がTabキー1回で補完してくれるので最初は違和感だったが,慣れてしまえば楽々だった。
さらにzshの補完機能を強化
zshまだまだこんなもんじゃないよ。もっと扱いやすくするためにzsh-completionsを導入してみよう。
Homebrewでインストールしていきます。
$ brew install zsh-completions.zshrcに以下を記述すれば補完機能がもっと強化されます。
# zsh-completions(補完機能)の設定
if [ -e /usr/local/share/zsh-completions ]; then
fpath=(/usr/local/share/zsh-completions $fpath)
fi
autoload -U compinit
compinit -usourceコマンドなり再ログインを行うと設定が完了しているかと思います。
これがどういうものなのかと言いますと...
試しにgitコマンドの補完を行ってみます。
gitのあとにスペースを入れTabキーを押してみます。
$ git (ここでTabキー)
add -- add file contents to index
am -- apply patches from a mailbox
apply -- apply patch to files and/or to index
archimport -- import an Arch repository into git
archive -- create archive of files from named tree
bisect -- find, by binary search, change that introduced a bug
blame -- show what revision and author last modified each line of a file
branch -- list, create, or delete branches
bundle -- move objects and refs by archive
cat-file -- provide content or type information for repository objects
check-attr -- display gitattributes information
check-ignore -- debug gitignore/exclude files
check-mailmap -- show canonical names and email addresses of contacts
check-ref-format -- ensure that a reference name is well formed
checkout -- checkout branch or paths to working tree
checkout-index -- copy files from index to working directory
cherry -- find commits not merged upstream
cherry-pick -- apply changes introduced by some existing commits
citool -- graphical alternative to git commit
clean -- remove untracked files from working tree
clone -- clone repository into new directory
commit -- record changes to repository
:
:git コマンドのオプションと説明が一覧で出てきました。
gitのオプションなんだっけ??のときに大活躍
(ですが,こんなにコマンドを使うことはないですけどね。主要なコマンドしか僕は使ったことありません。)
どのようなコマンドの補完が用意されているかは以下を参考に
https://github.com/zsh-users/zsh-completions/tree/master/src
zshおすすめ設定②
bashからzshに乗り換えた直後になにか違和感を感じた。
そう。プロンプトの表示がなんだか少し見慣れない。
僕の場合プロンプトにはカレントディレクトリのパスを表示させたいのだが,defaultのzshにはパスの表記がなかった。
zshプロンプトにカレントディレクトリのパスを表示
毎度おなじみの.zshrcに記述をしていく。
表記の規則は以下の表を参考にしてほしい。
| パラメーター | 意味 | 例 |
|---|---|---|
| %M | ホスト名 | localhost.localdomain |
| %m | ホスト名 | localhost |
| %d | カレントディレクトリ(フルパス) | /Users/tiyuri/work |
| %~ | カレントディレクトリ(フルパス2) | ~/work |
| %C | カレントディレクトリ(相対パス) | tiyuri |
| %c | カレントディレクトリ(相対パス) | ~ |
| %n | ユーザ名 | tiyuri |
| %# | ユーザ種別 | #(root) %(root以外) |
| %? | 直前のコマンドの戻り値 | 0 |
| %D | 日付(yy-mm-dd) | 15-02-10 |
| %W | 日付(yy/mm/dd) | 15/02/10 |
| %w | 日付(day dd) | Tue 10 |
| %* | 時間(hhss) | 12:34:56 |
| %T | 時間(hh:mm) | 12:34 |
| %t | 時間(hh:mm(am/pm)) | 00:34PM |
よく使いそうなパラメーターを表記しています。(参考)
こんな感じで.zshrcに書いてあげればOK
# prompt
PROMPT='%m:%c %n$ 'zshプロンプトに色を付ける
プロンプトに色付けを行いたい場合は%F{color}%fのように囲んであげれば良い。black,red,green,yellow,blue,magenta,cyan,whiteで指定することができます。
こんな感じかな。
# prompt
PROMPT='%m@%n %F{green}%~%f$ ' この場合、カレントディレクトリを色付しています。
また、%F{color}%fのcolorは数字でも指定できます。
ざっとこんな感じですかね。
- 0:black 黒色
- 1:red 赤色
- 2:green 緑色
- 3:yellow 黄色
- 4:blue 青色
- 5:magenta 紫色
- 6:cyan シアン
- 7:white 白色
しかし,greenに指定したつもりが何故か黄色いです。
greenという概念がzshと僕の間で違うようです。
ちなみに僕の設定はこれ
# prompt
PROMPT='%F{blue}%m@%n%f %F{red}%~%f$ 'ホスト名は青色表記にし、カレントディレクトリを赤色表記にしています。
文字色以外にも背景色を変えたい場合は%K{color}%kで囲んであげれば良いです。
zshおすすめ設定③
よく使うhistory コマンドをもっと充実させましょう。
historyを便利に
history コマンドを打つと直近で使ったコマンドが表示されます。
$ historyですが、zshでは直近の16件しか一覧に表示されません。
そこですべての履歴を表示するには以下のコマンドになります。
$ history 1これはわざわざ.zshrcに記載しなくても良さそうです。
おすすめの設定は以下のように
historyの検索を簡単に
例えばhistoryからssh関連のコマンドの履歴だけを表示したい場合は
$ history | grep sshのように| パイプで繋ぎ、grepをかけるのですが
引数で検索文字を指定できるように.zshrcにaliasを登録しておきます。
#引数でhistoryのgrepを行う
alias his='history | grep'これで、his 検索コマンドと打てば目的のコマンドのみhistoryで一覧表示可能です。
他には、
#プロンプト複数起動時のhistory共有
setopt share_history
# 重複するコマンドのhistory削除
setopt hist_ignore_all_dupsなんかも.zshrcに登録すると便利です。
最後に
まだまだbashからzshに乗り換えホヤホヤなので,込み入った設定は行っていないのですが,MacOS「Catalina」とともにzshへ乗り換えることを検討している方には参考にしてほしい基本の「き」の字のおすすめ設定を紹介しました。
zshに乗り換えてもbshの設定に持っていこうとするあたりがbashへの未練タラタラ感がすごいですけどね。世間のzsh使いの方含め...
zshをもっと楽しく便利に使うにはbashと違い、設定関係諸々インストールが必要になります。しかしそこまでマニアックな機能はいらないやって方は、僕の紹介している設定くらいで十分使えると思います。
ありがとう


コメント