zshは、コマンド/コンテキストに関係なく、すべてのファイルを拡張または完成します。

zshは、コマンド/コンテキストに関係なく、すべてのファイルを拡張または完成します。

zshには、状況認識の完了を実行するコマンドラインタブ補完機能があるため、次のことができます。

# Good:

$ wget g<tab>    # becomes:
$ wget gopher://

$ wget --hea<tab>    # becomes:
$ wget --header=

私はこの機能が好きですが、zshが他のものがより適切であると思う状況でファイル名を完成させないことがあります。

# Bad:

$ file vs-debug.apk
vs-debug.apk: Zip archive data, at least v2.0 to extract
$ adb push v<tab>     # becomes:
$ adb push version

(基本ウィジェット)^Iにバインドしました。expand-or-complete私が望むのは、フィルタリングされていないファイル名拡張を実行する別のキーを持つことです。たとえば、次のようになります。

# Desired behaviour:

$ adb push v<shift-tab>     # would become:
$ adb push vs-debug.apk

私は何も見えなかったジャシラー(1)うまくフィットしたようですが、次のような別のウィジェットを試してみました。

  • expand-or-complete-prefix
  • menu-expand-or-complete
  • expand-cmd-path
  • expand-word

状況認識完了を失いたくありません。フィルタリングされていないファイル名の拡張/完成を実行するために代替キーバインディングを使用する方法についてのアイデアはありますか?

私はzsh 5.0.2(x86_64-apple-darwin12.4.0)とzsh 4.3.17(i686-pc-linux-gnu)を使用しています。

答え1

組み込みウィジェットはありませんが、ウィジェットを定義するのは簡単です。私はあなたが「新しいスタイル」完成システム(によってロードされたcompinit)を使用していると仮定します。

_complete_files () {
  eval "$_comp_setup"
  _main_complete _files
}
compdef -k _complete_files complete-word '^X/'

完了機能は、zshディストリビューションで定義されている機能に従いますCompletion/Base。これcompdef組み込みは関数を完成ウィジェットとして宣言し、それをキーにバインドします。

答え2

より良いアプローチは、zshに適切な完了を実行させることです。見てzsh 完了。様々なプログラムの総集合です。完成したものもありますadb

関連情報