2013-08-08 3 views
0

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

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

Тогда я

c 

Вкладка

c ok 

Что-то работает. Тогда я вкладку после b

c ok "a b" 

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

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

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

ответ

0

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

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

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

+0

Большое спасибо! Мне не удалось пройти через новые документы для доработки. Слишком сложно для меня – alexanderkuk

Смежные вопросы