退格 x ^ ?

在 Vim 中,当我在 insert模式下按下 backspace键时,它会保留 ^?字符并且不删除它应该删除的字符。

我的 .vimrc里有以下内容

syntax on
set number
set expandtab
set incsearch
set nocompatible
set backspace=indent,eol,start
fixdel

这在命令模式下也会发生。当我错误地键入 W而不是 w来保存时,我按下 backspace键,它会给我以下信息:

:W^?

知道出了什么问题,怎么解决吗!

更新: 在张贴这个问题到所以,我已经做了一个基本的谷歌搜索,并尝试了所有的建议,从搜索结果的第一页,但不成功。

@ strcat 我正在使用 vim version 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
74712 次浏览

^?是删除字符; 退格字符是 ^H。其中只有一个被终端识别为“擦除”,这是由终端设置 stty决定的。(bash 和其他 shell 将此视为一个问题,并执行特殊的操作来识别这两者)

如果您的虚拟终端(ssh、 putty、 xterm 等等)与终端设置不一致,那么您就会看到这种行为。通常默认情况下它是正确的,但是人们通常会将 stty命令放在他们的。破坏东西。

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

您也可以使用 vim 映射来修复这个问题,但是这忽略了基本问题。

试试 ctrl + del/ctrl + backspace或者 alt + del/alt + backspace,我不记得是哪个了,但是我认为它会帮到你的。

如果不行,试试 shift + backspace/del。我曾经遇到过这个问题,有一个组合键,您可以按发送正确的字符代码,以完成您的删除。

完全相同的问题,除了 Ctrl + H 不适合我。stty设置也可以。只是想提一下我的环境,如果有人也有同样的问题:

  • 使用带 xterm 的 cygwin,当然是在 X 下:)
  • Ssh’ed to RHEL6.4-> bash-> tmux-> vim

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

STY 擦除 ^ ?放在你的

运行你的.bashrc

Run 命令: 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

擦除将改变现在与新的值 ^?和您的退格现在应工作。

退格和删除问题,我继续阅读 :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

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

这就是我使用 vim 映射得到的结果:

In .vimrc, type:      imap ^? ^H

这将把 CTRL-H (vim 中的默认退格)映射到退格键。 希望能帮上忙。

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

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

:set t_kb=^H

删除这一行就解决了问题。

在 Mac 上,如果你使用终端,进入首选项-> 配置文件-> 高级,然后选择“删除发送控制-H”

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

我在这里写了一篇文章:

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

感谢@j03m 的建议!

试着补充一下:

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

到你的 ~/.vimrc

这个把 C-? 映射到后台空间,对我很有用。

在 FreeBSD 和 CSH 下,你应该在你的.chrc 中替换它:

bindkey "^W" backward-delete-word

用这个:

bindkey "^?" backward-delete-word

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

基本上,把 set backspace=2放进 Vimrc 就行了。

对我来说,这是一个 Stty的问题,我有一个类似的 stty -a输出作为你。
通过运行 stty sane为我解决了这个问题。

这不仅修复了 backspace/del 问题,而且还修复了箭头键。

对于 Mac OS 来说,Big Sur fn + backspace 对我来说很管用

我在油灰终端运行 vi 的时候也遇到过类似的问题。我通过改变油灰的设置来修复它。

change settings > Terminal > Keyboard > The Backspace Key (select Control-H)