San*_*raj 54 vi vim keymapping backspace
在Vim中,当我backspace
在insert
模式中按下键时,它会保留^?
字符并且不会删除它想要删除的字符.
我有以下内容 .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映射解决此问题,但这忽略了基本问题.
从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)
这个问题的一个很好的解决方法是设置“终端>键盘”设置,将退格键映射到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-?退格,为我工作。