vim退格离开^?

San*_*raj 54 vi vim keymapping backspace

在Vim中,当我backspaceinsert模式中按下键时,它会保留^?字符并且不会删除它想要删除的字符.

我有以下内容 .vimrc

syntax on
set number
set expandtab
set incsearch
set nocompatible
set backspace=indent,eol,start
fixdel
Run Code Online (Sandbox Code Playgroud)

这也发生在命令模式中.当我错误地键入W而不是w保存时,我按下backspace键,它给了我以下内容:

:W^?
Run Code Online (Sandbox Code Playgroud)

关于什么是错的任何想法以及如何解决它?!

更新:在将此问题发布到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
Run Code Online (Sandbox Code Playgroud)

evi*_*tto 67

^?是删除字符; 退格字符是^H.终端只能将其中一个识别为"擦除",这取决于终端设置stty.(bash和其他shell认为这是一个问题,并做特殊事情来识别两者)

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

你可能stty erase ^H在你的bashrc中有类似的东西.如果你这样做,摆脱它,或改变你的终端设置,以使用退格发送^H代替DEL(^?)

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

  • 我想补充一点,如果你的.bashrc文件中没有'stty'并且你看到了这个问题......那么在你的.bashrc文件中添加'stty'就会消失.`stty erase'^?'` (4认同)

Mor*_*gan 6

vim wiki Backspace_and_delete_problems,我继续阅读:help :fixdel它建议:

if &term == "termname"
  set t_kb=^V<BS>
  fixdel
endif
Run Code Online (Sandbox Code Playgroud)

其中"^ V"是CTRL-V,""是退格键
(不要输入四个字符!).将"termname"替换
为您的终端名称.

对我来说,fixdel使退格工作像删除.我的第一个错误也是在gvim中执行CTRL-V退格操作,在系统上执行操作,无法使密钥正常工作,因此它会粘贴有问题的会话看到的退格键.

我现在在我的.vimrc:

if &term == "xterm-256color"
  set t_kb=^?
endif
Run Code Online (Sandbox Code Playgroud)


Cho*_*tom 6

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


Alv*_*unk 5

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

我在这里创建了一篇文章:

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

感谢@j03m 的建议!


小智 5

尝试添加:

noremap! <C-?> <C-h>
Run Code Online (Sandbox Code Playgroud)

给你~/.vimrc

这张地图C-?退格,为我工作。