Zsh – intelligentere Autokorrektur

Zsh – intelligentere Autokorrektur

Ist es möglich, Zsh dazu zu bringen, die Korrekturversuche von Argumenten, bei denen es sich nicht um Dateien handeln soll, durch Dateien aus dem aktuellen Verzeichnis zu unterlassen, ohne die Korrektur vollständig auszuschalten oder sie darauf zu beschränken setopt CORRECT(nur den Befehl zu korrigieren)?

Wenn beispielsweise CORRECT_ALLmit gesetzt ist setopt, geschieht Folgendes:

 gris@arefiev: ~% cd srcc 
change srcc to src-nyae? n

Soweit, gut (das Argument für cdsollte eine Datei sein). Allerdings

 gris@arefiev: ~% man zile
change zile to .zile-nyae? 

Was? Ich würde erwarten, dass es korrigiert wird, zilewenn .zilees manmit Option aufgerufen wird -C. Es versucht auch, Hostparameter von ssh, erste Argumente von sudousw. zu korrigieren, was wirklich nervig ist.

Ich muss auf eine Krücke zurückgreifen: set alias man='nocorrect man'usw. usw. für jeden betroffenen Befehl, aber das ist eindeutig nicht die beste Lösung. Ich mag CORRECTdie Krücke plus auch nicht und würde CORRECT_ALLsie einfach vorziehen CORRECT.

Zsh ist zsh 4.3.17 (x86_64-unknown-linux-gnu)eine Debian-Seite.

Aktualisieren: Hier ist mein.zshrc http://pastebin.com/67mykgRv

Antwort1

Zsh verfügt über eine große Anzahl von Vervollständigungen, aber eine kleinere Anzahl von Korrekturen. Es gibt viele Befehle, bei denen die Vervollständigung nützlich ist, aber keine Korrektur. Beispielsweise ist es nützlich, Argumente zu vervollständigen mkdir(um Verzeichnisse innerhalb vorhandener Verzeichnisse zu erstellen), aber nicht, sie zu korrigieren. Die correct_allOption ist sehr streng, da sie die Korrektur überall einschaltet. Leider gibt es keine Option zur Korrektur nur, wenn ein Satz korrekter Eingaben bereitgestellt wird.

Sie können die Korrekturen für einen bestimmten Befehl anpassen, indem Sie diecorrectionsTag, und passen Sie an, ob eine Korrektur durchgeführt werden soll, indem Sie_correctTeil dermatcher-listoder nicht. Diese werden mit demzstyleeingebaut.

Antwort2

Für mich klingt es so, als ob in Ihrer Distribution etwas fehlt. Die meisten ZSH-Implementierungen verfügen über eine große Sammlung vorkonfigurierter Vervollständigungseinstellungen für ZSH, die basierend auf der Befehls- und Argumentposition intelligent vervollständigt werden. Auf meinem System gibt es beispielsweise einezsh-VervollständigungenPaket. Wenn es installiert und richtig geladen ist, manwird es nur mit Dingen vervollständigt, die in den Manpages zu finden sind, nicht mit Dateien, sshsondern nur mit Hostnamen. ssh -lEs würde mit Systembenutzernamen vervollständigt, ssh -l calebwürde danach aber wieder zur Vervollständigung mit Hostnamen usw. zurückkehren.

Sie sollten prüfen, welche zsh-Pakete verfügbar sind und ob Sie die Standardkonfigurationen richtig laden. Sie sollten nicht eine Reihe manueller Überschreibungen für Standardbefehle einrichten müssen, wie Sie sie in Ihrer Frage auflisten.

verwandte Informationen