3

Одной из моих любимых функций zsh является автозаполнение, особенно когда я заполняю имя файла на сетевом компьютере. Но как включить подстановочные знаки (например, *) и сделать их автозаполнение с удаленной машины?

Например, скажем, у меня есть file1, file2 и file3, находящиеся на сервере; Я хочу скопировать все эти файлы на мой локальный компьютер, поэтому я ввожу

scp server:~/fi<tab>

зш то правильно автозаполняется до

scp server:~/file

но потом, когда я пытаюсь подстановочный знак

scp server:~/file*<tab>

все, что он делает, это звуковой сигнал у меня (он работает правильно, если пути к файлам являются локальными). Есть ли набор опций Zsh, который делает эту работу?

2 ответа2

0

Думаю, установка GLOB_COMPLETE должна изменить это.

setopt GLOB_COMPLETE

От man zshoptions:

GLOB_COMPLETE

Когда текущее слово имеет шаблон glob, не вставляйте все слова, являющиеся результатом расширения, но генерируйте совпадения, как для завершения, и просматривайте их, как MENU_COMPLETE. Совпадения генерируются так, как если бы '*' был добавлен в конец слова или вставлен в курсор при установке COMPLETE_IN_WORD. Это на самом деле использует сопоставление с шаблоном, а не сглаживание, поэтому оно работает не только для файлов, но и для любого завершения, такого как параметры, имена пользователей и т.д.

Обратите внимание, что при использовании сопоставителя шаблонов элемент управления сопоставлением (например, сопоставление без учета регистра или привязка привязки) не может использоваться. Это ограничение применяется только тогда, когда текущее слово содержит шаблон; простое включение опции GLOB_COMPLETE не имеет этого эффекта.

0

По любой причине вы должны экранировать символ glob при использовании в удаленном пути в scp/ssh.

scp server:~/file\*<tab>

Это также верно, если вы хотите, скажем, просмотреть кучу файлов, используя глоб (а не делать глобальное завершение), например

scp server:~/files/project.\* ~/localdir

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .