zsh の分かりにくい記号、用語のまとめと似たような感じだけど、Webの方が目次や索引があったりして、個人的にはmanより読みやすいと思うのでリンクを張ってみた。
記号
Parameter Expansion Flags(変数展開フラグ)
↓の(q)
みたいなの。 公式ドキュメント
${(q)hoge}
Modifiers(編集子)
↓の:h
みたいなの。公式ドキュメント
${dir:h}
Globbing Flags(グロブフラグ)
↓の(#m)
みたいなの。公式ドキュメント
${arr//(#m)[aeiou]/${(U)MATCH}}
Glob Qualifiers(グロブ修飾子)
↓の(N)
みたいなの。公式ドキュメント
*.zsh(N)
Tips
タブ補完を使う
なんとzshは記号にもタブ補完が効いてしまう。これで意味を調べられる。
(上記のうちGlobbing Flagsだけは効かない模様)
% ls ${(<ここでTab>
0 -- split words on null bytes
A -- assign as an array parameter
a -- sort in array index order (with O to reverse)
b -- backslash quote pattern characters only
B -- include index of beginning of match in #, % expressions
C -- capitalize words
記号以外にも公式ドキュメントへのリンク
オプション
setopt auto_cd
みたいなの。
公式ドキュメント:オプションのリスト
次のコマンドでオプションのリストを表示できる:
$ set -o
noaliases off
aliasfuncdef off
allexport off
...
組み込み変数
HISTFILE
やPS1
などシェルが使う変数のリストは公式ドキュメント:Parameters Used by the Shellにある。
$_comps
や$commands
などは公式ドキュメント:Variables Indexにある。
次のコマンドで定義済み変数のリストを表示できる:
$ set
'!'=0
'#'=0
'$'=84029
zleウィジェット
↓のhistory-incremental-pattern-search-backward
みたいなのをウィジェットという。
公式ドキュメント:ウィジェットのリスト
bindkey '^R' history-incremental-pattern-search-backward
次のコマンドでユーザー定義を含むウィジェットのリストを表示できる:
$ zle -al
.accept-and-hold
.accept-and-infer-next-history
.accept-and-menu-complete
...
スタイルとタグ
↓zstyleのdescriptions
の部分(コロンで区切られる最後の部分)をタグ、format
の部分をスタイルという。
公式ドキュメント:スタイルとタグのリスト
zstyle ':completion:*:descriptions' format '%F{yellow}%d%f' # グループ名など
次のコマンドでスタイルのリストを表示できる:
(適用可能な全スタイルではなく、定義済みのスタイル)
$ zstyle -L
zstyle ':vcs_info:svn*:*' actionformats '%c%u %F{1}| %a%f'
zstyle ':vcs_info:*' actionformats '%b %F{1}| %a%f'
zstyle ':vcs_info:hg*:*' branchformat %b
...
カーソル位置で適用可能なスタイルを調べるには、M-2 C-x h
を押せば良い:
$ cp -<ここでM-2 C-x h>
tags in context :completion::complete:cp::
argument-rest options (_arguments _cp)
tags in context :completion::complete:cp:argument-rest:
globbed-files (_files _arguments _cp)
さいごに
zshのカスタマイズは楽じゃない。しかしドキュメントへのアクセスを効率的にし、文字列操作や配列操作のイディオムを覚えれば、あとは他のツールのカスタマイズとそう変わらないのではないか。
ただ補完をカスタマイズするにはしっかり仕組みを理解する必要があるので
- zshの本
- A User's Guide to the Z-ShellのChapter 6(主要開発者のPeter Stephenson氏によるもので、半公式といっていいだろう)
をおすすめする。
そもそもカスタマイズが面倒くさいが便利に使いたい人はzsh4humansはどうだろう。powerlevel10k作者のromkatv氏による「設定無しで欲しい機能が全部揃っている」zshフレームワークで、
- シンタックスハイライト
- オートサジェスト(fishみたいな)
- Powerlevel10kによるプロンプト
- fzfとの統合
が入っている。romkatv氏のことだから、速度にも最大限に注意を払っていると思われる。