vim退格离开^?

时间:2012-03-14 11:48:04

标签: vim vi backspace keymapping

在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

14 个答案:

答案 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设置也很好。如果有人会遇到同样的问题,只想提一下我的环境:

  • 在x ofcourse下使用cygwin和xterm:)
  • Ssh'ed到RHEL6.4-&gt; bash-&gt; tmux-&gt; vim

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对我来说是固定的。

这不仅解决了退格/删除问题,还修复了箭头键。