Jak naprawić uzupełnianie tabulacji, aby nie ukrywało wpisów?

17

Używam oh-my-zsh na Mac OS X z homebrew'ed zsh 4.3.12. Ostatnio natknąłem się na dziwny problem. W scripts/not-usedMam kilka .Rplików:

breakdowns.R             eventloop.R              process-largeclients.R   process-qt.R
reprocess-pinning.R      calculate-qt-error.R     generate_decision_tree.R process-net.R
process-scalingexp.R

Jednak gdy próbuję ls scripts/not-used/+, Tabpierwsze zakończenie jest ls scripts/not-used/_.Rtam, gdzie _reprezentuje pozycję kursora. Jeśli Tabponownie nacisnę, otrzymam to dziwne zakończenie:

$ ls scripts/not-used/.R                                                                          
breakdowns.R  eventloop.R

Jak usunąć to brzydkie (złe) zachowanie?

Ustawione opcje to:

alwaystoend autocd autonamedirs autopushd cdablevars completeinword
correctall extendedglob extendedhistory noflowcontrol
histexpiredupsfirst histignoredups histignorespace histreduceblanks histverify
incappendhistory
interactive login longlistjobs monitor promptsubst 
pushdignoredups pushdminus pushdsilent pushdtohome
sharehistory shinstdin zle
Nikola Knezevic
źródło
2
jak breakdowns.R eventloop.Rnieprawidłowe uzupełnienie? Spróbuj odznaczyć completeinwordopcję, ponieważ pozwala to na zakończenie z obu końców kursora, z lewej i prawej strony. Oznacza to, że jeśli wpiszesz pacjako in pacman, a zostanie wywołane polecenie arpac, arpacpojawi się na liście uzupełnień, ponieważ uzupełnianie następuje po obu stronach kursora zamiast tylko po prawej stronie.
Alexej Magura
Nie zdawałem sobie sprawy z pytania ... Więc breakdowns.R eventloop.Rjest to niepoprawne uzupełnienie w sensie niekompletności. Jeśli przyjrzysz się uważnie liście plików, jest ich więcej niż tylko 2, na końcu .R.
Nikola Knezevic
Próbowałem dotknąć istnienia kilku plików o tych samych nazwach, co te wymienione, a także zR, az, .R i z_test.R do celów testowych - z_test.R nie pojawiłby się podczas próby jego automatycznego uzupełnienia, ale z, .R by. Zgaduję, że to jakaś wpadka typu regex
Dmitri DB
Może to być związane z github.com/robbyrussell/oh-my-zsh/issues/1398 , co jest starym problemem, ale najnowsza wersja ma podobny kod zakończenia. Nie próbowałem obejść tego w celu potwierdzenia.
rjewell

Odpowiedzi:

1

Problem leży w liście zstylefor matcher.

Jeśli dodasz do tego .zshrc, to naprawi to:

zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'e:|[._-]=* e:|=*' 'l:|=* e:|=*'

e:(Zamiast domyślnego r:) zmusić meczu do końca łańcucha.

Szczegóły dotyczące opcji można znaleźć w dokumentach ZSH: Completion Matching Control

Gert
źródło
0

Czy zauważyłeś, gdzie umieścił kursor? Ponieważ wszystkie pliki kończą się rozszerzeniem .R, automatycznie dołącza możliwą sugestię.

Autouzupełnianie używa „obu końców” zgodnie z opisem Tshepanga.

Spróbuj upuścić plik do tego folderu bez nazwy .R, a zobaczysz, że bit .R zniknie.

Szczerze mówiąc, autouzupełnianie faktycznie potrzebuje czegoś do „uzupełnienia”, a nie ślepego założenia katalogu.

Bee Kay
źródło
0

Gert może być odpowiedni do poprawki. Podejrzewam jednak, że przyczyną niekompletności listy plików (breakdowns.R i eventloop.R) jest to, że pliki te są jedynymi plikami w bieżącym katalogu roboczym, które są oznaczone jako pliki wykonywalne. Możesz to potwierdzić za pomocą „ls -l” i spojrzeć na uprawnienia dla czegoś takiego jak rwx. Jeśli nie masz „./” lub tego katalogu wyraźnie w PATH, oczekiwałbym, że te dwa pliki też się nie pojawią.

 8 -rwxr--r-- 1 userbob    groupbob      4420 May 28 15:55 filebob.R
Wolter
źródło