tl; dr: Thêm phần này vào vimrc của bạn để làm cho backspace hoạt động như trong hầu hết các chương trình khác:
set backspace=indent,eol,start
Câu trả lời dài hơn
Mặc dù hành vi mặc định có thể gây ngạc nhiên, nhưng backspace "không hoạt động" có thể được coi là một tính năng ; nó có thể ngăn bạn vô tình xóa thụt lề và xóa quá nhiều văn bản bằng cách giới hạn nó ở dòng hiện tại và / hoặc bắt đầu chèn.
:help 'backspace'
nói với chúng tôi:
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.
Vậy những giá trị này có ý nghĩa chính xác là gì?
thụt lề
Vim thêm thụt tự động cho nhiều kiểu tệp; theo mặc định, bạn không
được phép sao lưu trên này; các quy tắc của những gì được coi là 'tự động' là hơi tinh tế, ví dụ, nếu chúng ta sẽ gõ cái này (trong đó █ là con trỏ):
if :; then
█
Backspaces sẽ không hoạt động.
Nhưng nếu sau đó chúng ta sẽ thêm một lệnh và fi
, và quay trở lại, chúng ta được
phép xóa thụt lề:
if :; then
█:
fi
Điều này là do trong ví dụ đầu tiên, Vim xác định cần thêm 1 mức thụt khi bạn nhấn Enter; nhưng trong ví dụ thứ hai, Vim không tự động làm bất cứ điều gì, đó chỉ là các ký tự Tab hoặc một vài khoảng trắng.
Cũng thấy :help 'autoindent'
eol
Đây là điều rõ ràng nhất, nhấn Backspace cũng loại bỏ các dấu EOL ( \n
hoặc \r\n
); nếu bị tắt, Backspace sẽ không làm gì nếu bạn cố xóa dấu EOL.
bắt đầu
Điều này có nghĩa là bạn chỉ có thể xóa văn bản bạn đã chèn kể từ khi chế độ chèn bắt đầu và bạn không thể xóa bất kỳ văn bản nào được chèn trước đó.
Vậy cài đặt mặc định là gì?
Tôi nhận thấy điều này bằng cách sử dụng GVIM trong windows. Backspace dường như hoạt động như mong đợi trong khi sử dụng VIM từ thiết bị đầu cuối trong hầu hết các hệ thống Linux.
Lý do cho điều này là do nhiều bản phân phối Linux với các tệp vimrc được tạo sẵn, thiết lập một số tùy chọn phổ biến. Ví dụ: trên hệ thống Arch Linux của tôi, tôi có /usr/share/vim/vimfiles/archlinux.vim
:
set nocompatible
set backspace=indent,eol,start
" ... and a few more...
Nếu bạn cài đặt Vim trên Windows, mặc định là sử dụng vimrc và gvimrc mặc định mà Vim gửi cùng.
Các Vim mặc định là một giá trị rỗng cho backspace
. Arch Linux, Debian, CentOS hoặc $other_distro
mặc định có thể khác nhau.
Chế độ bình thường
Câu hỏi này là về Backspace trong chế độ chèn, nhưng tôi cũng xin thêm một số nhận xét ngắn gọn về Backspace ở chế độ bình thường.
Trong chế độ bình thường, Backspace hoạt động như h
, nó chỉ đi về bên trái.
Theo mặc định, backspace sẽ đi đến dòng trước nếu ở đầu một dòng (như thể eol
là trong backspace
); bạn có thể kiểm soát hành vi này bằng 'whichwrap'
tùy chọn thông qua b
cờ (được bật theo mặc định).
Bạn cũng có thể tạo các ký tự xóa backspace bằng cách ánh xạ nó tới X
lệnh:
nnoremap <BS> X
X
(và xóa bằngx
), nhưng thường thì những gì bạn thực sự muốn làm làdb
xóa cho đến khi bắt đầu từ hoặcdaw
xóa toàn bộ từ, v.v. Nếu bạn có sẵn backspace, bạn có nguy cơ sử dụng từ này khóa tối ưu trong nhiều trường hợp hơn mức cần thiết.