在终止符中映射Ctrl-Backspace


8

我最近开始使用Vim。在以前的编辑中,我习惯按Ctrl- 删除整个单词Backspace。查看文档后,我发现这是通过在Vim中按Ctrl- 完成的w。问题是,在习惯按Ctrl-之后w,我开始关闭选项卡并在每次拼错一个单词时聊天(在编写此问题时,我关闭了该选项卡5次)。所以我检查了如何在Vim中映射键并尝试了以下方法:

:imap <C-BS> <C-w>

不幸的是,它没有用。经过一些研究,我发现终端无法区分Ctrl- BackspaceBackspace。我看到了一些可解决此问题的技巧和补丁,但是我无法让它们在终结器(我要使用的仿真器)上工作。

有什么办法可以映射Ctrl- Backspace在Vim中使用终结符?


2
欢迎来到Vim的地狱。
romainl

2
我喜欢这样的事实,这个地狱非常有生产力,可以通过修补程序进行改进。
Ingo Karkat 2013年

顺便说一句,我正在收集这些问题,以期能够证明在Vim 8.0中解决了这个特定问题。我真的也希望越来越多的统一映射候选者。
Ingo Karkat 2013年

这个问题实际上无法在vim(AFAIK)中解决。这取决于运行vim的终端。对于使用vte的各种用户(Gnone终端,Mate终端,Guake等),该问题最近已引起关注,并可能很快得到解决。请参阅此gnome错误:bugzilla.gnome.org/show_bug.cgi?
id=420039

@IngoKarkat参见上面的评论。^
trusktr 2013年

Answers:


8

由于键盘输入是在内部处理的,因此,今天通常无法实现这种操作。某些键组合(例如Ctrl+非字母)无法映射,并且Ctrl+字母vs. Ctrl+ Shift+字母无法区分。(除非您的终端为此发送了一个不同的termcap代码,但大多数情况下不会这样。)在插入或命令行模式下,尝试键入组合键。如果没有任何反应/未插入,则无法使用该组合键。这也适用于<Tab>/ <C-I><CR>/ <C-M>/ <Esc>/ <C-[>等。(唯一的例外是<BS>/ <C-H>。)这是一个已知的痛点,也是有关vim_dev和#vim IRC通道的各种讨论的主题。

有些人(最重要的是Paul LeoNerd Evans)想解决此问题(即使对于支持此功能的终端机中的控制台Vim),并提出了各种建议cp。http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

但是到目前为止,还没有补丁或自愿者出现,尽管许多人表示希望在将来的Vim 8主要发行版中使用它。


感谢你及时的答复。我想我只需要习惯于将ctrl-w用于vim,将ctrl-backspace用于浏览器。
user1026044

关于按Ctrl-W的好处是,它也能在击等
英戈Karkat

是的,我知道。但是您仍然必须对其他所有内容使用ctrl-backspace,而ctrl-w似乎是关闭其他任何位置的选项卡和窗口的标准配置,这一点令人讨厌。过一会儿我可能会习惯的。
user1026044

但这可以在vim代码库中解决吗?如果Vim代码库中运行的终端为两个键组合发送的Vim相同的确切输入,那么vim代码库中的任何代码如何区分Backspace和Ctrl + Backspace?似乎这是必须在运行vim的终端中固定的东西,而不是vim。例如,Guake同时发送^?退格键和ctrl +退格键,这使它们(AFAIK)无法区分。另一方面,xterm发送^H退格键和^?ctrl +退格键,使它们可区分。
trusktr 2013年

但不幸的是,在xterm中,退格键(^H)与ctrl + h(^H)是无法区分的。也许我们可以创建一个新的转义序列来区分所有这三个?我不知道这有多容易,但是似乎这样做是安全的,因为就目前的情况而言(某些终端^?用于退格,其他终端则用于退格,^H反之亦然)我无法想象很多终端应用(如果有的话)考虑ctrl +退格键场景(由于终端的种类,它是完全不确定的)...
trusktr 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.