重い腰を上げて、クリーンインストール含めてmacOS Montereyにアップグレードした。
クリーンインストールのついでに、zshの設定ファオルを見直してみた。
.zshenv
.zshenvは、どの設定ファイルでも読み込まれる共通設定を入れる。なので必要最低限の記述を入れておく。
#----
# locale
#----
export LC_ALL=ja_JP.UTF-8
#----
# load
#----
if [[ -n $ZSH_VERSION ]]; then
source $HOME/.zshrc
fi
ロケール設定を日本語/Unicodeにする指定はいらないかもしれないけどお試しに。
下の環境変数「$ZSH_VERSION」はzshのバージョンを取得している。
nオプションで文字列の長さが0でなければ.zshrcを実行するよう設定。(例えばzshを使っていなければバージョンを取得できずに空文字が返るので.zshrcは実行されない)
注意点として、zshではなくbashを使っている場合には「$BASH_VERSION」になる。
.zprofile
普段通りに.zshrcを読み込む。
#----
# load
#----
if [ -f $HOME/.zshrc ]; then
source $HOME/.zshrc
fi
以前の記述が「. ~/.zshrc」だったので、今回は勉強がてら「source $HOME/.zshrc」に変更。
環境変数「$HOME」はログインユーザーのホームディレクトリを取得。
「.」と「source」はLinuxのディストリビューションによっては若干違いがあるらしい。一見でわかりやすい「source」を使用することにした。
.zshrc
historyコマンドの履歴管理を見直してみた。
#----
# history
#----
# 保存しないコマンドを設定(書き込み時)
HISTORY_IGNORE="(ls|cat|less|cd|pwd|exit|which)"
# 保存しないコマンドを設定(メモリ)
zshaddhistory() {
local line=${1%%$'\n'}
local cmd=${line%% *}
[[
# コマンドライン全体が4文字以下なら保存しない
${#line} -ge 5
&& ${cmd} != ${~HISTORY_IGNORE}
]]
}
# historyコマンドは保存しない
setopt hist_no_store
# historyに追加されるコマンドが古いものと重複したら保存しない
setopt hist_ignore_all_dups
# スペースで始まるコマンドは保存しない
setopt hist_ignore_space
#----
# brew
#----
export PATH=/usr/local/bin:$PATH
export PATH=/usr/local/sbin:$PATH
export PATH=/usr/local/Cellar:$PATH
「HISTORY_IGNORE」には指定のコマンドを履歴に残さないようにした。
ターミナルでのhistoryコマンドを残さない場合には「HISTORY_IGNORE」の中にhistoryコマンドを追加するのではなく「setopt hist_no_store」を設定する。
bashではなくzshだと「HISTORY_IGNORE」だけではメモリ側でコマンド履歴が残るので、zshaddhistoryを設定。
関数内で変数スコープ「line」で末尾の改行を取り除く。
最初の判定では文字数で判定し、コマンドライン全体が4文字以下なら保存しないよう設定。(lineの頭に#を付けて文字数を取得)
「HISTORY_IGNORE」はパターン検索するよう設定している。
最後にはHomebrewのパスを設定。