Domyślnie silnik uzupełniający zsh próbuje tylko dołączyć coś do tego, co wpisujesz. Skonfigurowałeś go tak, aby również próbował dodać prefiks. Prosty interaktywny silnik konfiguracji uzupełniania ( compinstall) oferuje to pod „kontrolą dopasowania → uzupełnianiem podciągu”. Powoduje to wstawienie takiego wiersza do .zshrc:
zstyle ':completion:*' matcher-list '' 'l:|=* r:|=*'
Te zstylezestawy wbudowane (w większości) Ustawienia zakończenia. Styl matcher-listukończenia to lista sposobów, w jakie można spróbować po kolei, zatrzymując się, gdy jest co najmniej jedno dopasowanie. Pusty ciąg oznacza domyślne zakończenie (tylko przyrostki). Do sterowania dopasowanie Incantation l:|=* r:|=*środki spróbować dopasowanie prefiksu *i sufiksu dopasowania *, tj jakikolwiek prefiks i sufiks.
Możesz zabronić używania prefiksów, które zaczynają się _całkowicie. Nadal umożliwia to uzupełnianie słów zaczynających się od _i uzupełnianie przez dodanie prefiksu, ale prefiks może nie zaczynać się _.
zstyle ':completion:*' matcher-list '' 'l:|=[^_]* r:|=*'
Dotyczy to wszystkich uzupełnień, a nie tylko uzupełnień nazw poleceń. Nie wiem, jak ograniczyć to do nazw poleceń.
Powinien istnieć sposób dokładniejszego wykluczania nazw poleceń rozpoczynających się od _, ale nie wiem jak. Pierwszym początkiem jest ignored-patternsstyl ukończenia.
zstyle ':completion:*:*:-command-:*:*' ignored-patterns '_*'
Wyklucza to mecze rozpoczynające się od _; Jeśli jednak nie ma żadnych dopasowań, zsh próbuje ponownie bez reguł ignorowania. Zaletą tego jest to, że jeśli polecenie rozpoczęło się od podkreślenia w pierwszej kolejności, zostanie wykonane w drugim przebiegu. Złe jest to, że w ten sposób będzie starał zsh dodanie podkreślenia w każdym razie, jeśli nie znaleziono żadnego meczu, więc jeśli masz vi, a viewjednak nie vimwtedy, naciskając Tabpo viofercie znajdą via viewjednak nie _vim, ale jeśli wpiszesz vimnastępnie ukończenie będzie oferować _vim.