vim退格离开^?

vim退格离开^?,vim,vi,backspace,keymapping,Vim,Vi,Backspace,Keymapping,在Vim中,当我在插入模式中点击退格键时,它会留下^?字符,并且不会删除它应该删除的字符 我的.vimrc syntax on set number set expandtab set incsearch set nocompatible set backspace=indent,eol,start fixdel 这在命令模式下也会发生。当我错误地键入W而不是W进行保存时,我按backspace键,它会给出以下信息: :W^? 你知道哪里出了问题,怎么解决吗 更新:在发布这个问题之前,我已经

在Vim中,当我在
插入
模式中点击
退格
键时,它会留下
^?
字符,并且不会删除它应该删除的字符

我的
.vimrc

syntax on
set number
set expandtab
set incsearch
set nocompatible
set backspace=indent,eol,start
fixdel
这在命令模式下也会发生。当我错误地键入
W
而不是
W
进行保存时,我按
backspace
键,它会给出以下信息:

:W^?
你知道哪里出了问题,怎么解决吗

更新:在发布这个问题之前,我已经做了一个基本的谷歌搜索,并尝试了搜索结果第一页的所有建议,但没有成功

@strcat我使用的是vim版本7.0.237、KDE控制台1.6.4、Linux 2.6.18 x8664机器

@graywh w.r.t cat-v,对于delete,我得到
^[[3~
,对于backspace,我得到
^?

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
速度38400波特;第38行;第194列;行=0;
intr=^C;quit=^;erase=^H;kill=^U;eof=^D;eol=;eol2=;swtch=;start=^Q;stop=^S;susp=^Z;rprnt=^R;werase=^W;lnext=^V;flush=^O;
最小值=1;时间=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 echok-echonl-noflsh-xcase-tostop-echoprt echoctl echoke

^?
是删除字符;退格字符是
^H
。您的终端只会将其中一个字符识别为“擦除”,这取决于终端设置
stty
(bash和其他shell将此理解为一个问题,并采取特殊措施来识别这两个字符)

如果您的终端仿真器(ssh、putty、xterm等)与您的终端设置不一致,那么您会看到这种行为。默认情况下,这通常是正确的,但通常人们会在其.bashrc中放置
stty
命令,这会破坏某些功能

您的bashrc中可能有类似于
stty erase ^H
的内容。如果有,请将其删除,或者更改终端设置,使backspace send
^H
代替DEL(
^?

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

试试ctrl+del/ctrl+backspace或alt+del/alt+backspace,我不记得是哪一个,但我想它会帮你解决这个问题


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

有完全相同的问题,只是Ctrl+H不适用于我。
stty
设置也很好。只想提及我的环境,如果有人得到sa我的问题:

  • 将cygwin和xterm一起使用,当然在X下:)
  • Ssh'ed到RHEL6.4->bash->tmux->vim

在将
fixtel
添加到
.vimrc
后,它工作了!上面的所有修复对我都不起作用。

stty-erase^?放在你的.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
速度38400波特;第48行;第157列;行=0;
intr=^C;quit=^\;***擦除=^?***;终止=^U;eof=^D;eol=;eol2=;swtch=;开始=^Q;停止=^S;暂停=^Z;rprnt=^R;
werase=^W;lnext=^V;flush=^O;最小值=1;时间=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 echok-echonl-noflsh-xcase-tostop-echoprt echoctl echoke
擦除现在将被更改为新值
^?
,您的退格现在可以工作了。

从中,我继续阅读
:help:fixdel
它建议:

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

我遇到了同样的问题,vim backspace在命令行中正常工作时离开了
^?

这就是我使用vim映射的工作原理:

In .vimrc, type:      imap ^? ^H
这将CTRL-H(vim中的默认退格)映射到退格键。
希望这能有所帮助。

如果您正在使用KDE,我知道这很痛苦。 这是迄今为止我找到的最全面的解决方案

我遇到此问题,并在.vimrc中找到以下设置:

:set t_kb=^H

删除该行解决了问题。

在Mac上,如果您使用的是Terminal,请转到Preferences->Profiles->Advanced,然后选择“Delete Sends Control-H”

解决此问题的一个好办法是设置“Terminal>Keyboard”设置,将Backspace键映射到PuTTY中的“Control-H”;如果您使用PuTTY并遇到“^?”按退格键时出现问题

我在这里写了一篇关于这方面的文章:

感谢@j03m的建议!

尝试添加:

noremap! <C-?> <C-h>
noremap!
到您的
~/.vimrc


这将C-?映射到backspace,并对我有效。

在FreeBSD下使用CSH,您应该在您的.cshrc中替换它:

bindkey "^W" backward-delete-word
为此:

bindkey "^?" backward-delete-word

这个答案对我有用:


基本上,将
set backspace=2
放入.vimrc中是可行的。

对我来说,这是一个stty问题,我有一个与你类似的
stty-a
输出。
通过运行
sttysane
为我修复了它


这不仅解决了退格/del问题,还解决了箭头键。

你说得对。是我的bashrc文件中的
stty
把事情搞砸了。感谢你的澄清。这里有几个人在unix(而不是linux)上使用putty在putty中,这是一个简单的修复方法,pref->terminal->keyboard->backspace更改为^h
stty擦除^2>/dev/null
do?我的vim中没有任何stty。我想补充一点,如果你的.bashrc文件中没有“stty”,并且你看到这个问题,那么添加“stty”
bindkey "^?" backward-delete-word