tl; dr: Fügen Sie dies zu Ihrem vimrc hinzu, damit die Rücktaste wie in den meisten anderen Programmen funktioniert:
set backspace=indent,eol,start
Längere Antwort
Auch wenn das Standardverhalten überraschend sein mag, kann die Rücktaste "funktioniert nicht" als Feature betrachtet werden . Dies kann verhindern, dass Sie versehentlich Einrückungen entfernen und zu viel Text entfernen, indem Sie ihn auf die aktuelle Zeile und / oder den Anfang der Einfügung beschränken.
:help 'backspace'
sagt uns:
Influences the working of `<BS>`, `<Del>`, `CTRL-W` and `CTRL-U` in Insert
mode. This is a list of items, separated by commas. Each item allows
a way to backspace over something:
value effect
indent allow backspacing over autoindent
eol allow backspacing over line breaks (join lines)
start allow backspacing over the start of insert; CTRL-W and CTRL-U
stop once at the start of insert.
Was bedeuten diese Werte genau?
Einzug
Vim fügt für viele Dateitypen einen automatischen Einzug hinzu. Standardmäßig dürfen Sie darüber keine
Rücktaste drücken. Die Regeln für das, was als "Autoindentation" bezeichnet wird, sind etwas subtil, wenn wir beispielsweise Folgendes eingeben würden (wobei █ der Cursor ist):
if :; then
█
Backspacing funktioniert nicht.
Aber wenn wir dann einen Befehl hinzufügen , und die fi
, und gehen wieder nach oben, wir sind
die Vertiefung zu entfernen erlaubt:
if :; then
█:
fi
Dies liegt daran, dass Vim im ersten Beispiel festgelegt hat, dass 1 Einrückungsstufe hinzugefügt werden soll, wenn Sie die Eingabetaste gedrückt haben. aber im zweiten Beispiel hat Vim nichts automatisch eingezogen, es sind nur Tabulatorzeichen oder ein paar Leerzeichen.
Siehe auch :help 'autoindent'
eol
Dies sollte am offensichtlichsten sein. Durch Drücken der Rücktaste werden auch die EOL-Markierungen ( \n
oder \r\n
) entfernt. Wenn diese Option deaktiviert ist, führt die Rücktaste nichts aus, wenn Sie versuchen, einen EOL-Marker zu löschen.
start
Das heißt, Sie können nur Text löschen, den Sie seit dem Start des Einfügemodus eingefügt haben, und Sie können keinen Text löschen, der zuvor eingefügt wurde.
Also, was ist die Standardeinstellung?
Ich habe dies mit GVIM in Windows bemerkt. Die Rücktaste scheint jedoch bei Verwendung von VIM über das Terminal in den meisten Linux-Systemen wie erwartet zu funktionieren.
Der Grund dafür ist, dass viele Linux-Distributionen vorgefertigte vimrc-Dateien enthalten, die einige allgemeine Optionen festlegen. Zum Beispiel auf meinem Arch Linux System /usr/share/vim/vimfiles/archlinux.vim
mit:
set nocompatible
set backspace=indent,eol,start
" ... and a few more...
Wenn Sie Vim unter Windows installieren, wird standardmäßig das Standard-Vimrc und -gvimrc verwendet, mit denen Vim ausgeliefert wird.
Der Vim- Standardwert ist ein leerer Wert für backspace
. Das Arch Linux, Debian, CentOS oder die $other_distro
Standardeinstellung können unterschiedlich sein.
Normaler Modus
Bei dieser Frage geht es um die Rücktaste im Einfügemodus, aber lassen Sie mich auch einige kurze Bemerkungen zur Rücktaste im normalen Modus hinzufügen.
Im normalen Modus verhält sich die Rücktaste so h
, als würde sie nur nach links gehen.
Standardmäßig springt die Rücktaste zum Anfang einer Zeile (als wäre sie eol
in backspace
). Sie können dieses Verhalten mit der 'whichwrap'
Option über das b
Flag steuern (standardmäßig aktiviert).
Sie können die Rücktaste auch zum Löschen von Zeichen verwenden, indem Sie sie dem X
Befehl zuordnen:
nnoremap <BS> X
X
(und das Löschen mitx
) ausgeführt. Oft wollten Sie jedoch nurdb
das Löschen bis zum Wortanfang oderdaw
das Löschen des gesamten Wortes usw. ausführen. Wenn Sie die Rücktaste verwenden, riskieren Sie dies suboptimaler Schlüssel in mehr Fällen als notwendig.