tl; dr: Tambahkan ini ke vimrc Anda untuk membuat backspace berfungsi seperti di sebagian besar program lain:
set backspace=indent,eol,start
Jawaban yang lebih panjang
Meskipun perilaku default mungkin mengejutkan, backspace "tidak berfungsi" dapat dianggap sebagai fitur ; itu dapat mencegah Anda secara tidak sengaja menghapus lekukan, dan dari menghapus terlalu banyak teks dengan membatasinya ke baris saat ini dan / atau awal memasukkan.
:help 'backspace'
memberi tahu kami:
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.
Jadi, apa sebenarnya nilai-nilai ini?
indent
Vim menambahkan lekukan otomatis untuk banyak tipe file; secara default, Anda tidak
diizinkan mundur lebih dari ini; aturan dari apa yang dianggap sebagai 'autoindentation' agak halus, misalnya, jika kita akan mengetik ini (di mana the adalah kursor):
if :; then
█
Backspacing tidak akan berfungsi.
Tetapi jika kita kemudian akan menambahkan perintah dan fi
, dan kembali, kita akan
diperbolehkan untuk menghapus lekukan:
if :; then
█:
fi
Ini karena dalam contoh pertama, Vim memutuskan bahwa ia harus menambahkan 1 tingkat lekukan ketika Anda menekan Enter; tetapi dalam contoh kedua, Vim tidak autoindent apapun, itu hanya karakter Tab atau beberapa spasi.
Lihat juga :help 'autoindent'
eol
Ini harus menjadi yang paling jelas, menekan Backspace juga menghilangkan penanda EOL ( \n
atau \r\n
); jika dinonaktifkan, Backspace tidak akan melakukan apa-apa jika Anda mencoba menghapus penanda EOL.
mulai
Ini berarti Anda hanya dapat menghapus teks yang telah Anda sisipkan sejak mode penyisipan dimulai, dan Anda tidak dapat menghapus teks apa pun yang sebelumnya disisipkan.
Jadi apa pengaturan default?
Saya perhatikan ini menggunakan GVIM di windows. Backspace tampaknya berfungsi seperti yang diharapkan saat menggunakan VIM dari terminal di sebagian besar sistem Linux.
Alasan untuk ini adalah karena banyak distro Linux menyediakan file vimrc yang sudah dibuat sebelumnya yang menetapkan beberapa opsi umum. Sebagai contoh pada sistem Arch Linux yang saya miliki /usr/share/vim/vimfiles/archlinux.vim
dengan:
set nocompatible
set backspace=indent,eol,start
" ... and a few more...
Jika Anda menginstal Vim di Windows, defaultnya adalah menggunakan vimrc dan gvimrc default yang dikirimkan oleh Vim.
The Vim default adalah nilai kosong untuk backspace
. Arch Linux, Debian, CentOS, atau $other_distro
default mungkin berbeda.
Mode normal
Pertanyaan ini tentang Backspace dalam mode insert, tapi izinkan saya juga menambahkan beberapa komentar singkat tentang Backspace dalam mode normal.
Dalam mode normal, Backspace bertindak sebagai h
, itu hanya pergi ke kiri.
Secara default, backspace akan menuju ke baris sebelumnya jika pada awal baris (seolah-olah eol
ada di backspace
); Anda dapat mengontrol perilaku ini dengan 'whichwrap'
opsi melalui b
flag (diaktifkan secara default).
Anda juga dapat membuat karakter hapus spasi mundur dengan memetakannya ke X
perintah:
nnoremap <BS> X
X
(dan menghapus denganx
), tetapi seringkali yang ingin Anda lakukan adalahdb
misalnya menghapus sampai awal kata, ataudaw
menghapus seluruh kata dll. Jika Anda memiliki backspace yang tersedia, Anda berisiko menggunakan ini kunci suboptimal dalam banyak kasus dari yang diperlukan.