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 ( \n
lub \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_distro
domyś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 eol
był w backspace
); możesz kontrolować to zachowanie za pomocą 'whichwrap'
opcji poprzez b
flagę (domyślnie włączone).
Możesz także usunąć znaki backspace, mapując je na X
polecenie:
nnoremap <BS> X
X
(i usuwanie za pomocąx
), ale często to, co naprawdę chciałeś zrobić, todb
na przykład usunięcie do początku słowa lubdaw
usunię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.