vim退格离开^?

在Vim中,当我在insert模式下点击backspace键时,会留下^? 字符,并不删除它想要删除的字符。

我在.vimrc有以下内容

 syntax on set number set expandtab set incsearch set nocompatible set backspace=indent,eol,start fixdel 

这也发生在命令模式。 当我错误地键入W而不是w来保存,我按下backspace键,它给了我以下内容:

 :W^? 

任何想法什么是错的,以及如何解决它?

更新:在发布这个问题之前,我做了一个基本的谷歌search,并尝试从search结果的第一页的所有build议,但不成功。

@strcat我使用vim版本7.0.237,KDE控制台1.6.4,Linux 2.6.18 x86_64机器。

@graywh猫猫-v,删除,我得到^[[3~ 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 其中只有一个被terminal识别为“擦除”,这由terminal设置stty确定。 (bash和其他shell将此理解为一个问题,并且做特殊的事情来识别两者)

如果你的terminal模拟器(ssh,putty,xterm,whatever)不同意你的terminal设置,那么你会看到这种行为。 通常默认情况下是正确的,但是很多时候人们会把stty命令放在他们的.bashrc中,这会破坏事情。

你可能有一些像stty erase ^H在你的bashrc中stty erase ^H 如果你这样做,摆脱它,或改变你的terminal设置有退格发送^H而不是DEL( ^?

你也可以用vim映射来解决这个问题,但这是忽略了基本的问题。

请检查下面的链接以帮助debugging您的问题:

http://vim.wikia.com/wiki/Backspace_and_delete_problems

编辑:

我发现它与你所描述的类似的问题似乎是一样的:

http://lj4newbies.blogspot.com/2007/05/backspace-and-delete-keys-problem-in.html

从vim wiki Backspace_and_delete_problems ,我继续阅读:help :fixdel它表明了这一点:

 if &term == "termname" set t_kb=^V<BS> fixdel endif 

其中“^ V”是CTRL-V,“”是退格键
(不要input四个字符!)。 replace“termname”
与您的terminal名称。

对我来说fixdel使退格工作像删除。 我的第一个错误是在gvim中执行CTRL-V退格,在系统上,你不能让键正常工作,所以它粘贴有问题的会话看到的退格键。

我现在已经在我的.vimrc

 if &term == "xterm-256color" set t_kb=^? endif 

尝试Ctrl + Del / ctrl + 退格键alt + del / alt + 退格键 ,我不记得哪个,但我认为它会为你做的伎俩。

如果这不起作用,请尝试shift + backspace / del 。 我遇到过这个问题之前,有一个组合键,你可以按发送正确的字符代码做你的删除。

有完全相同的问题,除了Ctrl + H不为我工作。 stty设置也很好。 只是想提到我的环境,如果有人会得到同样的问题:

  • 使用cygwin与xterm,在X ofcourse下:)
  • Ssh到RHEL6.4-> bash-> tmux-> vim

fixdel添加到.vimrc它可以工作! 上面的所有修复都不适合我。

我有同样的问题,VIM退格离开^? ,而在命令行中它正常工作。

这是对我来说,使用vim映射:

 In .vimrc, type: imap ^? ^H 

这将把CTRL-H(这是vim的默认退格)映射到退格键。 希望有所帮助。

解决此问题的一个很好的方法是设置“terminal>键盘”设置,将Backspace键映射到PuTTY中的“Control-H”; 这是如果您正在使用PuTTY并遇到“^?” 按Backspace键时出现问题。

我在这里创build了一篇文章:

https://alvinbunk.wordpress.com/2017/08/23/vi-or-vim-using-backspace-inserts/

感谢@ j03m的build议!

stty擦除^? 在你的.bashrc中

运行你的.bashrc

运行命令: stty -a

 speed 38400 baud; rows 48; columns 157; line = 0; intr = ^C; quit = ^\; ***erase = ^?***; 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 

擦除现在将被更改为新值^? 你的退格现在就行了。

如果你使用KDE,我知道那很痛苦。 这是迄今为止我find的最全面的解决schemehttp://www.yalla.nu/blog/post/86

我有这个问题,并在我的.vimrc中find以下设置:

 :set t_kb=^H 

删除该行解决了这个问题。

在Mac上,如果您正在使用terminal,请转到首选项 – >configuration文件 – >高级,然后select“删除发送控制-H”

尝试添加:

 noremap! <C-?> <Ch> 

到你的~/.vimrc

这个地图C-? 退后,为我工作。