我尝试按照退格键在 vim 中不起作用,但我仍然有同样的问题: BACKSPACE 插入一个^?
也就是说:插入set bs=indent,eol,start
我的~/.vimrc
并没有解决问题。
我确信我正在加载正确的源文件(我对另一个设置进行了测试,并且更改已传播)。
我在 Ubuntu 上使用Vi IMproved 7.2
Gnome。在终端应用程序中,退格键可以正常工作。
答案1
Vim 似乎无法理解终端发送的擦除字符。由于擦除字符在^?
(Ctrl+?或DEL
表示“删除”) 和^H
(Ctrl+H或BS
表示“退格”) 之间变化,因此 Vim 需要有人告诉它要期待什么。
这不应该发生,除非
- 您正在更改 中的相关设置
vimrc
, - 你正在改变环境变量的值
TERM
, - 您的终端信息数据库混乱,或者
- 你正遭受小精灵的侵扰。
为了排除故障,请尝试stty erase ^?
在启动 Vim 之前运行该命令,看看是否能解决问题。首先按,然后按您的键,将^?
not 分别输入为^
和,但输入方式不同。如果您的 shell 运行良好,则当您按下该键时,这将生成终端发送的任何内容的文字表示。?
Ctrl+VBackspace
答案2
在搜索一些稍微相关的内容时发现了这个问题,并想发布一个迂腐的(但可能有帮助的)后续内容。
大多数现代版本的 stty(1)(包括 GNU Coreutils 附带的版本)将双字符序列^
?
和分别解释^
h
为控制序列 ASCIIDEL和 ASCII BS。或者更一般地,将以 开头的双字符序列解释^
为其等效的 ASCII 控制字符。
因此下面两个命令是等效的:
stty erase '^?'
stty erase ^VDEL
答案3
如果您使用的是 gnome-terminal,那么应该有一个设置可以让退格键模拟 ^H。其他终端仿真器中也有类似的设置;这是我首先要去的地方,因为没有其他人提到过它。
答案4
尝试将以下内容添加到您的 .bashrc (或 .profile)
stty erasure ^H
即字符“^”后跟字符“H”
- 或 -
如果这不起作用,要获得“^H”类型 control-V 然后是 control-H
查看 vim 帮助
:help gui-pty-erase