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://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-? 退后,为我工作。