私は カスタム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
のオートコンプリートに設定するだけではありません。
私は/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に感謝します。
これは私がすることです:
_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