2013-05-31 1 views
1

Программа, которую я пытаюсь запустить, принимает форму program_name --arg=/some/path/goes/here, но zsh не может выполнить табуляцию на этом пути, когда она находится в флаге аргумента. В конце концов мне нужно ввести progra<TAB> /so<TAB>/pa<TAB>..., чтобы завершить путь, а затем вернуться, чтобы добавить часть команды --arg=. Есть ли более эффективный способ сделать это?Почему zsh теряет автозаполнение для путей к файлу, когда я нахожусь в флагом и как я могу его вернуть?

ответ

0

Скорее всего, zsh все еще пытается выполнить завершение файла в вашей ситуации, это просто считается, что --arg= является начальной частью имени файла, заставляя его не находить совпадений. Поскольку нет универсальных правил для того, как команды будут интерпретировать свои аргументы, самым безопасным вариантом является то, что оболочка не делает никаких предположений об этих аргументах.

Многие команды, использующие этот тип синтаксиса, будут работать одинаково, если вы используете пробел, а не знак =, такой как program_name --arg /some/path/goes/here. Поскольку это будет отдельный аргумент, оболочка должна иметь возможность выполнять завершение файла без проблем.

В зависимости от того, как вы настроили zsh, он также может использовать setopt MAGIC_EQUAL_SUBST. Обычно я устанавливаю этот параметр и получаю поведение, которое вы ищете, но получайте то поведение, которое вы сейчас испытываете, если я отключу этот параметр. Но если я использую zsh -f, чтобы пропустить загрузку моей конфигурации, просто чтобы эта опция была недостаточной, поэтому в моей конфигурации было что-то еще, что было необходимо, возможно, просто включение системы завершения, которую вы, вероятно, уже сделали бы. Могут быть случаи, когда это может привести к нежелательному поведению, но за многие годы, когда я использовал zsh с этой опцией, я не сталкивался с этим.

Более сложным вариантом было бы написать функцию завершения для этой команды, которая сообщает zsh, что эта опция принимает имя файла в качестве аргумента.

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