zsh автозаповнення шаблону в мережі


3

Одна з моїх улюблених функцій zsh - це автозаповнення, особливо коли я заповнюю ім'я файлу на мережевій машині. Але як ви включаєте символи символів (наприклад, *), і чи має він автозаповнення з віддаленого комп'ютера?

Наприклад, скажіть, що у мене є файл1, файл2 і файл3, що знаходяться на сервері; Я хочу скопіювати всі ці файли на локальну машину, тому я ввійду

scp server:~/fi<tab>

Після цього zsh правильно завершує роботу

scp server:~/file

але тоді, коли я намагаюся до шаблону

scp server:~/file*<tab>

все це робить це звуковим сигналом на мене (він працює правильно, якщо шляхи до файлу є локальними). Чи є набір опцій zsh, що робить цю роботу?

Відповіді:


0

Подумайте про налаштування GLOB_COMPLETE.

setopt GLOB_COMPLETE

Від man zshoptions:

GLOB_COMPLETE

Коли поточне слово має шаблон, не вставляйте всі слова, отримані в результаті розширення, але генеруйте збіги як для завершення, а циклічно перебирайте їх, як MENU_COMPLETE. Збіги генеруються так, як якщо б "*" додано до кінця слова, або вставлено на курсор, коли встановлено COMPLETE_IN_WORD. Це фактично використовує відповідність шаблонів, а не глобування, тому він працює не тільки для файлів, але і для будь-якого завершення, наприклад, параметри, імена користувачів і т.д.

Зверніть увагу, що коли використовується шаблон збірки, не можна використовувати відповідний контроль (наприклад, нечутливий до регістру або закріплений збіг). Це обмеження застосовується лише тоді, коли поточне слово містить шаблон; просто включення опції GLOB_COMPLETE не має такого ефекту.


0

З будь-якої причини, ви повинні уникнути символу glob при використанні у віддаленому шляху у scp / ssh.

scp server:~/file\*<tab>

Це також вірно, якщо ви хочете, скажімо, scp над групою файлів, використовуючи glob (замість того, щоб виконувати глобальне завершення), наприклад,

scp server:~/files/project.\* ~/localdir
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.