如何在gnome终端中使用Ctrl-Backspace删除vim中的一个单词?

12

我想在vim插入模式下使用Ctrl-Backspace删除当前单词。 在xterm中,我可以通过以下方式实现:

:inoremap <C-H> <C-W>

但是在gnome-terminal中,我无法找到方法使其发生。

在vim的插入模式下,如果我键入control-v然后按backspace键,在xterm中我会得到^H,而在gnome-terminal中我会得到^?。不幸的是,

:inoremap <C-?> <C-W>

在gnome-terminal中 control-backspace 并不能实现效果,无论怎样只会删除一个字符。

关于ASCII码:

Gnome-terminal允许您通过“编辑” ->“配置文件首选项” ->“兼容性”来更改退格字符。不幸的是,据我所知,没有任何选项有效:无论我通过设置将哪个字符应用于退格键,如果我尝试映射该字符本身,则无效。

:inoremap <C-H> <C-W>

然后普通的退格和control-backspace都会删除整个单词;如果我尝试映射控制加该字符,像

:inoremap <C-^H> <C-W>

然后普通的退格和控制退格只会删除一个字符。

1个回答

12

gnome-terminal的libvte需要进行修补。

libvte已经有了几个选项来映射退格键,但没有一个能区分Ctrl-backspace。它需要一个可以区分的选项,可能要遵循linux控制台的行为(^?代表退格键,^H代表Ctrl-backspace)。请参见这个gnome bug


2015年更新: 这个问题在23c7cd0f99d504cbab06d4c27254d4f3e2807ba8中得到了解决。

libvte 0.41.90、0.40.3及更高版本都已经修复了这个问题。


我们如何让这个补丁起作用?我需要采取哪些步骤(重新编译libvte和gnome-terminal)? - Steven Lu
@StevenLu 将补丁向前移植,将配置暴露给gnome-term(虽然您可以直接从gconf-editor编辑gconf / dconf),确保重新编译的libvte在加载路径中。 - Tobu
2
看起来这个补丁上个月得到了一些关注,可能很快就会发布。迫不及待啊。我需要在控制台vim中使用ctrl-backspace以保持清醒。 - trusktr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接