68

在 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 wrt 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
4

15 回答 15

85

^?是删除字符;退格字符是^H. 您的终端仅将其中一项识别为“擦除”,这取决于终端设置,stty. (bash 和其他 shell 将此理解为一个问题,并做一些特殊的事情来识别两者)

如果您的终端仿真器(ssh、putty、xterm 等)不同意您的终端设置,那么您会看到这种行为。通常默认情况下它是正确的,但人们通常会将stty命令放在他们的 .bashrc 中,这会破坏事情。

stty erase ^H你的 bashrc 中可能有类似的东西。如果这样做,请摆脱它,或更改终端设置以发送退格^H而不是 DEL ( ^?)

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

于 2012-04-17T19:40:59.280 回答
15

尝试添加:

noremap! <C-?> <C-h>

到你的~/.vimrc.

这映射了 C-? 退格,并为我工作。

于 2017-11-07T07:49:49.077 回答
8

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
于 2014-04-11T11:38:47.357 回答
5

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

我在这里创建了一篇关于此的文章:

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

感谢@j03m 的建议!

于 2017-08-23T16:44:17.917 回答
4

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

这对我有用,使用 vim 映射:

In .vimrc, type:      imap ^? ^H

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

于 2014-04-12T00:26:23.300 回答
4

尝试ctrl+ del/ ctrl+backspacealt+ del/ alt+ backspace,我不记得哪个,但我认为它会为你解决问题。

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

于 2012-04-18T02:17:38.463 回答
4

在 Mac 上,如果您使用的是终端,请转到首选项 -> 配置文件 -> 高级,然后选择“删除发送 Control-H”

于 2016-05-03T18:58:52.560 回答
3

有完全相同的问题,除了 Ctrl+H 对我不起作用。stty设置也很好。只想提一下我的环境,如果有人会遇到同样的问题:

  • 使用 cygwin 和 xterm,当然在 X 下 :)
  • SSH 到 RHEL6.4->bash->tmux->vim

添加后就fixdel可以.vimrc了!上面的所有修复都对我不起作用。

于 2013-08-02T09:23:34.770 回答
3

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

擦除现在将更改为新值^?,您的退格现在可以工作。

于 2013-11-28T11:55:33.767 回答
2

这个答案对我有用:http: //vim.wikia.com/wiki/Backspace_and_delete_problems

基本上,放入set backspace=2.vimrc 就可以了。

于 2018-08-07T09:38:29.620 回答
1

对我来说,这是一个stty问题,我的stty -a输出与您的输出相似。
它通过运行为我修复stty sane

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

于 2019-05-15T15:57:24.823 回答
0

如果您使用的是 KDE,我知道那种痛苦。这是迄今为止我找到的最全面的解决方案 http://www.yalla.nu/blog/post/86

于 2014-05-30T02:47:44.627 回答
0

对于 mac OS Big Sur fn+backspace 为我工作

于 2021-10-26T13:43:05.963 回答
0

我遇到了这个问题,并在我的 .vimrc 中找到了以下设置:

:set t_kb=^H

删除那条线解决了这个问题。

于 2016-03-14T14:00:38.400 回答
0

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

bindkey "^W" backward-delete-word

有了这个 :

bindkey "^?" backward-delete-word
于 2018-07-10T14:45:05.653 回答