macOSのターミナルを快適に使うためにzshの設定周りを試行錯誤した。

ただし、派手なターミナルはあまり好みではないのでシンプルに表示できるようにしてみた。

プロンプト表示

デフォルトのプロンプト表示は次の形式であるため、ユーザ名やホスト名(マシン名)が長い場合、かなり冗長に表示されてしまう。

また、linuxの用にユーザーログインを頻繁に繰り返すわけではないため、ユーザ名やホスト名が表示されていても嬉しいことは殆どない。

[username]@[hostname] ~ %

個人的には、現在時刻とカレントディレクトリがプロンプトに表示されていれば必要十分と感じている。

現在時刻とカレントディレクトリを表示するようなプロンプトの設定は次のとおり。

PROMPT="%* %~ $ "

ターミナル上の表示は次のようになる。

22:23:39 ~ $

プロンプト表示(Git)

GitはCLI上で操作することが多いので、プロンプトにGitのカレントブランチの情報を表示させたい。

vcs_infoを読みこんだうえで各種設定を記述する。

修正がステージングエリアに追加されているか否かで表示色の切り替えなども可能。

autoload -Uz vcs_info
setopt prompt_subst
zstyle ':vcs_info:git:*' check-for-changes true
zstyle ':vcs_info:git:*' stagedstr "%F{yellow}!"
zstyle ':vcs_info:git:*' unstagedstr "%F{red}+"
zstyle ':vcs_info:*' formats "%F{green}%c%u[%b]%f"
zstyle ':vcs_info:*' actionformats '[%b|%a]'
precmd () { vcs_info }
RPROMPT=$RPROMPT'${vcs_info_msg_0_}'

ターミナル上の表示は次のようになる。

22:23:39 ~/Project/hoge $                                                                             !+[master]

ヒストリーの保存場所と記録サイズ

macOSの場合、コマンド履歴がデフォルトで最大500件までしか残らない。

500件だとさすがに少ないので、10万件程度に増やしておきたい。

そのため、HISTSIZEとSAVEHISTの設定値をそれぞれ10万件に設定する。

HISTFILE=~/.zsh_history
HISTSIZE=100000
SAVEHIST=100000

補完

zshの補完機能はbashなどに比べて強力であるがデフォルトでは無効になっている。

有効にするにはcompinitを読み込んだ上で実行させてあげれば良い。

autoload -Uz compinit
compinit

まとめ

現在利用しているzshの設定の全体像は次のとおり。

使える部分があれば是非参考にしてみてください。

.zshrcautoload -Uz compinit
compinit

PROMPT="%* %~ $ "

# 明示的なcdコマンドが不要となる
setopt auto_cd

# cdコマンドの途中でTabキーを押下すると、ディレクトリの履歴を表示
setopt auto_pushd

# コマンドのタイポが指摘される
setopt correct

# ヒストリーの保存場所と記録サイズ
HISTFILE=~/.zsh_history
HISTSIZE=100000
SAVEHIST=100000

# ヒストリーの補完
bindkey "^P" history-beginning-search-backward
bindkey "^N" history-beginning-search-forward

# git
autoload -Uz vcs_info
setopt prompt_subst
zstyle ':vcs_info:git:*' check-for-changes true
zstyle ':vcs_info:git:*' stagedstr "%F{yellow}!"
zstyle ':vcs_info:git:*' unstagedstr "%F{red}+"
zstyle ':vcs_info:*' formats "%F{green}%c%u[%b]%f"
zstyle ':vcs_info:*' actionformats '[%b|%a]'
precmd () { vcs_info }
RPROMPT=$RPROMPT'${vcs_info_msg_0_}'

# alias
alias ssh='ssh -o ServerAliveInterval=60'
export PATH="/usr/local/opt/[email protected]/bin:$PATH"

# env
export SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/****
export SPRING_DATASOURCE_USERNAME=root
export SPRING_DATASOURCE_PASSWORD=******
export PATH="/usr/local/opt/[email protected]/bin:$PATH"

# Java
export JAVA_HOME=`/usr/libexec/java_home -v "17"`
PATH=${JAVA_HOME}/bin:${PATH}