いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

macOS Catalina から シェル のデフォルトが zsh になったので移行した

概要

最近、Mac の OS バージョンを catalina にアップデートしたのですが

ターミナルを起動すると、以下のメッセージが表示されるようになりました。

The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.

デフォルトのシェルが bash から zsh に変わったみたいですね。。。

毎回でるのが煩わしいので、移行しました。後から忘れてしまいそうなので、ここにメモメモです。

もともと、シェルの設定ファイルはあんまり凝った形にしていないので、まだ楽な方でした。

移行する上で、とても参考になったのは、以下の記事でした。超感謝 m( )m

qiita.com

qiita.com

qiita.com

ここの内容を自分用に調整しただけですw

zsh の バージョン確認

とりあえず、zsh のバージョンを確認

$ $(which zsh) --version
zsh 5.7.1 (x86_64-apple-darwin19.0)

.zshenv

# --------------------------------------------------------------------
# .zshenv
#
# ~/.zshenv は Zsh が起動した際に必ず読み込まれる設定ファイルです。
# ここには主に環境変数などの、操作に関係のない設定を記述します。
#
# REFERENCES:
#   - https://qiita.com/shionit/items/31bfffa5057e66e46450
#   - https://qiita.com/uasi/items/c4288dd835a65eb9d709
#   - https://qiita.com/watertight/items/2454f3e9e43ef647eb6b
# --------------------------------------------------------------------

# --------------------------------------------------------------------
# 基本的な環境変数
# --------------------------------------------------------------------
export PATH="/usr/local/sbin:/usr/local/bin:$HOME/bin:$PATH"
export EDITOR=vim
export PAGER=lv

# --------------------------------------------------------------------
# alias
# --------------------------------------------------------------------
alias ls='ls -G'

超シンプルw

.zshrc

# --------------------------------------------------------------------
# .zshrc
#
# ~/.zshrc は Zsh のインタラクティブシェル(ユーザーがコマンドを入力する画面)が
# 起動した際に読み込まれる設定ファイルです。
# Zsh スクリプトを実行したり、 zsh -c 'command...' でコマンドを
# 実行したりしたときには読み込まれません。
# このファイルには主に Zsh の操作に関する設定を記述します。
#
# REFERENCES:
#   - https://qiita.com/shionit/items/31bfffa5057e66e46450
#   - https://qiita.com/uasi/items/c4288dd835a65eb9d709
#   - https://qiita.com/watertight/items/2454f3e9e43ef647eb6b
# --------------------------------------------------------------------

# --------------------------------------------------------------------
# 補完機能を有効にする
#
# $ brew install zsh-completions
# To activate these completions, add the following to your .zshrc:
#
#   if type brew &>/dev/null; then
#     FPATH=$(brew --prefix)/share/zsh-completions:$FPATH
#
#     autoload -Uz compinit
#     compinit
#   fi
#
# You may also need to force rebuild `zcompdump`:
#
#   rm -f ~/.zcompdump; compinit
#
# Additionally, if you receive "zsh compinit: insecure directories" warnings when attempting
# to load these completions, you may need to run this:
#
#   chmod go-w '/usr/local/share'
# --------------------------------------------------------------------
autoload -Uz compinit
compinit

# 大文字小文字に関わらず, 候補が見つからない時のみ文字種を無視した補完をする
zstyle ':completion:*' matcher-list '' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}'

# <Tab> でパス名の補完候補を表示したあと、
# 続けて <Tab> を押すと候補からパス名を選択できるようになる
# 候補を選ぶには <Tab> か Ctrl-N,B,F,P
zstyle ':completion:*:default' menu select=1

# sudo の後ろでコマンド名を補完する
zstyle ':completion:*:sudo:*' command-path /usr/local/sbin /usr/local/bin \
                   /usr/sbin /usr/bin /sbin /bin /usr/X11R6/bin

fpath=(/usr/local/share/zsh-completions $fpath)

# --------------------------------------------------------------------
# cd した先のディレクトリをディレクトリスタックに追加する
# ディレクトリスタックとは今までに行ったディレクトリの履歴のこと
# `cd +<Tab>` でディレクトリの履歴が表示され、そこに移動できる
# --------------------------------------------------------------------
setopt auto_pushd

# --------------------------------------------------------------------
# pushd したとき、ディレクトリがすでにスタックに含まれていればスタックに追加しない
# --------------------------------------------------------------------
setopt pushd_ignore_dups

# --------------------------------------------------------------------
# 拡張 glob を有効にする
# glob とはパス名にマッチするワイルドカードパターンのこと
# (たとえば `mv hoge.* ~/dir` における "*")
# 拡張 glob を有効にすると # ~ ^ もパターンとして扱われる
# どういう意味を持つかは `man zshexpn` の FILENAME GENERATION を参照
# --------------------------------------------------------------------
setopt extended_glob

# --------------------------------------------------------------------
# 入力したコマンドがすでにコマンド履歴に含まれる場合、履歴から古いほうのコマンドを削除する
# コマンド履歴とは今まで入力したコマンドの一覧のことで、上下キーでたどれる
# --------------------------------------------------------------------
setopt hist_ignore_all_dups

# --------------------------------------------------------------------
# コマンドがスペースで始まる場合、コマンド履歴に追加しない
# 履歴に残したくないコマンドを入力するとき使う
# 例: <Space>echo hello と入力
# --------------------------------------------------------------------
setopt hist_ignore_space

# --------------------------------------------------------------------
# コマンドの自動サジェスト機能 (zsh-autosuggestions)
#
# $ brew install zsh-autosuggestions
# To activate the autosuggestions, add the following at the end of your .zshrc:
#
#  source /usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh
#
# You will also need to force reload of your .zshrc:
#
#  source ~/.zshrc
# --------------------------------------------------------------------
source /usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh

# --------------------------------------------------------------------
# コマンドのシンタックスハイライト機能 (zsh-syntax-highlighting)
#
# $ brew install zsh-syntax-highlighting
# To activate the syntax highlighting, add the following at the end of your .zshrc:
#  source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
#
# If you receive "highlighters directory not found" error message,
# you may need to add the following to your .zshenv:
#  export ZSH_HIGHLIGHT_HIGHLIGHTERS_DIR=/usr/local/share/zsh-syntax-highlighting/highlighters
# --------------------------------------------------------------------
source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

# --------------------------------------------------------------------
# 自分用のプライベートな設定
# --------------------------------------------------------------------
if [ -f $HOME/.env_private_zsh.sh ]; then
    source $HOME/.env_private_zsh.sh
fi

基本的に、アプリとか言語とかの個別設定は別ファイルにして読み込むようにしています。

Powerline の 設定とかですね。

zsh に デフォルトシェル を変更

設定ファイルも用意できたので、デフォルトシェルを変更します。

$ chsh -s /bin/zsh
パスワード聞かれますので、打ち込むと変更完了

その後、一旦ターミナルを終了 (Cmd + q) して再度起動すると zsh に変わっています。

ついでに Powerline の設定

これよく聞かれるので、ついでにここにメモ。

基本的に

medium.com

をみて、必要なものをインストールして

qiita.com

をみて、$HOME/.config/powerline/config.json を調整します。

後は、以下を .zshrc に書いて終わりです。

# --------------------------------------------------------------------
# Powerline
#
# REFERENCES:
#   - https://medium.com/@ITZDERR/how-to-install-powerline-to-pimp-your-bash-prompt-for-mac-9b82b03b1c02
#   - https://qiita.com/Fu-Om/items/11c112b9b7f4f12cb709
# --------------------------------------------------------------------
powerline-daemon -q

POWERLINE_ZSH_CONTINUATION=1
POWERLINE_ZSH_SELECT=1
source /usr/local/lib/python3.7/site-packages/powerline/bindings/zsh/powerline.zsh

pythonのバージョンの部分と、読み込む対象のスクリプトが zsh の場合は拡張子が zsh なのに注意。


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com