私は持っていますカスタムZsh機能g
:
function g() {
# Handle arguments [...]
}
ここでは、Gitコマンドを実行するための短い引数を処理します。たとえば、
g ls # Executes git ls-files ...
g g # Executes git grep ...
Gitの短いパラメータルールでオートコンプリートルールを設定できるはずですが、どうすればいいかわかりません。
たとえば、次のパラメータを提供するg ls <TAB>
タブを含むルールを完成させる必要があります。git ls-files <TAB>
git ls-files
$ g ls --<TAB>
--abbrev -- set minimum SHA1 display-length
--cached -- show cached files in output
--deleted -- show deleted files in output
# Etc...
カスタムショートコマンドをGitコマンドにマッピングするg
ため、これはオートコンプリートに設定されていません。git
答え1
私は/usr/share/zsh/functions/Completion/Unix/_git
このようなエイリアスに関するいくつかのヒントを見つけ、エイリアスに対して次の関数を定義しました。
_git-ls () {
# Just return the _git-ls-files autocomplete function
_git-ls-files
}
それから直線でcompdef g=git
。たとえば、オートコンプリートシステムはユーザーが実行中であることを確認し、g ls
オート_git-ls
コンプリート機能を使用します。
私を正しい方向に案内してくれたuser67060に感謝します。
答え2
私は非常に似たようなことをしなければならなかったので、おおよその問題は解決します。
_g () {
case "${words[2]}" in
ls) words[1,2]=(git ls-files);;
g) words[1,2]=(git grep);;
*) return 1;;
esac
_git # Delegate to completion
}
compdef _g g
$CURRENT
1つの注意点は、パラメータの数を変更するときに変数も調整する必要があることです。
答え3
これが私がやろうとしていることです。
_tg () {
local _ret=1
local cur cword prev
cur=${words[CURRENT]}
prev=${words[CURRENT-1]}
cmd=${words[2]}
let cword=CURRENT-1
case "$cmd" in
ls)
emulate ksh -c _git_ls_files
;;
g)
emulate ksh -c _git_grep
;;
esac
let _ret && _default && _ret=0
return _ret
}
compdef _tg tg
しかし、これはzshではなくGitを使用して完了します。
https://git.kernel.org/cgit/git/git.git/tree/contrib/completion/git-completion.zsh