私は最近bashからzshに切り替えました。 1つの違いは、bashにコマンドを入力してEsc-*(vi編集モードで)を実行すると、bashがすぐにglobインラインを拡張することです。たとえば、次のように入力すると:
$ ls
bar foo1 foo2 foo3
$ cp foo<Esc>*
bashはコマンドを次のように変更します。
$ cp foo1 foo2 foo3
行末にカーソルを置くと、挿入モードに戻ります。 zshに同じことをするにはどうすればよいですか?
ベストアンサー1
既定の構成では、次の効果が得られます。expand-word
^X *
Emacsモードでは()にバインドされていますCtrl+X *(Viモードで使用するにはキーにバインドする必要があります)。ESC *
bashとは異なり、^X *
zshは変数とコマンドの置換も拡張します。
また、デフォルト設定では、Tabワイルドカードを含む単語の後にクリックすると、その単語が一致するリストに展開されます。
あなたに選択肢があればglob_complete
Tabすべての一致を挿入するのではなく、一致をオンにして繰り返します。この場合はできます_all_matches
完成者(頼るスティーブン・チャジェラス コメント)。マニュアルのサンプルコードを引用すると、次のようになります。
setopt glob_complete
zle -C all-matches complete-word _generic
bindkey '^Xa' all-matches
zstyle ':completion:all-matches::::' completer _all_matches _complete
zstyle ':completion:all-matches:*' insert true
Tab完成ウィジェット(デフォルトとthis)と組み込みウィジェットのall-matches
違いは、expand-word
完成expand-word
コンテキストに関係なくシェルファイル名拡張を実行するのに対し、Tab完成all-matches
コンテキストはワイルドカードの処理方法を決定するために使用されることです。たとえば、次はrmdir *
すべての^X*
ファイルに展開されますが、^Xa
ディレクトリにのみ拡張されます。