Edited at
zshDay 25

zsh の分かりにくい記号、用語のまとめ

More than 3 years have passed since last update.

zsh Advent Calendar もいよいよ最終日なった。便利な使い方とかがいっぱい載ってるので、まだの人は見てみると良いと思う。

こういう Advent Calendar とか便利な Tips とかの記事なんかは、読んでると自分なりにカスタマイズしたくなってくる。それに、単純にコピペするだけじゃなくて、何をやってるのかちゃんと理解したいって人も多いと思う。

でも、そういうときに困るのが、なんか変な記号みたいなのがいっぱいあって何やってるか分かんなくなること。

例えばこんな感じ。

path=(${JAVA_HOME:+${JAVA_HOME}/bin}(N-/) $path)

意味わかんないし、(N-/) とかググってもうまく検索できない。

この手の記号とかはいっぱいあるし、知らないことがあるのはしょうがない。でも「調べ方が分からない」ってのはだいぶまずい。「知らなかったとしても必要なときに調べられる」ことが大事だと思う。

というわけで zsh の分かりにくい記号、用語をまとめてみた。なんかよくわかんない時でもここで探せば、どうやって調べればよいか分かるようになると思う。

これを参考にしてもっと zsh を楽しんでみてください!


履歴

名前(日本語)
名前(英語)
man ページの該当箇所
内容

履歴展開
history expansion
man zshexpn の「HISTORY EXPANSION」
過去に入力したコマンドラインを再度実行する
!!

履歴展開のイベント指定
history designator
man zshexpn の「HISTORY EXPANSION」->「Event Designators」
コマンドライン履歴を参照する指定方法
!ls

履歴展開の引数の選択
word designators
man zshexpn の「HISTORY EXPANSION」->「Word Designators」
履歴展開で対象となるコマンドラインの一部の引数だけを展開する
vim !cp:2

履歴展開の編集子
modifiers
man zshexpn の「HISTORY EXPANSION」->「Modifiers」
履歴展開で取り出した内容を一部削除、置換して使用する
cd !!:$:h


ファイル名生成系

名前(日本語)
名前(英語)
man ページの該当箇所
内容

ファイル名展開
filename expansion
man zshexpn の「FILENAME EXPANSION」
ファイル名、パス名に置き換わる記号
ls ~

グロブ記号
glob operator
man zshexpn の「FILENAME GENERATION」->「Glob Operators」
ファイル名のパターンとみなされるメタ文字
grep HOGE **/*.rb

グロブフラグ
globbing flag
man zshexpn の「FILENAME GENERATION」->「Globbing Flags」
ファイル名パターン指定で指定するフラグ
rm (#i)*.bak

グロブ修飾子
glob qualifier
man zshexpn の「FILENAME GENERATION」->「Glob Qualifiers」
ファイル名パターン指定で、ファイルの種類で絞り込みを行うための記号
mv *(.) ../tmp

ブレース展開
brace expansion
man zshexpn の「BRACE EXPANSION」

{} を使用して複数の名前を指定する方法
ls README.{txt,bak}

整数範囲展開
brace expansion (every number)
man zshexpn の「BRACE EXPANSION」
数値の連番を作成する記法
wget http://site.com/{1..28}.jpg

算術展開
arithmetic expansion
man zshexpn の「ARITHMETIC EXPANSION」。 計算の記法については man zshmisc の「ARITHMETIC EVALUATION」
計算結果に置き換えるための記法
echo $((1+2))

また、ファイル名生成では履歴展開の modifiers と同じものが使える。(echo *(:e) など)


変数

名前(日本語)
名前(英語)
man ページの該当箇所
内容

変数展開
parameter expansion
man zshexpn の「PARAMETER EXPANSION」
変数を値に置き換える際の規則
${PWD##*/}

変数展開フラグ
parameter expansion flags
man zshexpn の「PARAMETER EXPANSION」->「Parameter Expansion Flags」
変数展開の際に追加で指定するフラグ
${(U)foo}

配列の添字用変数展開フラグ
subscript flags
man zshparamの「ARRAY PARAMETERS」-> 「Subscript Flags」
配列の値を取り出すときの添字に追加で指定するフラグ
${array[(I)pattern]}

シェルによって設定される変数
PARAMETERS SET BY THE SHELL
man zshparam の「PARAMETERS SET BY THE SHELL」
zsh によって自動的に設定される変数
$?

シェルによって使用される変数
PARAMETERS USED BY THE SHELL
man zshparam の「PARAMETERS USED BY THE SHELL」
zsh の動作を指定するために設定する変数
$PROMPT

また、変数展開では履歴展開の modifiers と同じものが使える。(${PWD:t} など)


コマンドライン編集

名前(日本語)
名前(英語)
man ページの該当箇所
内容

デフォルトキーバインド
default bindings
man zshzle の「STANDARD WIDGETS」
emacs モード, vi コマンドモード、 vi インサートモードで使用可能なデフォルトキーバインド
^A

ユーザー定義ウィジェット
user-defined widgets
man zshzle の「USER-DEFINED WIDGETS」
コマンドライン編集操作を独自に定義する
`function myfunc1

{ ... }; zle -N myfunc1; bindkey '^Y' myfunc1`

文字ハイライト
character highlighting
man zshzle の「CHARACTER HIGHLIGHTING」
コマンドラインで表示する文字に色を付けるなどして強調する


プロンプト表示

名前(日本語)
名前(英語)
man ページの該当箇所
内容

プロンプト文字列の展開
expansion of prompt sequences
man zshmisc の「SIMPLE PROMPT ESCAPES」
プロンプトの表示をカスタマイズする
PROMPT="[%n@%m] %~

プロンプト文字列の条件文字列
conditional substrings in prompts
man zshmisc の「CONDITIONAL SUBSTRINGS IN PROMPTS」
プロンプト文字列の一部を現在の状態に応じて変化させる
PROMPT="%(?..[%?]) %~ "

プロンプトテーマ
prompt themes
man zshcontrib の「PROMPT THEMES」
プロンプトテーマを選択して使用する
autoload -Uz promptinit; promptinit; prompt -p adam2


補完

名前(日本語)
名前(英語)
man ページの該当箇所
内容

スタイル
style
man zshcompsys の「COMPLETION SYSTEM CONFIGURATION」->「Standard Styles」
どのように補完するかを指定するために定義された名前。zstyle CONTEXT STYLE VALUE の STYLE の部分。
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

コンテクスト
context
man zshcompsys の「COMPLETION SYSTEM CONFIGURATION」
どのような文脈で補完が行われているかを指定する文字列。zstyle CONTEXT STYLE VALUE の CONTEXT の部分。
zstyle ':completion:*:cd:*' group-name ''

タグ
tag
man zshcompsys の「COMPLETION SYSTEM CONFIGURATION」->「Standard Tags」
何を補完しているかを指定する文字列。CONTEXT は :completion:FUNCTION:COMPLETER:COMMAND:ARGUMENT:TAG という形式で書くが、その TAG の部分。
zstyle ':completion:*:processes' command 'ps x -o pid,s,args'


リダイレクト

名前(日本語)
名前(英語)
man ページの該当箇所
内容

リダイレクト
redirection
man zshmisc の「REDIRECTION」
コマンドの入出力を別のファイルに切り替えるための記号(ヒアドキュメント、ヒアストリングもここに含む)
ls ~ > list.txt

プロセス置換
process substitution
man zshexpn の「PROCESS SUBSTITUTION」
コマンドの入出力を読み取るファイル名に置き換えるための記号。本来一時ファイルが必要な箇所で、コマンド名を指定してそこにファイルがあるものとして記述できる。
diff <(ls dir1) <(ls dir2)

マルチIO
multio
man zshmisc の「MULTIOS」
1つのコマンドの入出力を複数指定する
sort <foo <bar


構文

名前(日本語)
名前(英語)
man ページの該当箇所
内容

条件式
conditional expressions
man zshmisc の「CONDITIONAL EXPRESSIONS」
ファイルの状態チェック、文字列の比較などを行うための記法
[[ -f foo.zsh ]] && source foo.zsh

制御構文
complex commands
man zshmisc の「COMPLEX COMMANDS」
複数のコマンドを組み合わせて実行する方法。if, while などの制御構文
if foo; then bar fi


内部関数

名前(日本語)
名前(英語)
man ページの該当箇所
内容

組み込みコマンド
builtin commands
man zshbuiltins
zsh 内部で実装しているコマンド
alias

特殊関数
special functions
man zshmisc の「SPECIAL FUNCTIONS」
zsh でとく別な機能を持つ関数
chpwd


その他

名前(日本語)
名前(英語)
man ページの該当箇所
内容

オプション
options
man zshoptions
zsh の動作をON/OFFで指定する
setopt AUTO_CD

コマンド前置
precommand modifiers
man zshmisc の「PRECOMMAND MODIFIERS」
コマンドの前に指定して実行するコマンドの動作を変更する
nocorrect cp foo bar