Wenn ich im Einfügemodus die Pfeiltasten drücke, erhalte ich Zeichen anstelle der Navigation:
Ich möchte in der Lage sein, mit den Pfeiltasten zu navigieren.
Dinge, die ich versucht habe
Ich habe set nocompatible
in meinem ~/.vimrc
( vimrc pastebin ), ich benutze Pathogen und hier ist mein ~/.vim/bundle
Verzeichnis:
YouCompleteMe/
emmet-vim/
nerdtree/
node/
vim-airline/
vim-markdown/
Das Problem hat erst vor kurzem begonnen, kann mich nicht an die Ursache erinnern.
Einige empfehlen :set term=builtin_ansi
, und dies behebt das Problem, entfernt aber alle meine Farben.
$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 29 2016 12:51:13)
MacOS X (unix) version
Included patches: 1-2290
Compiled by Homebrew
Huge version without GUI. Features included (+) or not (-):
...
Die gesamte Ausgabe finden Sie unter http://pastebin.com/5z1HbpqW .
$ echo $TERM
xterm-256color
und in vim:
:set compatible?
nocompatible
:set term?
term=xterm-256color
insert-mode
theonlygusti
quelle
quelle
Antworten:
Was verursacht das Verhalten?
Wenn Sie den Pfeil nach links drücken, sendet Ihr Terminal die folgende Escape-Sequenz:
Dies kann auch notiert werden , da
^[OD
, wo^[
ist Notation fürCtrl-[
, das ist eine andere Art von notating oder Eingabe der ESC - Zeichen. (Probieren Sie es im Einfügemodus!)Vim erkennt dies nicht als Escape-Sequenz und behandelt diese Tastenanschläge daher so, als hätten Sie sie selbst abgetippt:
Sie können bestätigen, dass Ihr Terminal dies sendet, indem Sie in den Einfügemodus wechseln und dann drücken, Ctrl-Vgefolgt vom LeftPfeil.
Was läuft falsch?
Die Escape-Sequenz läuft möglicherweise ab
Die einzige Möglichkeit, wie Vim die Escape-Sequenz von denselben drei manuell eingegebenen Zeichen unterscheiden kann, besteht in der Zeit zwischen dem Empfang jedes Zeichens. Auf langsamen Terminals oder stark ausgelasteten Systemen kann es daher zu einer ausreichenden Verzögerung zwischen den einzelnen Zeichen kommen, damit Vim entscheidet, dass es sich nicht um eine Escape-Sequenz handelt, und nur die Tastenanschläge wie oben beschrieben interpretiert.
Dies wird in
:help vt100-cursor-keys
und weiter:help timeout
unten beschrieben. Die vorgeschlagene Lösung besteht darin, ein ausreichend großesttimeoutlen
Zeitlimit festzulegen, das Zeitlimit jedoch vollständig zu deaktivieren, indem beide festgelegt werden,notimeout
undnottimeout
würde auch funktionieren.Angesichts Ihres Setups ist dies jedoch ziemlich unwahrscheinlich.
Vim erkennt die Sequenz nicht
Es ist wahrscheinlicher, dass das Problem darin besteht, dass Vim die gesendete Escape-Sequenz nicht erkennt und sie daher als Tastenanschläge interpretiert. Sie können dies mit dem folgenden Befehl überprüfen:
In einem funktionierenden Setup mit Ihrer aktuellen Terminalkonfiguration sollte dies eine der folgenden Ausgaben ergeben:
Wenn Sie noch etwas sehen 1 , sprechen Vim und Ihr Terminal nicht ganz dieselbe Sprache.
Der richtige Weg, dies zu beheben, besteht darin, Ihre Terminalkonfiguration so zu korrigieren , dass Ihre Terminfo-Datenbank die Sequenzen meldet, die tatsächlich gesendet werden, wenn Sie die Pfeiltasten drücken. Dies kann jedoch kompliziert sein. Eine leicht hackige Lösung besteht darin, das, was Ihr Terminal sendet, an die Erwartungen von Vim anzupassen. Aus Ihren Kommentaren schließe ich, dass Sie das Standard-Mac Terminal.app verwenden: Sie können unter Einstellungen → Profile → Ihr Profil → Tastatur ändern, welche Escape-Sequenzen für jeden Tastendruck gesendet werden.
Die einfachste Lösung besteht jedoch wahrscheinlich darin, Vim direkt darüber zu informieren, welche Escape-Sequenzen zu erwarten sind. Sie können dies tun, indem Sie die Terminaloptionen folgendermaßen einstellen:
Beachten Sie, dass das
^[
oben Gesagte ein wörtlichesESC
Zeichen ist. Sie können nicht einfach ^gefolgt von tippen [! Der einfachste Weg, die Zuordnungen einzugeben, ist die Eingabe von zDrücken Sie dann im Einfügemodus Ctrl-Vgefolgt vom leftPfeil. Beachten Sie, dass Sie dann die Escape-Sequenz direkt auf das einstellen, was Vim empfängt, wenn Sie die Pfeiltaste drücken ... indem Sie diese Sequenz senden!
1: Eine wahrscheinliche Möglichkeit ist die CSI-Sequenz :
^[[D
quelle
Diese Antwort löste genau das gleiche Problem für mich.
In
~/.vimrc
die folgende Zeile:Nach dem Neustart von vim ist das Problem behoben
quelle
:h 'nocompatible'
default on, off when a vimrc or gvimrc file is found
.vimrc
set nocompatible
Durch das Aktualisieren des
vim
Pakets wurde das Problem mit den gebrochenen Pfeilen für mich behoben.Wenn Sie unter Ubuntu sind, führen Sie
apt upgrade vim
. Interessanterweiseapt install vim
hilft auch. Und noch interessanter ist, dass dievim
Version nach dem Update gleich bleibt:Aber es hilft.
quelle
apt upgrade
das Problem lösen könnte.