Zsh auto complete sugeruje pełne funkcje (_git _vim itp.)

9

Jestem trochę irytujący tym, jak zshrobi się kompletne sugestie dotyczące moich poleceń.

Jeśli wpiszesz początek polecenia, którego nie zainstalowałem i naciśnie tabgo, zasugeruje zainstalowaną funkcję uzupełniania.

Powiedzmy, że chcę wykonać, vimale nie jest zainstalowany, to zasugeruje _vim.

Czy można to wyłączyć? A może zrobiłem coś złego w mojej konfiguracji?

Wszystkie moje pliki dot są publiczne w github.com/henrikbjorn/castle.

Henrik Bjørnskov
źródło
Widziałem to wcześniej, ale w mojej obecnej konfiguracji nie wydaje się, aby było obecne. Niestety nie mam pojęcia, które z moich ustawień zmieniły to zachowanie.
Dostosowanie

Odpowiedzi:

8

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.

Gilles „SO- przestań być zły”
źródło
Dzięki wydaje się, że działa, wykonując jedno z określonych przez Ciebie rozwiązań, a także nauczyłem się sporo o tym, jak to działa.
Henrik Bjørnskov
2
Rozwiązanie z ignore-patternsdziała dla mnie dobrze, nawet jeśli nie ma żadnych dopasowań. Musiałem tylko upewnić się, że completernie zawiera _ignored.
Adaephon