Завершение Zsh внутри кавычек

Вот моя функция завершения:

f()
{    
    reply=('ok')
}
compctl -K f c

Тогда я делаю

c

вкладка

c ok

Что-то работает. Затем я делаю tab после b

c ok "a b"

и ничего не происходит. Я ожидаю, что a b будет заменено на ok (как в bash).

Как я мог этого добиться?

Мне действительно нужно делать дополнения внутри кавычек. Типичный запуск моей программы выглядит так: c 'a, &b, c[d]' 'a < 1 and b == "2013"'


person alexanderkuk    schedule 08.08.2013    source источник


Ответы (1)


Это не имеет ничего общего с использованием кавычек. zsh не предлагает ok в качестве завершения во втором случае, потому что это далеко не то, что уже было введено для этого аргумента. Завершение также не будет предлагаться после c a.

zsh обычно предполагает, что то, что должно быть завершено, будет в некоторой степени связано с тем, что уже было введено, избавляя автора функции завершения от необходимости проверять совпадения. Вы можете добавить параметр -U к своей команде compctl, чтобы указать, что следует использовать весь список $reply, даже записи, которые не совпадают.

Я также должен отметить, что compctl относится к старой системе завершения zsh. Новая система завершения описана на справочной странице zshcompsys.

person qqx    schedule 08.08.2013
comment
Большое спасибо! Мне не удалось пройти через документы по завершению нового стиля. Слишком сложно для меня - person alexanderkuk; 08.08.2013