Zsh möchte einen Befehl mit einem _ davor automatisch korrigieren


70

Ich habe kürzlich angefangen, Zsh für einen Teil der in der Shell integrierten Unterstützung für meinen Git-Status usw. zu verwenden.

Wenn ich eintippe:

 ruby -v

Um die von mir ausgeführte Ruby-Version zu bestätigen, fragt Zsh, ob ich den Befehl in _ruby ändern möchte. Nachdem ich an der Eingabeaufforderung Nein gesagt habe und der Befehl wie erwartet ausgeführt wurde, erhalte ich weiterhin die Frage an der Eingabeaufforderung, nachdem ich bestätigt habe, dass mein Befehl korrekt ist.

Ich gehe davon aus, dass es eine Abschlussdatei oder ähnliches gibt.

Vielen Dank

Aktualisieren:

Die Shell versucht nicht mehr, _ruby zu vervollständigen. Sie reagiert nicht mehr, nachdem sie die Shell einige Male geschlossen hat.

Ich habe mehrmals versucht, die Datei zu bereinigen, aber es gibt eine "opts" -Variable, die 50 oder mehr Zeilen lang ist und alle Zeilen zusammen ausgeführt werden, einige Zeilen mehr als 150 Zeichen. Vielleicht könnte ich Ihnen einen Anhang per E-Mail senden, wenn Sie ihn noch sehen möchten. Ich entschuldige mich aufrichtig für den unordentlichen Beitrag.


Ich sehe dieses Verhalten nicht. Welche Version von zsh? Was ist in deinem ~/.zshrc? Tut es das, wenn Sie versuchen, ein einfaches Ruby-CLI-Skript auszuführen (z. B. ruby -e 'print "hi\n"')? /usr/share/zsh/functions/Completion/Unix/_rubyVeröffentlichen Sie Ihre Datei und wir können sie mit einer bekanntermaßen guten Version vergleichen.
Dennis Williamson

Was ist mit den anderen Fragen, die ich gestellt habe? Ich verstehe nicht - hast du immer noch das Problem? Wenn Sie möchten, dass jemand sicher ist und Ihre Folgemaßnahmen sieht, richten Sie einen Kommentar an @Benutzername mit der Aufschrift "Die bearbeitete Frage anzeigen", wenn die Informationen selbst zu lang sind, um in den Kommentar zu passen. Dadurch leuchtet das Benachrichtigungssymbol des Benutzers auf (der kleine Umschlag oben auf der Seite).
Dennis Williamson

@ Tennis Williamson Es stellt sich heraus, dass die Antwort von Gilles richtig ist. Ich glaube, es hat sich nach dem Neustart der Shell oder dem Abmelden selbst korrigiert. Ich war mir nicht sicher, ob ich mich abgemeldet habe oder nicht. "Ich verstehe nicht - hast du immer noch das Problem?" Wie ich in der Post sagte, würde der Ruby-Befehl ausgeführt, nachdem ich mich dagegen entschieden hatte, zsh ihn in _ruby ändern zu lassen. Also ja alles funktioniert. Vielen Dank für das Heads-up
Joe Ryan

Hatten Sie einen Datei- oder Ordnernamen _rubyim Arbeitsverzeichnis? Ich habe ein Git-Repository mit einem Ordner namens statsund jedes Mal git status, wenn ich tippe, möchte zsh es "korrigieren" git stats. Für mich ist es oh-my-zsh, das die correctOption aktiviert hat , ich fange an, das Ding zu hassen.
Olivier 'Ölbaum' Scherler

Antworten:


113

Dies ist die durch die correctOption aktivierte Befehlsautokorrektur . Es hat nichts mit Fertigstellung zu tun. Sie sehen, _rubyweil zsh denkt, dass es keinen rubyBefehl gibt und er _rubyals die nächste vorhandene Übereinstimmung anbietet .

Wenn Sie gerade installiert haben ruby, wurde möglicherweise zshdie Liste der verfügbaren Befehle früher gespeichert, und es wird nicht immer versucht, festzustellen, ob der Befehl dazwischen angezeigt wurde. Führen Sie in diesem Fall aus hash -rf. Zukünftige zsh-Sitzungen haben dieses Problem nicht, da der rubyBefehl bereits beim Start vorhanden war.

Wenn Sie Ihre ändern PATH, vergisst zsh manchmal einige Hash-Befehle. Die Option hash_listallhilft dagegen. Wie oben, wenn Sie zsh zwingen können, seinen Befehlscache mit zu aktualisieren hash -rf.


das war definitiv was los war. Es scheint, dass es sich nach einer Weile selbst korrigiert hat. Möglicherweise muss die Shell neu gestartet oder abgemeldet werden. Ich kann mich nicht erinnern, ob ich mich abgemeldet habe, daher möchte ich nicht sagen, dass dies nur durch einen Neustart der Shell korrigiert wurde. Das einzige, was mich verwundert, ist, wie der Befehl erfolgreich ausgeführt wird, wenn ich mich abmelden möchte, dass zsh ihn ändert. Ich denke, wie Sie sagten, hatte dies etwas damit zu tun, dass die Shell nicht "wusste", dass der Ruby-Befehl zu diesem Zeitpunkt verfügbar war. Vielen Dank für die Antwort
Joe Ryan

Nebenbei bemerkt, ich verwende zsh 4.3.12 (i386-apple-darwin11.0.0) und wurde hash_listallnicht gefunden. Allerdings wurde hash -rfmein Problem mit zsh behoben, das ständig etwas automatisch korrigieren wollte, das ich kürzlich installiert hatte.
rekursiv

8
Ich habe dieses Problem mit meinem Git-Alias, von git lgdem zsh glaubt, dass es sein sollte git log. Es gibt einen Grund, warum ich es nenne, lgund das liegt daran, dass es ähnlich ist log, weil seine Funktion ähnlich ist! Wie kann ich dieses Problem beheben? Ich möchte wirklich nicht die Angewohnheit entwickeln, zweimal die Eingabetaste zu drücken.
Steven Lu

22

Sie könnten einen Alias ​​erstellen:

alias ruby='nocorrect ruby'

Es ist das, was ich getan habe, als zsh mich immer wieder gefragt hat, ob ich es beim Tippen gemeint .meteorhabe, meteorweil die automatische Korrektur von Zeit zu Zeit immer noch nützlich ist.


1
Finden Sie dies leicht am nützlichsten
netpoetica

13

Ich finde, dass die Autokorrektur manchmal nervig werden kann. Also mache ich in meinem ~ / .zshrc,

DISABLE_CORRECTION="true"

1
Besser noch, erstellen Sie Aliase, um die automatische Korrektur ein- und auszuschalten, da Sie dies meistens möchten, insbesondere wenn Sie viele Plugins verwenden.
Dave Newton

2

Vor einiger Zeit habe ich nach einem Update die automatische Befehlskorrektur aktiviert, die ich nicht möchte. Wenn Ihnen dasselbe passiert ist und Sie es zurücksetzen möchten, müssen Sie es in der Datei ~ / .zshrc wie folgt erstellen:
# Uncomment the following line to enable command auto-correction.
ENABLE_CORRECTION="false"

oder kommentieren Sie es wie unten:
# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"


0

Nur eine Anmerkung, auf meinem zsh (Version 5.7.1 unter macOS) hat DISABLE_CORRECTION nicht funktioniert.

Ich habe in meiner .zshrc-Datei die folgenden zwei Zeilen gesehen, die ich dann auskommentiert habe

setopt CORRECT
setopt CORRECT_ALL

Das hat es für mich getan.


0

Ich hatte das gleiche Problem, auch wenn der Befehl nicht installiert ist.

Ich kann es mit der CORRECT_IGNOREVariablen in meinem lösen.zshrc

# OPTs to enable
setopt HASH_LIST_ALL
setopt CORRECT
# Zsh variable to determine what to ignore,
# in this case everything starting with _ or . 
CORRECT_IGNORE="[_|.]*"

Ich hoffe, es hilft Ihnen oder jemandem bei diesem Problem

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.