물고기와 함께 사용할 자동 완성 스크립트를 만들려고합니다. 나는 같은 프로그램에 대한 bash 완성 스크립트를 포팅하고있다.하위 명령으로 자동 완성 스크립트 만들기
이 프로그램은 세 최고 수준의 명령이는 foo
, bar
및 baz
말 각은 각각 a
b
및 c
말, 일부 하위 명령이 있습니다.
내가보고 있어요 최상위 레벨이 자동 완성 확인 명령, 그래서 나는 그것이 하위 명령이 무엇을보고 다시 탭을 치면 그때하지만, 자동 완성 foo
납니다 f
를 입력하면, 내가 foo
를 볼 수 있다는 것입니다 나는 참고로 사용하고 bar
, baz
, a
, b
, c
하고 그냥 a
, b
해야한다, c
그 이후 git completion script 바로 작동하는 것 같다. 또한 git flow script을 참조로 사용하고 있습니다.
내가이가에 의해 자식 완료 스크립트에서 처리됩니다 생각 : 명령에 하나의 인수, 스크립트 자체가있을 경우 의미가
function __fish_git_needs_command
set cmd (commandline -opc)
if [ (count $cmd) -eq 1 -a $cmd[1] = 'git' ]
return 0
end
return 1
end
, 당신은 단지 완성을 사용할 수 있습니다; 최상위 명령을 완료하기위한 호출에 조건 (-n
)을 사용하면 올바른 일이 일어날 것이라고 생각합니다.
그러나 내가보고있는 것은 사실이 아닙니다. 그 함수를 내 스크립트로 복사하고, "git"을 적절히 변경했으며, 행운이 없었습니다.
function __fish_prog_using_command
set cmd (commandline -opc)
set subcommands $argv
if [ (count $cmd) = (math (count $subcommands) + 1) ]
for i in (seq (count $subcommands))
if not test $subcommands[$i] = $cmd[(math $i + 1)]
return 1
end
end
return 0
end
return 1
end
function __fish_git_needs_command
set cmd (commandline -opc)
set startsWith (echo "$cmd[1]" | grep -E 'prog$')
# there's got to be a better way to do this regex, fish newb alert
if [ (count $cmd) = 1 ]
# wtf, this is always false? it this the problem?
if [ $cmd[1] -eq $cmd[1] ]
return 1
end
end
return 0
end
complete --no-files -c prog -a bar -n "__fish_git_needs_command"
complete --no-files -c prog -a foo -n "__fish_git_needs_command"
complete --no-files -c prog -a a -n "__fish_prog_using_command foo"
complete --no-files -c prog -a b -n "__fish_prog_using_command foo"
complete --no-files -c prog -a c -n "__fish_prog_using_command foo"
complete --no-files -c prog -a baz -n "__fish_git_needs_command"
이 작품을 만드는 방법에 대한 어떤 제안이 많이 감사합니다 다음과 같이
다운 손질 스크립트입니다.
그래, 고마워. – Michael
위대한 예제 @terje 및 @Michael에 감사드립니다! '-f -c prog -n '__fish_prog_using_command foo'-aa',''-f -c prog -n '__fish_prog_using_command foo'-ab' 및''-f -c prog -n ''을 __fish_prog_using_command foo로 출력하는 대신에, '-ac'을 별도의 줄에 써서 공백으로 세 가지 완성을 모두 구분할 수 있다고 생각합니다.'-f -c prog -n'__fish_prog_using_command foo '-a "abc"' – yegeniy