일부 사용자 정의 개미 매개변수에 대해 자동 완성을 추가하려고 합니다. 그러나 이는 내가 유지하려는 기존 oh my zsh ant 플러그인 자동 완성 기능을 재정의하는 것 같습니다. 내 zsh 플러그인이 내 사용자 정의 개미 자동 완성 기능과 조화롭게 작동하도록 하는 쉬운 방법이 있습니까?
기존 플러그인입니다~/.oh-my-zsh/plugins/ant/ant.plugin.zsh
_ant_does_target_list_need_generating () {
[ ! -f .ant_targets ] && return 0;
[ build.xml -nt .ant_targets ] && return 0;
return 1;
}
_ant () {
if [ -f build.xml ]; then
if _ant_does_target_list_need_generating; then
ant -p | awk -F " " 'NR > 5 { print lastTarget }{lastTarget = $1}' > .ant_targets
fi
compadd -- `cat .ant_targets`
fi
}
compdef _ant ant
내 자동완성 시간은~/my_completions/_ant
#compdef ant
_arguments '-Dprop=-[properties file]:filename:->files' '-Dsrc=-[build directory]:directory:_files -/'
case "$state" in
files)
local -a property_files
property_files=( *.properties )
_multi_parts / property_files
;;
esac
이것은 내 것입니다 $fpath
. 내 완료 경로가 목록의 앞에 있으므로 내 스크립트가 우선순위를 갖는 것 같습니다.
/Users/myusername/my_completions /Users/myusername/.oh-my-zsh/plugins/git /Users/myusername/.oh-my-zsh/functions /Users/myusername/.oh-my-zsh/completions /usr/local/share/zsh/site-functions /usr/share/zsh/site-functions /usr/share/zsh/5.0.8/functions
답변1
가장 좋은 방법은 완성 기능을 확장하는 것이라고 생각합니다. 다음을 수행할 수 있습니다. https://unix.stackexchange.com/a/450133
먼저 기존 함수의 이름을 찾아야 합니다. 이를 위해 _complete_help
CTRL-h(또는 다른 단축키)를 바인딩한 다음 명령을 입력하고 완성 함수를 찾을 수 있습니다. 다음은 git에서 실행하는 예입니다.
% bindkey '^h' _complete_help
% git [press ctrl-h]
tags in context :completion::complete:git::
argument-1 options (_arguments _git)
tags in context :completion::complete:git:argument-1:
aliases main-porcelain-commands user-commands third-party-commands ancillary-manipulator-commands ancillary-interrogator-commands interaction-commands plumbing-manipulator-commands plumbing-interrogator-commands plumbing-sync-commands plumbing-sync-helper-commands plumbing-internal-helper-commands (_git_commands _git)
이 경우 완성 함수는 입니다 _git
. 다음으로 .zshrc
다음과 같이 재정의 할 수 있습니다 .
# Call the function to make sure that it is loaded.
_git 2>/dev/null
# Save the original function.
functions[_git-orig]=$functions[_git]
# Redefine your completion function referencing the original.
_git() {
_git-orig "$@"
...
}
compdef
이미 함수에 바인딩되어 있고 함수 정의만 변경했으므로 다시 호출할 필요가 없습니다 .