tl; dr: Geri almanın diğer programlardaki gibi çalışmasını sağlamak için bunu vimrc'nize ekleyin:
set backspace=indent,eol,start
Daha uzun cevap
Varsayılan davranış şaşırtıcı olsa da, "çalışmayan" geri alanı bir özellik olarak kabul edilebilir ; girintiyi yanlışlıkla temizlemenizi ve mevcut satırı ve / veya insertin başlangıcını sınırlayarak çok fazla metni kaldırmanızı önler.
:help 'backspace'
bize söyler:
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.
Peki bu değerler tam olarak ne anlama geliyor?
indent
Vim birçok dosya türü için otomatik girintiyi ekler; varsayılan olarak, bunun
üzerine geri adım atmanıza izin verilmez; “otoindenzasyon” olarak kabul edilenlerin kuralları, örneğin bunu yazarsak (ursor imleç):
if :; then
█
Backspacing işe yaramaz.
O zaman bir komut ve eklersiniz Ama eğer fi
ve geri gitmek, biz vardır
girinti kaldırmak için izin:
if :; then
█:
fi
Bunun nedeni, ilk örnekte, Vim'in Enter tuşuna bastığınızda 1 girinti eklemesi gerektiğini; ancak ikinci örnekte, Vim hiçbir şeyi otomatik olarak bağlamadı, yalnızca Sekme karakterleri veya birkaç boşluk.
Ayrıca bakınız :help 'autoindent'
eol
Bu en açık olmalıdır, Backspace tuşuna basıldığında EOL işaretleyicileri de kaldırılır ( \n
veya \r\n
); devre dışı bırakılırsa, bir EOL işaretçisini silmeye çalışırsanız Backspace hiçbir şey yapmaz.
başlat
Bu, yalnızca ekleme modu başlatıldığından beri eklediğiniz metni silebileceğiniz ve önceden eklenmiş herhangi bir metni silemediğiniz anlamına gelir .
Peki varsayılan ayar nedir?
Bunu pencerelerde GVIM kullanarak fark ettim. Ancak, çoğu Linux sistemlerinde terminalden VIM kullanırken backspace beklendiği gibi çalışmaktadır.
Bunun nedeni, birçok Linux dağıtımının bazı ortak seçenekleri ayarlayan önceden yapılmış vimrc dosyalarıyla birlikte gönderilmesidir. Örneğin, Arch Linux sistemimde /usr/share/vim/vimfiles/archlinux.vim
:
set nocompatible
set backspace=indent,eol,start
" ... and a few more...
Vim'i Windows'a yüklerseniz, varsayılan, Vim'in birlikte verdiği varsayılan vimrc ve gvimrc'yi kullanmaktır.
Vim varsayılan için boş değerdir backspace
. Arch Linux, Debian, CentOS veya $other_distro
varsayılan olarak farklı olabilir.
Normal mod
Bu soru, insert modunda Backspace ile ilgilidir, ancak normal modda Backspace hakkında da kısa açıklamalar ekleyeyim.
Normal modda, Backspace gibi davranır h
, sadece sola gider.
(Sanki Varsayılan olarak, geri silme eğer bir satırın başında önceki satıra gidecek eol
oldu backspace
); Bu davranışı bayrakla ( 'whichwrap'
seçenek olarak b
etkinleştirilir) seçenekle kontrol edebilirsiniz .
Ayrıca, geri al X
komutunu karakterle eşleyerek silme işlemi yapabilirsiniz :
nnoremap <BS> X
X
(ve ile silme) ile yapılırx
, ancak çoğu zaman gerçekten yapmak istediğiniz şey,db
örneğin kelimenin başlangıcına kadar silmek yadaw
da tüm sözcüğü silmek vs.dir. gereğinden fazla durumda suboptimal anahtar.