Ist es möglich, dieses Verhalten rückgängig zu machen?
Eine Aufgabe für zusätzliche Punkte: Finden Sie einen Weg, Vim zu zwingen, die Cursorposition sofort nach dem Verlassen des Einfügemodus zu aktualisieren.
Ist es möglich, dieses Verhalten rückgängig zu machen?
Eine Aufgabe für zusätzliche Punkte: Finden Sie einen Weg, Vim zu zwingen, die Cursorposition sofort nach dem Verlassen des Einfügemodus zu aktualisieren.
Es gibt einen Ansatz aus dem Vim-Tipps-Wiki Ich weiß nicht, wie viele Jahre lang das für mich gut funktioniert hat:
" Leave insert mode to the *right* of the final location of the insertion
" pointer
" From http://vim.wikia.com/wiki/Prevent_escape_from_moving_the_cursor_one_character_to_the_left
let CursorColumnI = 0 "the cursor column position in INSERT
autocmd InsertEnter * let CursorColumnI = col('.')
autocmd CursorMovedI * let CursorColumnI = col('.')
autocmd InsertLeave * if col('.') != CursorColumnI | call cursor(0, col('.')+1) | endif
Bei bestimmten Einstellungen wird der Cursor in die nächste Zeile bewegt, wenn die Bearbeitung am Ende der aktuellen Zeile erfolgt.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
9 Stimmen
Interessante Frage. Ich frage mich, was der Grund für dieses Verhalten ist. Ich habe es einfach akzeptiert.
5 Stimmen
Ich habe es versucht. Es ist ein bisschen unbequem. Wenn ich den Cursor bewege, könnte ich siehe wenn ich den Bearbeitungsmodus verlasse.
1 Stimmen
@StefanoBorini Es gibt einen Teil der Erklärung in diese Frage hier auf SO. So wie ich es verstehe: Wenn Sie den Einfügemodus verlassen, weiß vi nicht, ob Sie den Modus mit
a
oi
und nimmt daher ana
. Und wirklich: Der Cursor "rutscht" nicht weg, wenn Siea
und Esc wiederholt.0 Stimmen
IMHO ist diese Annahme jedoch nicht sehr korrekt, zumindest aus Sicht dessen, was intuitiv erscheint (wir nennen es einfügen. Modus, nicht wahr)?
0 Stimmen
Ich habe Powerline und sogar die Kommandozeile, also zwei Zeilen kann mir deutlich machen, ob ich den Einfügemodus gerade verlassen habe oder nicht, die Bewegung des Cursors ist völlig unnötig und stört mich, wenn ich mit einem schnellen Klick nach dem Cursor etwas löschen will.
<esc>D
und so weiter. Ich würde denken, dass etwas, das auf:autocmd InsertLeave
funktionieren könnte?0 Stimmen
@PavelShved Wenn Sie das Blinken des Cursors stoppen, ist es nicht nur weniger störend, sondern auch der Modus, in dem Sie sich befinden, ist viel klarer (Block für normal, dünner Caret für einfügen, halber Cursor für wenn Sie c drücken usw.).
0 Stimmen
Eine ähnliche Frage mit einer hervorragenden Antwort, die davon abrät, das Standardverhalten zu ändern: vi.stackexchange.com/questions/3138/
0 Stimmen
@StefanoBorini Ich vermute, weil vi es nicht zulässt, den Cursor über das Ende der Zeile hinaus zu setzen. Glücklicherweise hat vim die
virtualedit
Option, um auch diese Unregelmäßigkeit zu beheben.