在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之前,我已经完成了基本的谷歌搜索并尝试了搜索结果第一页的所有建议,但未成功。
@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
答案 0 :(得分:64)
^?
是删除字符;退格字符为^H
。终端只能将其中一个识别为“擦除”,这取决于终端设置stty
。 (bash和其他shell认为这是一个问题,并做特殊事情来识别两者)
如果您的终端模拟器(ssh,putty,xterm等)不同意您的终端设置,那么您会看到此行为。通常它默认是正确的,但通常人们会将stty
命令放在他们的.bashrc中,这会破坏事物。
你的bashrc中可能有类似stty erase ^H
的东西。如果您这样做,请删除它,或更改终端设置以使退格发送^H
而不是DEL(^?
)
您也可以使用vim映射解决此问题,但这忽略了基本问题。
答案 1 :(得分:5)
从vim wiki Backspace_and_delete_problems开始,我继续阅读:help :fixdel
,并建议:
if &term == "termname"
set t_kb=^V<BS>
fixdel
endif
其中“^ V”是CTRL-V,“”是退格键
(不要输入四个字符!)。替换“termname”
用您的终端名称。
对我来说,fixdel
使退格区像删除一样工作。我的第一个错误也是在gvim中执行CTRL-V退格操作,在系统上执行操作,无法使密钥正常工作,因此它会粘贴有问题的会话所看到的退格键。
我现在有.vimrc
:
if &term == "xterm-256color"
set t_kb=^?
endif
答案 2 :(得分:4)
尝试 ctrl + del / ctrl + 退格或 alt + < kbd> del / alt + 退格,我不记得哪个,但我认为它会为你做的伎俩。
如果这不起作用,请尝试 shift + backspace / del 。我之前遇到过这个问题,你可以按一个组合键发送正确的字符代码来删除。
答案 3 :(得分:3)
完全相同的问题,除了Ctrl + H不适合我。 stty
设置也很好。如果有人会遇到同样的问题,只想提一下我的环境:
将fixdel
添加到.vimrc
后就可以了!上面的所有修复都不适用于我。
答案 4 :(得分:3)
我遇到了vim退格离开^?
的问题,而在命令行中它正常工作。
这对我有用,使用vim映射:
In .vimrc, type: imap ^? ^H
这会将CTRL-H(这是vim中的默认退格)映射到退格键。 希望有所帮助。
答案 5 :(得分:3)
解决此问题的一个好方法是设置&#34;终端&gt;键盘&#34;设置将退格键映射到&#34; Control-H&#34;在腻子;如果你正在使用PuTTY并体验&#34; ^?&#34;按退格键时出现问题。
我在这里创建了一篇文章:
https://alvinbunk.wordpress.com/2017/08/23/vi-or-vim-using-backspace-inserts/
感谢@ j03m的建议!
答案 6 :(得分:3)
尝试添加:
noremap! <C-?> <C-h>
到~/.vimrc
。
这映射C-?退格,并为我工作。
答案 7 :(得分:2)
此答案对我有用:http://vim.wikia.com/wiki/Backspace_and_delete_problems
基本上,将set backspace=2
放入.vimrc即可。
答案 8 :(得分:1)
在.bashrc
中加上 stty erase ^?运行.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
现在使用新值^?
更改擦除,您的退格键现在可以正常工作。
答案 9 :(得分:1)
在Mac上,如果您使用的是终端,请转到首选项 - &gt;个人资料 - &gt;高级,然后选择“删除发送控制-H”
答案 10 :(得分:0)
如果您使用的是KDE,我知道这很痛苦。 这是迄今为止我发现的最全面的解决方案 http://www.yalla.nu/blog/post/86
答案 11 :(得分:0)
我遇到了这个问题,并在.vimrc中找到了以下设置:
-ms-
删除该行解决了问题。
答案 12 :(得分:0)
在带有CSH的FreeBSD下,您应该在.cshrc中将其替换:
bindkey "^W" backward-delete-word
与此:
bindkey "^?" backward-delete-word
答案 13 :(得分:0)
对我来说,这是一个 stty 问题,我的输出与您的stty -a
类似。
通过运行stty sane
对我来说是固定的。
这不仅解决了退格/删除问题,还修复了箭头键。