위치 인수는 한 번만 완료하세요.

위치 인수는 한 번만 완료하세요.

gsSSH 호스트 이름을 첫 번째 인수로 사용하고 임의 문자열을 두 번째 인수로 사용하는 명령( )의 완성을 작성하려고 합니다 .

나는 기본 SSH 완성에서 이것을 훔쳤습니다.

# Load completions shared by various ssh tools like ssh, scp and sftp.
__fish_complete_ssh ssh
# Also retrieve `user@host` entries from history
function __ssh_history_completions
    history --prefix ssh --max=100 | string replace -rf '.* ([A-Za-z0-9._:-]+@[A-Za-z0-9._:-]+).*' '$1'
end

나는 이것을 사용하여 내 명령의 매개변수를 완성합니다 gs.

complete -c gs -d Remote -xa "(__fish_complete_user_at_hosts)"
complete -c gs -d Remote -ka '(__ssh_history_completions)'

이것은 작동하지만 SSH 호스트 이름을 완성합니다.두 가지 인수:

  • 를 입력하면 gs <tab>fish가 SSH 호스트 이름을 올바르게 입력합니다.
  • 를 입력하면 gs somehost <tab>fish가 SSH 호스트 이름을 다시 잘못 완성합니다(이 매개변수는 완성되어서는 안 되며 임의의 문자열입니다).

이 완료가 영향을 미치도록 하려면 어떻게 해야 합니까?첫 번째내 명령에 대한 위치 매개변수?

답변1

--condition도우미 기능과 함께 또는 -n옵션을 사용하세요 .complete__fish_is_first_arg

complete -c gs -d Remote -xa "(__fish_complete_user_at_hosts)" -n '__fish_is_first_arg'

관련 정보