как "скопировать" существующие дополнения в другие команды в zsh - PullRequest
3 голосов
/ 18 февраля 2012

У меня есть собственный скрипт, который принимает имена хостов в качестве параметров.Я знаю, что могу легко скопировать существующее завершение ssh следующим образом:

compdef myscript=ssh

Но это позволяет только завершение первого параметра.Есть ли простой способ включить одно и то же завершение для всех параметров?

1 Ответ

1 голос
/ 18 мая 2012

Мне не известен метод easy , позволяющий завершить выполнение пользовательской команды. Предполагая, что у вас есть команда foo с кучей допустимых аргументов bar, bas или baz, тогда завершение легко: вы можете иметь либо foo bar, foo bas или foo baz. Если они не or, вы могли бы иметь любую комбинацию из трех.

Несколько хуже становится, когда у вас есть «глубина» больше 1 (например, bar может принимать аргументы car, cas и caz).

В zsh мое общее понимание состоит в том, что завершение команд подробно описано в completion functions. Эти функции специфичны для приложения , поскольку аргументы для каждого приложения специфичны для этих приложений. Например, tmux (терминальный мультиплексор, похожий на screen, если вы не знакомы) имеет довольно сложную функцию завершения: вот ссылка .

Если вы хотите написать свои собственные функции завершения, документация доступна и доступна. Вот несколько ссылок, по которым я (медленно) прорабатываю свой путь - они определенно скажут вам, как получить завершение работы, но есть много чтения. Z-Shell - сложный зверь.

Вы особенно заинтересованы в том, чтобы включить завершение для аргументов, подобных имени хоста, и вы выделили ssh в качестве идеи. Функция завершения zsh для ssh определена в Completion/Unix/Command/_ssh, если у вас есть источник ZSH. Если нет, вот ссылка .


Конечно, этот вопрос довольно похож. Один compdef может делать то, что вы хотите, если параметры myscript и ssh достаточно идентичны.

...