ปุ่ม Backspace ไม่ทำงานใน Vim / vi


89

ฉันเพิ่งทำการเปลี่ยนแปลงบางอย่างกับ.vimrcไฟล์และ.bash_aliasesไฟล์และตั้งแต่นั้นมาฉันไม่สามารถลบคำที่มีปุ่ม backspace

.vimrcไฟล์ของฉันมี:

set nocompatible

set number
set incsearch
set autoindent
set ruler
set autowrite
set smarttab
set linebreak
set spell
set et
set title

set mouse=v
set history=50
set tabstop=4
set matchtime=2
set matchpairs+=<:>

syntax enable
filetype plugin indent on
filetype indent on
set sw=4

map <f2> :w\|!python %

hi SpellBad ctermfg=000 guifg=#000

และ.bash_aliasesไฟล์ของฉันมีสองบรรทัดสำหรับ Vim:

alias vim="vim -c 'startinsert' -u ~/.vim/.vimrc"
alias vi="vi -c 'startinsert' -u ~/.vim/.vimrc"

~/.vimไดเรกทอรีของฉันไม่มีปลั๊กอินหรือสคริปต์เพียงรายการเดียวดังนั้นจึงไม่มีโอกาสที่ปลั๊กอินจะทำให้เกิดสิ่งนี้

~/.vim/.vimrcเป็น symlink .vimrcไฟล์จริงอยู่ใน~/vimrc/ไดเร็กทอรีซึ่งเป็นที่เก็บ git


สิ่งนี้ช่วยแก้ปัญหาของฉันได้: askubuntu.com/a/899059/525661
Hem

คำตอบ:


166

ในการอนุญาตให้มีการเว้นระยะห่างจากทุกสิ่งในโหมดแทรก (รวมถึงการเยื้องที่แทรกโดยอัตโนมัติตัวแบ่งบรรทัดและจุดเริ่มต้นของการแทรก) คุณสามารถตั้งค่าbackspaceตัวเลือก:

:set backspace=indent,eol,start

หรือ

:set backspace=2  "compatible with version 5.4 and earlier

โดยค่าเริ่มต้นตัวเลือกนี้จะว่างเปล่าไม่อนุญาตให้คุณย้อนกลับไปเหนือสิ่งที่กล่าวถึงข้างต้น นี่คือพฤติกรรม Vi มาตรฐาน

คุณสามารถใส่บรรทัดนี้ลงในvimrcไฟล์เพื่อตั้งค่าโดยอัตโนมัติเมื่อ Vim เริ่มต้น:

set backspace=indent,eol,start  " more powerful backspacing

นอกจากนี้เริ่มจาก Vim 8.0 หากไม่พบไฟล์ vimrc ของผู้ใช้ Vim จะตั้งค่าbackspaceเป็นค่านี้โดยการโหลดdefaults.vimสคริปต์


ก็ยังคงไม่ทำงานสำหรับฉัน = / ฉันมี set backspace=2 set backspace=indent,eol,start fixdel
Holms

2
@holms try set backspace=2alone
Hoang Huynh

อะไรเป็นสาเหตุของค่าเริ่มต้นที่แบ็คสเปซเพียงแค่ย้ายคาเร็ตไปทางซ้าย
Vitaly Zdanevich

2
หากคุณใช้ vim80 ด้านบนโปรดดูสิ่งนี้: stackoverflow.com/questions/52438373/…
Lewis Chan

8

เช่นเดียวกับ linux-newb ฉันติดตั้ง Ubuntu 18.04 ใหม่และตัวแก้ไขกลุ่มของฉันทำงานแตกต่างจากที่ฉันคุ้นเคยกับเครื่องอื่น ๆ ที่ฉันใช้ (เพื่อรวมพฤติกรรม backspace ที่คุณกำลังอธิบาย) ฉันไม่ทราบว่าฉันใช้viจริงและไม่ใช่กลุ่ม (ซึ่งทั้งสองใช้งานด้วยvi)

การติดตั้งเป็นกลุ่มแล้วแก้ไขไฟล์ทำให้พฤติกรรมที่ฉันเคยชินกลับมารวมถึงการเว้นวรรคหลังทำงานอย่างที่ฉันคาดหวัง

sudo apt install vim

4

ฉันไฟล์มีเนื้อหา~/.vimrc set nocompatibleเพิ่มบรรทัดอื่นในไฟล์เดียวกันเพื่อให้ backspace ทำงาน -

set backspace=indent,eol,start

และเพียงแค่เรียกใช้

source ~/.vimrc

ในเทอร์มินัลเดียวกันเพื่อให้การเปลี่ยนแปลงมีผลทันทีในเชลล์เดียวกัน ไม่จำเป็นต้องเปิด vi แล้วรัน

:set backspace=indent,eol,start

2

ฉันมีปัญหาเดียวกันกับ Debian 7.8 บน SSH ใน urxvt + tmux ฉันติดตั้งเป็นกลุ่มและเป็นกลุ่มเล็ก ๆ

การลบ vim-small ช่วยแก้ปัญหาได้


2

สำหรับฉัน, ฉันมีการตั้งค่าด้านล่าง แต่ Backspace ยังไม่ทำงาน

set backspace=indent,eol,start

ในที่สุดฉันพบว่าบรรทัดต่อไปนี้นำไปสู่ปัญหานี้

inoremap <expr><C-h> neocomplete#smart_close_popup()

เมื่อลบการตั้งค่านี้ปุ่ม Backspace จะทำงานได้ดีในโหมดแทรก

Reason: นั่นเป็นเพราะ Vim เห็น CTRL-H เป็นแบ็คสเปซและบรรทัดนี้ทำให้แมปใหม่เป็น neocomplete # smart_close_popup () ในโหมดแทรก


1

สำหรับฉัน (เซิร์ฟเวอร์ Debian ที่เชื่อมต่อกับ "Konsole" จาก linux อื่น ๆ ) ปัญหาเกี่ยวกับแป้น backspace และแป้นลูกศรได้รับการแก้ไขหลังจากถอนการติดตั้งแพ็คเกจ vim-tiny และติดตั้งแพ็คเกจ vim


1
บางทีแพ็คเกจเหล่านี้อาจติดตั้งไฟล์ vimrc ที่แตกต่างกัน
Eugene Yarmash

1

หลายครั้งมันยังเป็นฟังก์ชันของประเภท getty ที่เลือกหากใช้ไคลเอ็นต์ SSH เช่น Putty หรือบางอย่าง ที่นิยมมากที่สุดคือใช้ vt100 + เนื่องจากเป็นการจำลองมาตรฐานส่วนใหญ่

ฉันมีอยู่แล้ว:fixdelซึ่งใช้งานไม่ได้ ฉันต้องลบออกและแทนที่ด้วยคำแนะนำแรกเพื่อให้มันใช้งานได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.