Vim steckt im Einfügemodus fest

52

Ich benutze Vim seit einigen Monaten über meinen Webhost (sie ermöglichen den Zugriff auf Kitte). Plötzlich escapereagiert der Schlüssel nicht mehr. Ich kann weder Einfügen noch einen anderen Modus existieren, indem ich einfach die Fluchttaste drücke. Ich muss treffen, F1was die Hilfe in vim aufruft und mich in den Befehlsmodus versetzt.

Ich bin mir sehr sicher, dass meine Escape-Taste auf meiner Tastatur einwandfrei funktioniert, da alle Windows-Verknüpfungen, die die Escape-Taste verwenden, normal funktionieren.

Ich weiß, dass dies eine lächerliche Frage ist und ich bin mir sicher, dass es noch viel mehr gibt, um eine Lösung zu finden. Was ich wirklich brauche, ist ein solider Hinweis darauf, wo ich anfangen soll zu suchen.

Dinge, die helfen könnten:

  1. Ich benutze Vim via Putty
  2. Ich melde mich mit der Jailshell an
  3. Ich bin nicht root
Levi Hackwith
quelle
Wie lauten Ihre Terminaleinstellungen? Auf was genau ist die Umgebungsvariable TERM (in der Remote-Shell) eingestellt?
Quack Quijote
$ TERM ist auf 'xterm' gesetzt
Levi Hackmit
Does Ctrl-[Arbeit? Was bekommst du, wenn du drückst und Ctrl-vdann entkommst? Es sollte als angezeigt werden ^[.
Dennis Williamson
Die Strg- [hat funktioniert. Mach weiter! Das erspart mir viel Frust. Kannst du dir erklären, warum das escnicht mehr funktioniert? Bitte posten Sie Ihren Kommentar auch als Antwort, damit ich ihn akzeptieren kann.
Levi Hackmit
Mein erster Gedanke beim Lesen: "Oh, er hat seinen" Hol mich zum Teufel hier raus "-Button gebrochen"
Daniel

Antworten:

16

Versuchen Sie es mit Ctrl-[anstelle von Esc.

Was ist das Ergebnis von:

python -c "print ord(raw_input('char '))"

wann drückst du Escund Enter? Es sollte "27" sein. Was ist das Ergebnis des Pressens Ctrl-Vdann Esc?

Haben Sie alle Einstellungen in PuTTY überprüft, um festzustellen, ob sie angemessen sind?

Verwenden Sie Bash auf dem Remote-System? Schauen Sie sich die Ausgabe von an

bind -p | grep -i '\\e' | less

und sehen, ob Sie etwas Ungewöhnliches sehen. Hast du eine Datei namens ~/.inputrc? Sehen Sie sich den Inhalt an, um festzustellen, ob etwas ungewöhnlich ist.

Schauen Sie sich Ihre an ~/.vimrcund sehen Sie, ob auch alles in Ordnung ist.

Dennis Williamson
quelle
Strg-c sollte auch den Einfügemodus beenden (das '[' ist manchmal etwas schwierig, auf einigen Tastaturen zu bekommen)
akira
1
Ich habe das Python-Skript ausgeführt und es wurde als leere Zeichenfolge zurückgegeben. Wie behebe ich das? Ich benutze Kitt.
Keith
@ Keith: Haben Sie einen der anderen diagnostischen Vorschläge ausprobiert?
Dennis Williamson
Strg + [hat aus irgendeinem Grund für mich gearbeitet, keine Ahnung, was ich getan habe, um meine Vim festzuhalten.
Derek Adair
146

Ich hatte versehentlich Ctrl+ sgedrückt und bin im Einfügemodus hängen geblieben. Um es zu verlassen, benutze Ctrl+ q.

Bhaskar
quelle
7
Das ist kein Einfügemodus XOFF. Sie können die Software-Flusskontrolle deaktivieren, indem Sie dies tun stty -ixon(zu Ihrer hinzufügen ~/.bashrc). Dann ist dieser Tastendruck verfügbar, um an etwas anderes gebunden zu werden. Standardmäßig ist es in Bash an forward-search-history(das Gegenteil von Strg-R) gebunden . Ctrl-q (Bash quoted-insert) wird ebenfalls verfügbar sein.
Dennis Williamson
@DennisWilliamson Wäre es nicht .bash_profileein besserer Ort? Es ist nicht nötig, es in einer nicht interaktiven Shell auszuschalten, oder?
Piotr Dobrogost
1
@PiotrDobrogost: "Wenn eine interaktive Shell gestartet wird, die keine Anmeldeshell ist, liest Bash Befehle von ~ / .bashrc und führt sie aus, sofern diese Datei vorhanden ist." .bash_profilewird nur ausgeführt, wenn Bash eine Login-Shell ist. "Normalerweise enthält Ihr ~ / .bash_profile die Zeile if [ -f ~/.bashrc ]; then . ~/.bashrc; fi"
Dennis Williamson
@DennisWilliamson Sie haben Recht. Ich wollte damit sagen, dass es wahrscheinlich Sinn macht, die Software-Flusskontrolle nur in interaktiven Shells zu deaktivieren. Wenn dies zutrifft, ist es später sinnvoll, einen Weg zu finden, um festzustellen, ob eine Shell interaktiv ist, und die Software-Flusssteuerung nur in diesem Fall zu deaktivieren.
Piotr Dobrogost
@PiotrDobrogost: Siehe meine Antwort auf "Wie kann ich Bash einchecken, wenn eine Shell im interaktiven Modus ausgeführt wird?"
Dennis Williamson
4

Möglicherweise verwenden Sie den Einfügemodus .

'insertmode' 'im' 'noinsertmode' 'noim'
boolescher Wert (Standard aus) Lässt
Vim so arbeiten, dass der Einfügemodus der Standardmodus ist. Nützlich, wenn Sie Vim als Modeless-Editor verwenden möchten. Wird für | evim | verwendet.
[...]
- Verwenden Sie CTRL-Odiese Option, um einen Befehl im Normalmodus (| i_CTRL-O |) auszuführen. Wenn es sich um ein Mapping handelt, wird es ausgeführt, als ob 'insertmode' ausgeschaltet wäre. Der Normalmodus bleibt aktiv, bis die Zuordnung abgeschlossen ist. - Verwenden Sie CTRL-L, um eine Reihe von Befehlen im Normalmodus auszuführen und dann Esc, um zum Einfügemodus zurückzukehren. Beachten Sie, dass CTRL-Lder Cursor nach links bewegt wird, wie es der Fall ist, wenn der Einfügemodus nicht eingestellt ist. | i_CTRL-L |

Ich schlage ~/.vimrcvor, die folgende Zeile hinzuzufügen:

set noinsertmode         "disable insert mode
SandRock
quelle
1
In meinem Fall blieb es im Einfügemodus, weil ich versehentlich "-y" in der Befehlszeile verwendet hatte. Wie im Handbuch gesagt: -y Starte Vim im einfachen Modus, genauso wie die ausführbare Datei "evim" oder "eview" genannt wurde. Lässt Vim sich wie einen Click-and-Type-Editor verhalten. Diese "Leichtigkeit Modus" nur zu beenden verwenden <kbd> STRG </ kbd> + <kbd> l </ kbd> (L Kleinbuchstaben) sagte , als von + Sandrock
Tonne
0

Ich hatte dieses Problem, stellte jedoch fest, dass der SCIM-Eingabemodus versehentlich auf "Other - RAW CODE" geändert wurde. Ich habe es wieder auf Englisch / Tastatur umgestellt und hatte keine Probleme mehr.

vim_user
quelle