Zsh-Tab-Vervollständigungen funktionieren für Teilpfade nicht wie gewünscht

17

Ich möchte, dass bei Dateien und Verzeichnissen die Groß- und Kleinschreibung nicht berücksichtigt wird zsh. Nach ein paar Stunden Lesen des Handbuchs habe ich mir Folgendes ausgedacht:

zstyle ':completion:*:*:*:*:globbed-files' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:local-directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'

Außerdem möchte ich TABeinmal drücken , um mögliche Abschlüsse anzuzeigen, und nur ändern, was ich eingegeben habe, wenn es genau einen Abschluss gibt. Wenn TABich dann ein zweites Mal drücke, sollte ich in den Modus "Menü vervollständigen" wechseln. Basierend auf den Handbüchern habe ich Folgendes gefunden:

zstyle ':completion:*' menu select

Jetzt funktioniert alles wie es sollte, außer in einem Fall. Ich habe zwei Ordner Desktopund .rstudio-desktopin meinem Home-Verzeichnis. Da ich das setopt globdotsgetan habe , erwarte ich Folgendes:

$ cd ~/dktop<TAB>

mein Befehl wie eingegeben und angezeigt werden als Vervollständigungskandidaten zu verlassen Desktopund .rstudio-desktop. Stattdessen wird es entfernt dktop , sodass ich Folgendes erhalte:

$ cd ~/

Ich habe mir alle relevanten Handbücher, Anleitungen, Stapelaustauschfragen und verschiedene andere Quellen angesehen. Aber was auch immer ich tue, ich kann das nicht zum Laufen bringen.

Interessanterweise funktioniert alles wie erwartet , wenn ich mich im Home-Verzeichnis befinde und Folgendes eingebe:

$ cd dktop<TAB>

Das heißt, es ist nur ein Problem mit nicht führenden Pfadsegmenten (und Sie können sehen, C-x hdass dies dem directoriesTag und nicht dem verwendeten local-directoriesTag entspricht).

Um die Reproduzierbarkeit zu vereinfachen, wird hier eine ~/.zshrcBeschreibung der oben beschriebenen Situation und des Verhaltens aufgeführt (getestet auf einer neuen virtuellen El Capitan-Maschine mit zshvon Homebrew).

Radon Rosborough
quelle
Kann nicht reproduzieren. zsh 5.3.1auf Arch Linux. cd ~/dktop<tab>Ausbeuten cd ~/Desktop.
PythonNut
@PythonNut Unter zsh 5.3.1OS X reproduziert sich das Problem. Es ist interessant, dass es einen Unterschied zwischen den Betriebssystemen gibt.
Radon Rosborough
1
@PythonNut Ich wette, das liegt daran, dass bei Linux die Groß- und Kleinschreibung beachtet wird und bei macOS die Groß- und Kleinschreibung nicht berücksichtigt wird.
Radon Rosborough
Nur als freundliche Erinnerung, dass nicht alle Macs / macOS zwischen Groß- und Kleinschreibung unterscheiden, hängt es davon ab, ob Ihre Festplatte zwischen Groß- und Kleinschreibung unterscheidet oder nicht.
Konqui

Antworten:

1

Eine mögliche Lösung ist:

bindkey "^I" expand-word

Dadurch wird die Registerkarte ~/auf den absoluten Pfad erweitert.

Verstopfter Ninja
quelle
Vielleicht fehlt mir etwas, aber ich verstehe nicht, wie dies in irgendeiner Weise mit der Vervollständigung von Tabs oder der Lösung des oben beschriebenen Problems zusammenhängt. Wenn ich das tue, was Sie vorschlagen, drücke ich die Tabulatortaste cd /Users/raxod502/dktop, und die Vervollständigung ist deaktiviert.
Radon Rosborough
@RadonRosborough Die Hoffnung war, dass durch die Erweiterung ~/auf den absoluten Pfad die Fuzzy-Vervollständigung funktionieren würde. Es schien einer der Fälle zu sein, in denen das Problem darin besteht, dass es einmal ausgewertet wird, aber Sie es tatsächlich zweimal auswerten müssen, um zu funktionieren. Wenn Sie also den absoluten Pfad anstelle von haben, ~/würde dies bedeuten, dass Sie nur eine Auswertung benötigen. Aber Mist, es tut mir leid, ich habe vergessen, dass bindkey alte Bindungen ersetzt, und ich kann nichts finden, was besagt, ob es überhaupt möglich ist, zwei Funktionen an eine Taste zu binden. Funktioniert Ihre Vervollständigung ohne meinen Bindkey wie vorgesehen, wenn absolute Pfade angegeben werden?
Verstopfte Ninja
Nein. Es spielt keine Rolle, ob der Eingabepfad ~/dktopoder ist /Users/raxod502/dktop. das ergebnis ist das selbe, nämlich das dktopgelöscht wird wenn ich die tabulatortaste drücke.
Radon Rosborough