【发布时间】:2012-12-29 01:47:38
【问题描述】:
我有一个函数,我想映射到 Windows 上 gVim 中的 Alt+o (Win7 上的 7.3.46 32 位 Bram@KIBAALE 大版本- x64) 并且它...无法正常工作。
我的 .vimrc 有一行写着:
nnoremap <A-o> :call SplitRelatedFile()<CR>
然后我启动 gVim,加载一个文件,点击 Alt+o 并听到哔声。我尝试在映射中使用大写 O,我尝试在 gVim 中使用和不使用 shift,但它不起作用,我只是听到哔哔声。 (我也试过<M-o>。)
如果我在终端中加载 Vim,它会按预期工作。如果我在新的 gVim 实例中手动执行上述行,它也可以按预期工作。只有当它出现在 .vimrc 中时它才不起作用。实际上,它出现在另一个文件中,但我的 _vimrc 只有一行显示source x:/path/to/my.vimrc。
当我查看 :map 的输出时,无论如何我都没有将 alt 键列为 alt 键,大概是由于第 8 位解释交叉了一些东西。不过我看到的是……
n <ef> * :call SplitRelatedFile()<CR>
在我在 gVim 中手动运行 :nnoremap 后,我看到了这一点(如果这篇文章有任何字符翻译问题,第一行显示 i-umlaut 作为键):
n ï * :call SplitRelatedFile()<CR>
n <ef> * :call SplitRelatedFile()<CR>
所以似乎第 8 位在 Vim (GUI) 启动的不同点上得到不同的解释?对于它的价值,当我在控制台 Vim 中运行 :map 时,我也得到了 i-umlaut 而不是 <ef> 行(o 在 ASCII 中是 0x6F,所以如果设置了高位,则为 0xEF,所以这个非常有意义;i-umlaut 似乎是 0x8B)。
我尝试了几个不同的 Alt 组合键,但没有一个能在 gVim 中幸存下来,所以我很好奇是否有人有任何提示。也许我可以以某种方式将这些填充到某种“延迟加载”模块中,例如本地插件或其他东西?
我可以离开 Alt 键,但我没有功能键,不想踩踏明显的 Ctrl 键来实现此功能...我刚刚发现我可以用 Ctrl+v,Alt+o 的结果替换 <A-o>这确实有效(因为我在我的 vimrc 中得到了 i-umlaut),但这不是很好!对这种疯狂有什么想法吗? (哦,这对控制台 Vim 不起作用,我需要保留 Alt 版本,以备 has("gui") 返回 false 时使用。)
我现在注意到 gVim 和控制台 Vim 都将 i-umlaut 报告为 0xEF 所以......我不知道我需要做些什么来减少这种混乱。请帮帮我!
感谢您的建议。
【问题讨论】:
-
您(或某些插件)是否在某个时候修改了
'encoding'?之后,之前的映射可能不再起作用。 -
LOL 我刚刚意识到并来到这里评论并查看您的查询。
encoding在解析 vimrc 时是 latin1,但在某些时候变成了 utf-8 ......事实上它在我的 gvimrc 中发生了变化。我想知道是否有任何理由让它在那里而不是在 vimrc 中(这是我三年多前开始使用 Vim 时从同事那里复制的为数不多的配置行之一)...... -
啊,很高兴看到我的预感得到证实!我已将我的评论扩展为正确的答案。