2014-05-24 70 views
1

这个问题让我真的很疯狂。过去,我在Windows 7下使用了Gvim和Autohotkey。出于各种原因,我将CTRL + D映射为像Enter一样。迄今为止,这工作得很好。 在GVIM我映射的输入/返回充当Page Down键:为什么这个关键映射在Vim中不起作用?

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作为我的日常编辑器,所以我对此感到很生气,因为我不明白为什么这个问题会在正常模式下发生。任何人都知道那里发生了什么?我真的很感谢你的帮助,因为这让我非常疯狂。

+0

Vim在正常模式下收到了什么_is_?按':',显示什么?如果它是默认的'^ M'(或其他可映射的),则可以使用':nnoremap '来解决。 –

+0

感谢您的回复。我在Vim的命令行输入以下内容:然后我收到一个错误:E488:尾随字符。但是我的命令中没有空格。为什么我会收到这条消息? –

+0

@JuliusMartin尝试使用'while nr2char(getchar(1))!=“\ ”| echomsg字符串(getchar(1))字符串(nr2char(getchar())) end'':它应该以'code'字符''的形式回显收到的字符。虽然你在窗户上,但我也会检查':',因为你可能在某处有'mswin',并重新映射''。 – ZyX

回答

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的帮助,非常感谢!