tl; dr: Dodaj to do swojego vimrc, aby backspace działał jak w większości innych programów:
set backspace=indent,eol,start
Dłuższa odpowiedź
Chociaż zachowanie domyślne może być zaskakujące, „niedziałający” backspace można uznać za funkcję ; może zapobiec przypadkowemu usunięciu wcięcia i usunięciu zbyt dużej ilości tekstu, ograniczając go do bieżącej linii i / lub początku wstawki.
:help 'backspace' Powiedz nam:
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.
Co dokładnie oznaczają te wartości?
wcięcie
Vim dodaje automatyczne wcięcie dla wielu typów plików; Domyślnie, jesteś nie
wolno Backspace nad tym; reguły tego, co uważane jest za „autoindentację”, są nieco subtelne, na przykład, jeśli wpisalibyśmy to (gdzie █ jest kursorem):
if :; then
█
Odstępy nie będą działać.
Ale jeśli będzie następnie dodać polecenie i tym fi, i wrócić się, że są
dopuszczone do usunięcia wcięcia:
if :; then
█:
fi
Wynika to z faktu, że w pierwszym przykładzie Vim stwierdził, że po naciśnięciu klawisza Enter należy dodać 1 poziom wcięcia; ale w drugim przykładzie Vim nic nie autoindentował, tylko znaki Tab lub kilka spacji.
Zobacz także :help 'autoindent'
eol
Powinno to być najbardziej oczywiste, naciśnięcie Backspace usuwa również znaczniki EOL ( \nlub \r\n); jeśli wyłączone, Backspace nic nie zrobi, jeśli spróbujesz usunąć znacznik EOL.
start
Oznacza to, że możesz usunąć tylko tekst, który wstawiłeś od czasu uruchomienia trybu wstawiania, i nie możesz usunąć żadnego wcześniej wstawionego tekstu.
Jakie jest ustawienie domyślne?
Zauważyłem to za pomocą GVIM w Windows. Jednak backspace wydaje się działać zgodnie z oczekiwaniami podczas używania VIM z terminala w większości systemów Linux.
Powodem tego jest fakt, że wiele dystrybucji Linuksa jest dostarczanych z gotowymi plikami vimrc, które ustawiają niektóre typowe opcje. Na przykład w moim systemie Arch Linux mam /usr/share/vim/vimfiles/archlinux.vim:
set nocompatible
set backspace=indent,eol,start
" ... and a few more...
Jeśli zainstalujesz Vima w systemie Windows, domyślnie jest używane domyślne vimrc i gvimrc, z którymi Vim jest dostarczany.
Vim domyślnie jest pusta wartość backspace. Arch Linux, Debian, CentOS lub $other_distrodomyślne mogą być inne.
Tryb normalny
To pytanie dotyczy Backspace w trybie wstawiania, ale dodam też kilka krótkich uwag na temat Backspace w trybie normalnym.
W trybie normalnym Backspace działa jak h, po prostu idzie w lewo.
Domyślnie, backspace przejdzie do poprzedniej linii, jeśli na początku linii (tak jakby eolbył w backspace); możesz kontrolować to zachowanie za pomocą 'whichwrap'opcji poprzez bflagę (domyślnie włączone).
Możesz także usunąć znaki backspace, mapując je na Xpolecenie:
nnoremap <BS> X
X(i usuwanie za pomocąx), ale często to, co naprawdę chciałeś zrobić, todbna przykład usunięcie do początku słowa lubdawusunięcie całego słowa itp. Jeśli masz wolne miejsce, ryzykujesz użycie tego klucz nieoptymalny w większej liczbie przypadków niż to konieczne.