为什么这个键重映射不能在Vim中工作?



这个问题真让我抓狂。我过去在Windows 7下使用过Gvim和自动热键。出于各种原因,我将CTRL+D映射为类似Enter的行为。到目前为止,这种方法运行良好。在Gvim中,我映射了Enter/Return作为下页键:

nnoremap <cr> <PageDown> 

这工作得很好。上周我决定再试一次Ubuntu。

与Autokey,我重新映射我的CTRL+D行为像Enter。

keyboard.send_key("<enter>")

这在Ubuntu/Xubuntu、浏览器/Chrome、文本编辑器等所有系统中都运行良好。我正在使用侏儒终端。这里,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作为我的日常编辑器,所以我对此感到很生气,因为我不明白为什么在正常模式下会出现这个问题。有人知道这是怎么回事吗?我真的很感激你的帮助,因为这真的让我发疯了。

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

这是我的Autokey脚本
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和romain的帮助,非常感谢!

最新更新