zshには「オプション」というものがある。オプションとは、zshの動作を切り替えるためのオン/オフのフラグのこと。zshを使ってる人は何かしらオプションを設定して、使いやすいようにカスタマイズしてると思う。このオプションを設定したり、設定した値を確認する方法がちょっと分かりにくいので、ここでまとめておく。
オプションを有効にする
オプションを有効にするには、setoptコマンドを使う。これは次のように、setopt <オプション名>
という形で使う。
# AUTO_CDオプションを有効にする
setopt AUTO_CD
オプションを無効にする
オプションを無効にするには、unsetoptコマンドを使う。これは次のように、unsetopt <オプション名>
という形で使う。
# AUTO_CDオプションを無効にする
unsetopt AUTO_CD
または、オプション名の先頭にNO_
を追加してsetoptコマンドを呼び出してもよい。
# AUTO_CDオプションを無効にする
setopt NO_AUTO_CD
これでもオプションが無効になる。
オプション名の基本ルール
setopt, unsetoptでオプション名を指定するときは、オプション名の大文字小文字の違いは区別されないし、オプション名に含まれる_
はすべて無視される。
例えば、次の例はすべてAUTO_CDオプションを有効にしている。
setopt AUTO_CD
setopt auto_cd
setopt autocd
setopt AutoCd
setopt _AU__TO_CD
ちなみに、man zshoptionsでは、オプション名はすべて大文字、_
区切りの形式で書いてある。
オプションの設定状態を確認する
setoptコマンドを引数を付けずに呼び出すと、有効に設定しているオプション一覧が表示される。
% setopt
autocd
autopushd
nobeep
extendedglob
extendedhistory
... 以下省略 ...
unsetoptコマンドを呼び出すと、無効に設定しているオプション一覧が表示される。
% unsetopt
noaliases
allexport
noalwayslastprompt
alwaystoend
noappendhistory
... 以下省略 ...
ただし、この出力で先頭に「no...」と付いているオプションは有効/無効が逆になっていることに注意。つまり、「noオプションを有効にする」、というのは「オプションを無効にする」という意味になる。
上の例で言うと、setoptの出力にnobeepが含まれているので、「nobeepオプションが有効」になっている。これはつまり、beepというオプションが無効に設定されていることを表している。
同じように「noオプションを無効にする」というのは「オプションを有効にする」のと同じ意味になる。上の例ではunsetoptの出力にnoaliasesが含まれている。これは「noaliasesオプションが無効」、つまり「aliasesオプションが有効」という意味になる。
なんでこんな分かりにくい形式になっているのかは知らない。
有効/無効含めてすべてのオプションの設定を一覧表示したいときは、set -oを使う。
set -o
noaliases off
allexport off
noalwayslastprompt off
alwaystoend off
noappendhistory off
autocd on
autocontinue off
noautolist off
... 以下省略 ...
これですべてのオプションの状態がわかる。setoptコマンドと同じように、先頭にnoが付いているオプションはon/offが逆になる。
on/off逆で分かりにくいという人は、次の記事が参考になる。
これぐらい知っておけば設定方法について迷わないと思うので、参考にしてください!