vim 退格键离开 ^?

标签 vim vi backspace keymapping

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

我的 .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 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

最佳答案

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

如果您的终端模拟器(ssh、putty、xterm 等等)与您的终端设置不一致,那么您会看到此行为。通常默认情况下它是正确的,但人们经常会将 stty 命令放入 .bashrc 中,这会破坏一些东西。

您的 bashrc 中可能有类似 stty Erase ^H 的内容。如果这样做,请删除它,或更改终端设置,让退格键发送 ^H 而不是 DEL (^?)

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

关于vim 退格键离开 ^?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9701366/

相关文章:

vim - 按文件类型设置 Vim 空白首选项

c - 在 C 中创建新 block 时缩进新行

Vim/vi 生存指南

delphi - 如何在网络浏览器中禁用退格键

python - 在我的计算器 python tkinter GUI 上创建一个退格按钮

java - JavaFX 中的退格按钮

regex - Vim:用某些东西代替整行

regex - 如何使用 Unix 正则表达式将数字与字母分开?

vim:自动缩进不起作用

vim - 在 `vi` 中的选择范围内查找并替换