zsh

Top / zsh

$'〜'

http://dengaku.org/~naoki/zsh/FAQ-J/zshfaq03-j.html#l41 参照

\e をエスケープシーケンスとして扱うためのクォート。
3.1.4以降。
(実は bash にもあった

`print '〜'`
"$(print '〜')"

辺りで代用可能。

PS1に \e を中に含む変数を代入する場合は以下のコマンド展開の方が望ましい結果が得られる。
(シングルクォートで括っていないだけ

PS1=`print 〜`

キーバインド一覧

bindkey -L

グローバルエイリアス

alias -g G="| grep"
$ ps aux G me
# ↑ が ↓ のように解釈される
$ ps aux | grep me

G から始まる何かを補完したいときには失敗したり、
G そのものを入れたつもりでハマるので略語補完を使う方が幸せ。

略語展開な補完 (abbreviation)

http://homepage1.nifty.com/blankspace/zsh/zsh.html この辺参照。

やることとしては、以下な感じ。
上記サイトと違って通常の補完と略語展開をセットでやってたり、
空白区切りの補完とパイプな補完(|g みたいな)を分けてたり。

  • 略語連想配列の作成
    typeset -A abbrev
  • 略語展開関数の作成
    $LBUFFER の変更をする
  • 略語展開 || 通常の補完 な関数の作成
  • zle -N
  • キーバインド割り当て
# 単語(空白文字で区切られているもの)に対する補完
typeset -A word_abbrev
word_abbrev=(
	"tar"	"czvf"
)

# パイプに対する補完
typeset -A pipe_abbrev
pipe_abbrev=(
	"l"	"$PAGER"
	"g"	"grep"
	"s"	"sort"
	"w"	"wc"
	"h"	"head"
	"t"	"tail"
)

# 単語略語展開
expand-word-abbrev()
{
	local left right abbrev
	# 最後の単語
	right=$(echo -nE "$LBUFFER" | sed -e 's/.*[[:space:]]\([^[:space:]]*\)$/\1/')
	abbrev=$word_abbrev[$right]
	
	if [ -z "$abbrev" ] ; then
		return 1
	fi

	# 残り
	left=$(echo -nE "$LBUFFER" | sed -e 's/[^[:space:]]*$//')
	LBUFFER=$left$abbrev" "
	return 0
}

# パイプ略語展開
expand-pipe-abbrev()
{
	local left right abbrev
	# 最後の | 以降を取得
	right=$(echo -nE "$LBUFFER" | sed -e 's/.*|\([^|]*\)$/\1/')
	abbrev=$pipe_abbrev[$right]
	
	if [ -z "$abbrev" ] ; then
		return 1
	fi

	# 残り
	left=$(echo -nE "$LBUFFER" | sed -e 's/[^|]*$//')
	LBUFFER=$left" "$abbrev" "
	return 0
}

# 略語展開 || complete-word
expand-my-abbrev-or-complete()
{
	expand-pipe-abbrev || expand-word-abbrev || zle complete-word
}

zle -N expand-my-abbrev-or-complete
bindkey "^I" expand-my-abbrev-or-complete

特定のファイルを補完対象にする

zstyle ':completion:*:g++:*' file-patterns '*.(cpp|h):c++\ files *(-/):directories'

.cpp, .h とディレクトリも補完対象にしている例。

特定のファイルを補完対象から外す

# サフィックスが該当するファイルを外す
fignore=(CVS .class)
# ignored-patterns を使うと細かい制御が可能
zstyle ':completion:*:(all-|)files' ignored-patterns '(|*/)CVS' '*.class'
zstyle ':completion:*:cd:*' ignored-patterns '(|*/)CVS'

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-02-20 (火) 20:44:03 (3898d)