Wie behebe ich die Tab-Vervollständigung, damit keine Einträge ausgeblendet werden?

17

Ich verwende oh-my-zsh unter Mac OS X mit homebrew'ed zsh 4.3.12. Ich bin kürzlich über ein seltsames Problem gestolpert. In scripts/not-usedich habe mehrere .RDateien:

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

Wenn ich jedoch ls scripts/not-used/+ versuche, steht Tabdie erste Vervollständigung ls scripts/not-used/_.Rfür _die Cursorposition. Wenn ich Taberneut drücke , erhalte ich diese seltsame Vervollständigung:

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

Wie kann man dieses hässliche (falsche) Verhalten aufheben?

Die Optionen, die festgelegt werden, sind:

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
quelle
2
Wie ist die breakdowns.R eventloop.Rfalsche Vervollständigung? Deaktivieren Sie die completeinwordOption, da dies die Vervollständigung an beiden Enden des Cursors (links und rechts) ermöglicht. Das heißt, wenn ich pacwie folgt eingebe pacmanund ein Befehl aufgerufen wird arpac, arpacwird er in der Liste der Vervollständigungen angezeigt, da die Vervollständigung nicht nur rechts, sondern auf beiden Seiten des Cursors erfolgt.
Alexej Magura
Mir war die Frage nicht bewusst ... Also, breakdowns.R eventloop.Rist eine falsche Vervollständigung, im Sinne der Unvollständigkeit. Wenn Sie sich die Liste der Dateien genau ansehen, gibt es mehr als nur diese 2, die mit enden .R.
Nikola Knezevic
Ich habe versucht, eine Reihe von Dateien mit denselben Namen wie die von Ihnen aufgelisteten sowie einen zR, einen az, einen .R und einen z_test.R zu Testzwecken in die Existenz zu bringen. aber z, .R würde. Ich schätze, es ist eine Art Regex-Missgeschick
Dmitri DB
Dies kann mit github.com/robbyrussell/oh-my-zsh/issues/1398 zusammenhängen. Dies ist ein altes Problem, aber die neueste Version hat einen ähnlichen Beendigungscode. Ich habe nicht versucht, Workarounds zu bestätigen.
rjewell

Antworten:

1

Das Problem liegt bei der zstylefor-Matcher-Liste.

Wenn Sie Folgendes hinzufügen .zshrc, wird es behoben:

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

Die e:(anstelle der Standardeinstellung r:) erzwingt die Übereinstimmung mit dem Ende der Zeichenfolge.

Die Details zu den Optionen finden Sie in den Dokumenten zu ZSH: Completion Matching Control

Gert
quelle
0

Hast du gemerkt, wo es deinen Cursor hinführt? Da alle Dateien mit .R enden, wird der mögliche Vorschlag automatisch an Sie angehängt.

Die Autovervollständigung verwendet "beide Enden", wie von Tshepang beschrieben.

Wenn Sie versuchen, eine Datei ohne den Namen .R in diesen Ordner abzulegen, wird das Bit .R ausgeblendet.

Ehrlich gesagt, Autocomplete benötigt tatsächlich etwas, um eine blinde Verzeichnisannahme "zu vervollständigen".

Bee Kay
quelle
0

Gert kann für die Verlegenheit gut recht sein. Ich vermute jedoch, dass der Grund für die Unvollständigkeit der Dateiliste (breakdowns.R und eventloop.R) darin besteht, dass diese Dateien die einzigen Dateien im aktuellen Arbeitsverzeichnis sind, die als ausführbar markiert sind. Sie können dies mit einem "ls -l" bestätigen und sich die Berechtigungen für so etwas wie rwx ansehen. Wenn Sie nicht "./" oder dieses Verzeichnis explizit in PATH haben, würde ich erwarten, dass diese beiden Dateien auch nicht erscheinen.

 8 -rwxr--r-- 1 userbob    groupbob      4420 May 28 15:55 filebob.R
Voltaire
quelle