backspaceWydaje się, że próba usunięcia znaków w trybie wstawiania za pomocą klawisza nie działa. backspace Czasami mogę , ale innym razem nic nie robi; kursor nie przesuwa się w lewo i absolutnie nic się nie dzieje.
Zauważyłem to za pomocą gVim w Windows. backspaceWydaje się działać zgodnie z oczekiwaniami podczas korzystania z Vima z terminalu w większości systemów Linux jednak.
- Dlaczego to się dzieje?
- Jak mogę sprawić, aby backspaceklawisz usuwał znaki jak zwykle?
- Czy to zachowanie ma być funkcją? Innymi słowy: czy są lepsze alternatywy backspacedla usuwania znaków w trybie wstawiania?
insert-mode
glS
źródło
źródło
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.J
który dba również o białe spacje. Krótko mówiąc, backspace jest odpowiedni do szybkich poprawek literówek podczas pisania, ale poza tym istnieją lepsze alternatywy.:h vim-faq
i wyszukać/backspace
. Trudno zapamiętać tag:h faq-12.26
.Odpowiedzi:
tl; dr: Dodaj to do swojego vimrc, aby backspace działał jak w większości innych programów:
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: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):
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: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?
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
: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ł wbackspace
); możesz kontrolować to zachowanie za pomocą'whichwrap'
opcji poprzezb
flagę (domyślnie włączone).Możesz także usunąć znaki backspace, mapując je na
X
polecenie:źródło
"_X
byłoby to „bardziej naturalne” zachowanie<BS>
.Na wypadek, gdyby ktoś doświadczył niemożliwego do wyjaśnienia
<BS>
zachowania przy użyciu ConEmu w systemie Windows, konieczne może być ponowne mapowanie<BS>
klucza, aby:Więcej informacji
źródło
jest używany z wersją 4.4 i wcześniejszą. pracował dla mnie na komputerze Mac.
wygląda na Mac mam v3.2:
Wszystkie wersje wcześniejsze niż 3.2 korzystają z Powszechnej Licencji Publicznej GNU v3 (GPLv3), której Apple nie popiera. Dyskusja na temat reddit na ten temat jest tutaj .
Możesz uaktualnić do najnowszej wersji Bash za pomocą:
pozwala to skorzystać z podświetlonego tutaj programowalnego zakończenia .
źródło
Jeśli
set backspace=indent,eol,start
jest to ostatni wierszvimrc
, żadne z rozwiązań nie będzie działać.Dodaj jeszcze jedną regułę, np .:
źródło