Mencoba menghapus karakter dalam mode sisipkan dengan backspacetombol kadang-kadang tampaknya tidak berhasil. backspace Kadang - kadang saya bisa , tetapi di waktu lain tidak ada hasilnya; kursor tidak mengarah ke kiri, dan sama sekali tidak ada yang terjadi.
Saya perhatikan ini menggunakan gVim di Windows. Namun backspacetampaknya berfungsi seperti yang diharapkan saat menggunakan Vim dari terminal di sebagian besar sistem Linux.
- Mengapa ini terjadi?
- Bagaimana saya bisa membuat backspacekunci menghapus karakter seperti biasa?
- Apakah perilaku ini dimaksudkan sebagai fitur? Dengan kata lain: adakah alternatif yang lebih baik daripada backspacemenghapus karakter dalam mode penyisipan?
insert-mode
glS
sumber
sumber
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.J
yang menangani spasi putih juga. Singkatnya, backspace baik untuk perbaikan kesalahan ketik cepat saat menulis, tetapi selain itu ada alternatif yang lebih baik.:h vim-faq
dan cari/backspace
. Tag yang sulit diingat adalah:h faq-12.26
.Jawaban:
tl; dr: Tambahkan ini ke vimrc Anda untuk membuat backspace berfungsi seperti di sebagian besar program lain:
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: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):
Backspacing tidak akan berfungsi.
Tetapi jika kita kemudian akan menambahkan perintah dan
fi
, dan kembali, kita akan diperbolehkan untuk menghapus lekukan: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?
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: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 dibackspace
); Anda dapat mengontrol perilaku ini dengan'whichwrap'
opsi melaluib
flag (diaktifkan secara default).Anda juga dapat membuat karakter hapus spasi mundur dengan memetakannya ke
X
perintah:sumber
"_X
akan menjadi perilaku yang "lebih alami" untuk<BS>
.Kalau-kalau ada orang yang mengalami
<BS>
perilaku yang tidak bisa dijelaskan menggunakan ConEmu di Windows, Anda mungkin harus memetakan ulang<BS>
kunci untuk:Informasi lebih lanjut
sumber
digunakan dengan v5.4 dan sebelumnya. bekerja untuk saya di mac.
Sepertinya di mac saya punya v3.2:
Semua versi yang melewati 3.2 menggunakan GNU General Public License v3 (GPLv3), yang tidak didukung oleh Apple. Diskusi tentang reddit tentang ini ada di sini .
Anda dapat meningkatkan ke Bash terbaru dengan:
ini memungkinkan untuk memanfaatkan penyelesaian terprogram yang disorot di sini .
sumber
Jika
set backspace=indent,eol,start
ini adalah baris terakhir Andavimrc
, tidak ada solusi yang akan berfungsi.Tambahkan satu aturan lagi setelah ini, misalnya:
sumber