2

現在の zsh セッションのスニペットの例を次に示します。

llama@llama:...Code/cpp/KingOfTheCode$ make
clang++ -std=c++11 -Iinclude src/*.cpp kothsrc/*.cpp -pthread -o KingOfTheCode
llama@llama:...Code/cpp/KingOfTheCode$ ./
Completing executable file or directory
include/        KingOfTheCode*  kothsrc/        src/

(オートコンプリート用に a .、 a /、そして文字を入力しました。)Tab

入力したときにzshがディレクトリを提案するのはなぜ./<tab>ですか? 明らかにファイルを実行したいのですが、サブディレクトリで何かを実行したい場合、その./部分は役に立たないでしょう。

この厄介な動作が発生しないようにするにはどうすればよいですか? 明確にするために、私の望ましい動作は、オートコンプリートが./<...>ディレクトリを除外し、実行可能ファイルのみを検索することです。

4

1 に答える 1

3

compinitのどこかにあると思い~/.zshrcます。

zstyle次のようにして、完了結果を制限できます。

zstyle -e ':completion::complete:-command-::executables' ignored-patterns '
  [[ "$PREFIX" == ./* ]] && { reply=(./*(/)) }
'

これにより、入力してから を押すと、zstyle エントリが追加されignored-patternsます。上段はカレントディレクトリ内のディレクトリを示します。その結果、「実行可能ファイルまたはディレクトリ」を完了すると、サブディレクトリは完了結果から削除されます。./<...>Tab./*(/)


ignored-patterns一致する補完がない場合に影響を与え ずに補完結果を元に戻したい場合は、次のように補完を追加できます_ignored

# this is same as the zsh default behavior though.
zstyle ':completion:*' completer _complete _ignored

この場合、./koTab⇒と入力して、無視されたサブディレクトリを完成させる必要があります./koshsrc/


更新: 2014 年 12 月 29 日月曜日 21:30:37 +0900 (@Francisco さん、ご提案ありがとうございます) 名前文字
列にスペースが含まれるディレクトリをスキップするように教えてください。

zstyle -e ':completion::complete:-command-::executables' ignored-patterns '
  [[ "$PREFIX" == ./* ]] && {
    local -a tmp; set -A tmp ./*(/)
    : ${(A)tmp::=${tmp// /\\ }}
    reply=(${(j:|:)tmp})
  }
'
于 2014-12-25T02:52:30.597 に答える