Terminal/iTerm2-Problem: Rückwärts-i-Suche schneidet den Befehl ab

Ich habe dieses Problem seit 10.9.

  1. cd in einen ziemlich langen Pfad, z.cd /Volumes/Storage/backup/long/path
  2. Geben Sie einen mäßig langen Befehl ein, z.curl -X GET http://localhost:8888
  3. ctrl+ R, geben Sie eincurl
  4. ctrl+E

Der angezeigte Befehl wird so weit nach links verschoben, dass Leerzeichen nach rechts gelassen werden:

Geben Sie hier die Bildbeschreibung ein

Ist das ein bekannter Fehler oder liegt es nur an mir?

Rückwärtssuche ist eine Funktion der Shell, nicht des Terminals. Es wäre erwähnenswert, welche Shell Sie verwenden. bash? zsh? Und um den zweiten Teil Ihrer Frage zu beantworten: Bei mir zshpassiert 5.0.7 nicht, wenn ich das neueste iTerm2 auf 10.10.2 verwende. Die Bearbeitung beginnt wie erwartet am Ende des Befehls.
Ich verwende bash3.2.53 und das neueste iTerm2.
bash3.2.57 funktioniert hier wie erwartet für mich. Es setzt den Cursor jedes Mal ein Zeichen hinter das letzte Zeichen in der Zeile.
@IanC. hat mich dazu inspiriert, zu wechseln zsh, und ich bin sehr zufrieden damit!
Meine dotfiles können Ihnen helfen, schnell mit zsh loszulegen: github.com/ianchesal/dotfiles

Antworten (3)

Es ist dein $PS1- es ist nicht richtig entkommen. Sie müssen alle nicht druckbaren Zeichen mit \[und maskieren \]. Zum Beispiel, wenn Sie haben

PS1='\e[32m\u \W\e[0m $ '

Sie müssen es ändern

PS1='\[\e[32m\]\u \W\[\e[0m\] $ '

oder Ihr Cursor erscheint weit rechts, weil Ihre Shell denkt, dass Ihre Eingabeaufforderung so lang ist, und wenn sie den Befehl erneut eingibt, kann sie ihn nicht finden. Ärgerlich, ich weiß. In zshmüssen Sie %{und %}IIRC verwenden.

Und während Sie überlegen, zu einer anderen Muschel zu wechseln, würde ich Fisch vorschlagen . Es ist ein bisschen mehr wie ein Sprung, aber es hält mich bei Verstand.

Meiner Meinung nach PS1kann PS1='\[\e[0;33m\]\u\[\e[0m\]:\[\e[0;32m\]\w\[\e[0m\]\$ 'ich nicht recht erkennen, was nicht entkommen ist.
Hinweis: Es ist unnötig und unerwünscht, exportVariablen zu schalen. Interaktive Sub-Shells führen das Startskript aus und definieren die Variable, und es ist im Allgemeinen unerwünscht, dass Programme, die Sie von der Shell ausführen, Shell-spezifische Variablen erben.
Ich bin so froh, dass ich das gefunden habe - ich hatte ein ähnliches Problem, bei dem Rückwärtssuche + Bearbeitungen die Bearbeitungen an der falschen Stelle eingefügt haben, und dieser Fix war genau die Lösung dafür!

Die unglückliche Antwort lautet: Es liegt nur an Ihnen.

Meine bashist:

bash-3.2$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14)
Copyright (C) 2007 Free Software Foundation, Inc.

Und iTerm2 ist die neueste Version und verhält sich wie erwartet: Strg-E während einer umgekehrten Verlaufssuche bringt mich an das Ende der Zeile, ein Zeichen nach dem letzten Zeichen in der ausgewählten Zeile.

Es könnte etwas in Ihrer bashKonfiguration sein, das das Problem verursacht. Sie können Ihre ~/.bash_profileund ~/.bashrc`-Dateien beiseite verschieben und Strg-R und Strg-E ausprobieren und sehen, ob sich die Dinge besser verhalten. Wenn dies der Fall ist, ersetzen Sie Ihre Anpassungen einzeln und sehen Sie, ob Sie den Übeltäter erkennen können.

Das Ändern export TERM="xterm-color"von export TERM="xterm"in meinem .bash_profilehat das Problem für mich behoben.