zsh 탭 완성에서 파일 이름 구분 기호로 콜론 사용

zsh 탭 완성에서 파일 이름 구분 기호로 콜론 사용

파일 이름 인수를 하나(또는 그 이상)로 사용하는 여러 프로그램이 있습니다.

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완료 후: 예상대로 작동합니다.

나는 다음과 같은 이유로 더 나은 방법이 있을 수 있다고 생각합니다.

  1. 이 명령은 접두사가 없는 파일 이름도 사용하기 때문에 이상한 if/else 절이 있습니다.

  2. 이런 종류의 매개변수를 사용하는 명령이 많기 때문에 각 명령의 이름을 추가해야 합니다. 가능하다면 모든 명령어에 적용하고 싶습니다. 더 쉬운 경우 모든 명령에 이를 적용할 수도 있습니다.

--

필요하신 분들을 위해 이제 좀 더 쉬운 방법을 찾았습니다. .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

관련 정보