파일 이름 인수를 하나(또는 그 이상)로 사용하는 여러 프로그램이 있습니다.
path/to/file
scp:path/to/file.ext
ark:/abs/path/to/file.ext
일부 키워드 뒤에 콜론을 추가한 후 zsh 전체 파일 이름을 만들 수 있습니까?
Bash에서는 :
COMP_WORDBREAKS 변수를 추가하여 이를 수행할 수 있습니다.
Gilles 덕분에 이렇게 일할 수 있게 됐어요.
$ cat ~/.zshrc
...
function aftercolon() {
if compset -P 1 '*:'; then
_files "$expl[@]"
else
_files "$expl[@]"
fi
}
autoload -Uz compinit
compinit
compdef aftercolon hello olleh
이제 명령이 실행 hello
되고 olleh
완료 후: 예상대로 작동합니다.
나는 다음과 같은 이유로 더 나은 방법이 있을 수 있다고 생각합니다.
이 명령은 접두사가 없는 파일 이름도 사용하기 때문에 이상한 if/else 절이 있습니다.
이런 종류의 매개변수를 사용하는 명령이 많기 때문에 각 명령의 이름을 추가해야 합니다.
가능하다면 모든 명령어에 적용하고 싶습니다.더 쉬운 경우 모든 명령에 이를 적용할 수도 있습니다.
--
필요하신 분들을 위해 이제 좀 더 쉬운 방법을 찾았습니다. .zshrc 파일에 다음을 삽입하십시오.
function aftercolon() {
compset -P '*:' # strip stuff up to last :
compset -S ':*' # strip stuff after next colon
_default -r '\-\n\t /:' "$@" # do default completion on this
}
compdef aftercolon cmd1 cmd2 cmd3 cmd4
# to apply to all commands
compdef aftercolon -first- # https://superuser.com/questions/1080452/add-strings-to-zsh-tab-completion-for-all-commands-and-arguments
답변1
이것은 오래된 게시물이지만 요약하자면 .zshrc에 있습니다.
function aftercolon() {
compset -P '*:' # strip stuff up to last :
compset -S ':*' # strip stuff after next colon
_default -r '\-\n\t /:' "$@" # do default completion on this
}
compdef aftercolon -first-
이제 zsh에서 콜론 뒤에 파일 이름을 완성할 수도 있습니다.
$ scp:/path/to/somef<TAB> # now filename completion works after colon