在Vim中,当我在backspace
模式下按insert
键时,它将保留^?
字符,并且不会删除应该删除的字符。
我的.vimrc
中包含以下内容
syntax on
set number
set expandtab
set incsearch
set nocompatible
set backspace=indent,eol,start
fixdel
这也发生在命令模式下。当我错误地键入
W
而不是w
进行保存时,我按了backspace
键,它为我提供了以下内容::W^?
关于出什么问题以及如何解决的任何想法吗?
更新:在将此问题发布到SO之前,我已经完成了一个基本的Google搜索,并尝试了搜索结果首页中的所有建议,但均未成功。
@strcat我正在使用vim版本7.0.237,KDE控制台1.6.4,Linux 2.6.18 x86_64计算机。
@graywh w.r.t cat -v,对于删除,我得到
^[[3~
;对于退格,我得到^?
。stty -a
的输出如下speed 38400 baud; rows 38; columns 194; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;
min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
最佳答案
^?
是删除字符;退格字符是^H
。您的终端只能将其中之一识别为“擦除”,这取决于终端设置stty
。 (bash和其他shell将其理解为问题,并做了一些特殊的事情来识别两者)
如果您的终端仿真器(ssh,putty,xterm等)与您的终端设置不同,那么您会看到此行为。通常,默认情况下是正确的,但是很多时候人们会在他们的.bashrc中放入stty
命令,这会破坏事情。
您的bashrc中可能有类似stty erase ^H
的内容。如果这样做,请摆脱它,或更改终端设置以使Backspace发送^H
而不是DEL(^?
)
您也可以使用vim映射来解决此问题,但这忽略了基本问题。