За замовчуванням двигун завершення zsh лише намагається додати щось до введеного тексту. Ви налаштували його, щоб спробувати також додати префікс. Простий двигун конфігурації інтерактивного завершення ( compinstall) пропонує це в розділі "відповідне управління → завершення підрядки". Це вставляє такий рядок у ваш .zshrc:
zstyle ':completion:*' matcher-list '' 'l:|=* r:|=*'
У zstyleвбудованих наборах ( в основному) настройка завершення. Стиль matcher-listзавершення - це перелік способів спробувати послідовно, зупиняючись, коли є хоча б одна відповідність. Порожній рядок означає завершення за замовчуванням (лише суфікси). У контроль відповідності INCANTATION l:|=* r:|=*засіб спробувати відповідність префіксів *і суфіксів відповідності *, тобто будь-який префікс і суфікс.
Ви можете заборонити префікси, які починаються _взагалі. Це все ще дозволяє завершити слова, які починаються з _, і завершити додаванням префікса, але префікс може не починатися з _.
zstyle ':completion:*' matcher-list '' 'l:|=[^_]* r:|=*'
Це стосується всіх доповнень, а не лише виконань назв команд. Я не знаю, як обмежити це іменами команд.
Повинен бути спосіб більш точно виключити імена команд, які починаються з цього _, але я не знаю як. Перший початок - із ignored-patternsстилю завершення.
zstyle ':completion:*:*:-command-:*:*' ignored-patterns '_*'
Це виключає сірники, які починаються з _; однак, якщо немає відповідностей, zsh намагається знову без правил ігнорування. Добре в тому, що якщо команда розпочалася з підкреслення в першу чергу, вона буде виконана в цьому другому проході. Погана частина є те , що ЗШ, таким чином , спробуйте додати підкреслення в будь-якому випадку , якщо немає збігів, тому якщо у вас є viі , viewале не vimпотім , натиснувши Tabпісля viзапропонує viі , viewале не _vim, але якщо ви друкуєте , vimто завершення буде пропонувати _vim.