为什么这个键重映射在Vim中不起作用?

时间:2014-05-24 15:47:58

标签: vim key-bindings gnome-terminal autokey

这个问题让我真的很疯狂。我过去在Windows 7下使用过Gvim和Autohotkey。出于各种原因,我将CTRL + D映射到表现为Enter。这到目前为止运作良好。 在Gvim中,我将Enter / Return映射为向下翻页键:

nnoremap <cr> <PageDown> 

这很好用。上周我决定再次尝试Ubuntu。

使用Autokey,我重新映射了我的CTRL + D,表现得像Enter。

keyboard.send_key("<enter>")

这在Ubuntu / Xubuntu,浏览器/ Chrome,文本编辑器等所有内容中都运行良好。我正在使用Gnome终端。在那里,CTRL + D表现得像Enter。

当我在插入模式下处于Vim时,CTRL + D与Enter相同。在正常模式下,我没有得到nnoremap的预期行为。

我发现这很奇怪,因为CTRL + D在终端和Vim的插入模式下运行良好。当我按'真实'回车。我得到了行为(在Vim中向下翻页)但在正常模式下我没有得到与映射的CTRL + D相同的行为。在插入模式下,它的行为类似于Enter。我试图更改地图,以便检测问题,例如:

nnoremap <return> <PageDown>

nnoremap <Enter> <PageDown>

nnoremap <cr> ij

nnoremap <CR> ij

在正常模式下,CTRL + D到目前为止还没有任何工作。我觉得奇怪的是它在插入模式和终端中运行良好。我查看了Vim的手册,了解了这里的一些想法。没有结果。

我使用Vim作为我的日常编辑器,所以我对此感到非常生气,因为我不明白为什么在正常模式下会出现此问题。谁知道那里发生了什么?我非常感谢你的帮助,因为这让我非常疯狂。

1 个答案:

答案 0 :(得分:1)

我没有得到修复。所以我决定以另一种方式破解它。

这是我的自动键脚本

winTitle = window.get_active_title()
if 'VIM' in winTitle:
    output = "<f8>"
    keyboard.send_key(output)

else:
    output = "<PageDown>"
    keyboard.send_key(output)

你知道,如果我有VIM窗口,CTRL + D会将F8发送给Vim。

我在Vim中映射了这样的F8:

map <f8> <CR>
nnoremap <CR> <PageDown>

它有效,但不是按照它的意图。但似乎我别无选择。感谢Zyx和romainl的帮助,非常感谢!