退格键不起作用,即使尝试修复

退格键不起作用,即使尝试修复

我尝试按照退格键在 vim 中不起作用,但我仍然有同样的问题: BACKSPACE 插入一个^?

也就是说:插入set bs=indent,eol,start我的~/.vimrc并没有解决问题。

我确信我正在加载正确的源文件(我对另一个设置进行了测试,并且更改已传播)。

我在 Ubuntu 上使用Vi IMproved 7.2Gnome。在终端应用程序中,退格键可以正常工作。

答案1

Vim 似乎无法理解终端发送的擦除字符。由于擦除字符在^?(Ctrl+?DEL表示“删除”) 和^H(Ctrl+HBS表示“退格”) 之间变化,因此 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。其他终端仿真器中也有类似的设置;这是我首先要去的地方,因为没有其他人提到过它。

在 gnome-terminal 中访问配置文件

设置退格行为

答案4

尝试将以下内容添加到您的 .bashrc (或 .profile)
stty erasure ^H
即字符“^”后跟字符“H”
- 或 -
如果这不起作用,要获得“^H”类型 control-V 然后是 control-H

查看 vim 帮助
:help gui-pty-erase

相关内容