GNUメイク 4.3+
オペレーティングシステム:Mac
.zshrc
ファイルに以下を追加した後、このテキストファイルのインクルードルールmake
に対してターゲットレベルでMakefile (or 'makefile')
オートコンプリートを作成できました。
zstyle ':completion:*:*:make:*' tag-order 'targets'
autoload -U compinit && compinit
ただし、コマンドをサブファイルにグループ化してinclude *.mk
メカニズムを介して含めると、zsh
正しいオートコンプリートステートメントは生成されなくなります。ただトップレベルの makefile で定義されたターゲットを出力します。
正確なファイル構造:
├── install-brew
├── install-oh-my-zsh
├── install-pathogen
├── makefile
├── mk
│ ├── get.mk
│ ├── notes.mk
│ ├── setup.mk
...
そしてmakefile
:
include mk/*.mk
foo:
echo foo
bar:
echo bar
> make [tab]
生産する:
> make foo
foo bar
そしてmake get-brew
:
if [ -z `command -v brew` ]; then ./install-brew; else echo "brew detected: `command -v brew`" >&2; fi
(だからmakefileが動作しています)
zsh
makeファイルにサポートmakeファイルが含まれていても、makeファイルからカスタムターゲットの完全なリストを生成するように設定するにはどうすればよいですか?
答え1
zstyle ':completion:*:make:*:targets' call-command true
zstyle ':completion:*:*:make:*' tag-order 'targets'
レベル2のmakefile "include"の場合、これは私にとって効果的でした。 .zshrcファイルに追加するだけです。源泉:https://github.com/zsh-users/zsh-completions/issues/813#issuecomment-902592371
GNUが検出されると、make
完了呼び出しが発生し、可能な宛先のリストを決定するのに役立ちます。make -nsp --no-print-directory --always-make
make
make
昔は無条件だったけどzstyle
2001年条件付設定に変更make
これを呼び出すのは結局費用がかかり、潜在的に危険な作業になる可能性があるからです。
スタイルの説明を見つけるcall-command
ことができます。info zsh call-command
:
call-command
make
このスタイルは、一致を生成するためにコマンドを直接呼び出すと速度が遅くなるant
などの問題が発生したり、makeの場合はmakefileのジョブを実行できるなどのコマンド機能に使用されます。 「true」に設定すると、このコマンドが呼び出され、一致を生成します。このスタイルのデフォルト値は「false」です。