tl; dr: เพิ่มสิ่งนี้ไว้ใน vimrc ของคุณเพื่อให้ Backspace ทำงานเหมือนในโปรแกรมอื่น ๆ ส่วนใหญ่:
set backspace=indent,eol,start
คำตอบอีกต่อไป
แม้ว่าการทำงานเริ่มต้นอาจจะเป็นที่น่าแปลกใจย้อนกลับ "ไม่ทำงาน" ได้รับการพิจารณาคุณลักษณะ ; มันสามารถป้องกันคุณจากการลบการเยื้องโดยไม่ตั้งใจและจากการลบข้อความมากเกินไปโดยการ จำกัด ไว้ที่บรรทัดปัจจุบันและ / หรือจุดเริ่มต้นของการแทรก
:help 'backspace'
บอกพวกเรา:
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.
ดังนั้นค่าเหล่านี้มีความหมายว่าอะไร?
indent
Vim เพิ่มการเยื้องอัตโนมัติสำหรับหลาย ๆ ไฟล์ โดยค่าเริ่มต้นคุณจะไม่ได้
รับอนุญาตให้ถอยกลับเหนือสิ่งนี้ กฎของสิ่งที่ถือว่าเป็น 'autoindentation' นั้นค่อนข้างบอบบางตัวอย่างเช่นถ้าเราจะพิมพ์สิ่งนี้ (โดยที่█เป็นเคอร์เซอร์):
if :; then
█
การถอยกลับจะไม่ทำงาน
แต่ถ้าเรานั้นก็จะเพิ่มคำสั่งและfi
และกลับไปขึ้นเราจะ
ได้รับอนุญาตให้นำออกเยื้อง:
if :; then
█:
fi
นี่เป็นเพราะในตัวอย่างแรก Vim ระบุว่าควรเพิ่มการเยื้อง 1 ระดับเมื่อคุณกด Enter แต่ในตัวอย่างที่สองกลุ่มที่ไม่ได้ทำอะไรอัตโนมัติมันเป็นเพียงแค่ตัวละครแท็บหรือช่องว่างไม่กี่
ยังดู :help 'autoindent'
eol
สิ่งนี้ควรชัดเจนที่สุดการกด Backspace จะลบเครื่องหมาย EOL ( \n
หรือ\r\n
); หากปิดการใช้งาน Backspace จะไม่ทำอะไรเลยถ้าคุณพยายามลบเครื่องหมาย EOL
เริ่มต้น
หมายความว่าคุณสามารถเพียงลบข้อความที่คุณได้แทรกตั้งแต่โหมดแทรกเริ่มต้นและคุณไม่สามารถลบข้อความใด ๆ ที่แทรกไว้ก่อนหน้านี้
ดังนั้นการตั้งค่าเริ่มต้นคืออะไร
ฉันสังเกตเห็นสิ่งนี้โดยใช้ GVIM ใน windows Backspace ดูเหมือนว่าจะทำงานได้ตามที่คาดไว้ในขณะที่ใช้ VIM จากเทอร์มินัลในระบบ Linux ส่วนใหญ่
เหตุผลนี้เป็นเพราะลีนุกซ์หลายรุ่นมาพร้อมกับไฟล์ vimrc ซึ่งตั้งค่าตัวเลือกทั่วไปไว้ ตัวอย่างเช่นในระบบ Arch Linux ของฉันฉันมี/usr/share/vim/vimfiles/archlinux.vim
:
set nocompatible
set backspace=indent,eol,start
" ... and a few more...
หากคุณติดตั้ง Vim บน Windows ค่าเริ่มต้นคือการใช้ vimrc เริ่มต้นและ gvimrc ที่ Vim จัดส่งมาพร้อมกับ
เป็นกลุ่มbackspace
เริ่มต้นเป็นค่าว่างสำหรับ Arch Linux, Debian, CentOS หรือ$other_distro
ค่าเริ่มต้นอาจแตกต่างกัน
โหมดปกติ
คำถามนี้เกี่ยวกับ Backspace ในโหมดแทรก แต่ให้ฉันเพิ่มหมายเหตุสั้น ๆ เกี่ยวกับ Backspace ในโหมดปกติ
ในโหมดปกติ Backspace ทำหน้าที่เหมือนh
เพิ่งไปทางซ้าย
โดยค่าเริ่มต้น backspace จะไปที่บรรทัดก่อนหน้าถ้าเริ่มต้นบรรทัด (เหมือนeol
ในbackspace
) คุณสามารถควบคุมพฤติกรรมนี้ด้วย'whichwrap'
ตัวเลือกผ่านการb
ตั้งค่าสถานะ (เปิดใช้งานโดยค่าเริ่มต้น)
นอกจากนี้คุณยังสามารถสร้างแบ็กสเปซลบอักขระโดยการแม็พกับX
คำสั่ง:
nnoremap <BS> X
X
(และลบด้วยx
) แต่บ่อยครั้งที่สิ่งที่คุณต้องการทำdb
เช่นเพื่อลบจนกระทั่งเริ่มต้นคำหรือdaw
เพื่อลบทั้งคำเป็นต้นหากคุณมี backspace ว่างคุณมีความเสี่ยงในการใช้สิ่งนี้ คีย์ย่อยในกรณีที่เกินความจำเป็น