【问题标题】:Mapping alt keys in Vim on Windows在 Windows 上的 Vim 中映射 alt 键
【发布时间】: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,但它不起作用,我只是听到哔哔声。 (我也试过&lt;M-o&gt;。)

如果我在终端中加载 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 而不是 &lt;ef&gt; 行(o 在 ASCII 中是 0x6F,所以如果设置了高位,则为 0xEF,所以这个非常有意义;i-umlaut 似乎是 0x8B)。

我尝试了几个不同的 Alt 组合键,但没有一个能在 gVim 中幸存下来,所以我很好奇是否有人有任何提示。也许我可以以某种方式将这些填充到某种“延迟加载”模块中,例如本地插件或其他东西?

我可以离开 Alt 键,但我没有功能键,不想踩踏明显的 Ctrl 键来实现此功能...我刚刚发现我可以用 Ctrl+v,Alt+o 的结果替换 &lt;A-o&gt;这确实有效(因为我在我的 vimrc 中得到了 i-umlaut),但这不是很好!对这种疯狂有什么想法吗? (哦,这对控制台 Vim 不起作用,我需要保留 Alt 版本,以备 has("gui") 返回 false 时使用。)

我现在注意到 gVim 和控制台 Vim 都将 i-umlaut 报告为 0xEF 所以......我不知道我需要做些什么来减少这种混乱。请帮帮我!

感谢您的建议。

【问题讨论】:

  • 您(或某些插件)是否在某个时候修改了'encoding'?之后,之前的映射可能不再起作用。
  • LOL 我刚刚意识到并来到这里评论并查看您的查询。 encoding 在解析 vimrc 时是 latin1,但在某些时候变成了 utf-8 ......事实上它在我的 gvimrc 中发生了变化。我想知道是否有任何理由让它在那里而不是在 vimrc 中(这是我三年多前开始使用 Vim 时从同事那里复制的为数不多的配置行之一)......
  • 啊,很高兴看到我的预感得到证实!我已将我的评论扩展为正确的答案。

标签: windows vim


【解决方案1】:

映射(尤其是与设置了第 8 位的 Alt 的组合)容易受到 'encoding' 更改的影响,并且可能会在您以后修改它时中断。

一般来说,如果你想:set encoding=...,它应该是你.vimrc文件中的第一件事。

【讨论】:

  • 换句话说,不要在 gvimrc 中设置 encoding 设置。 :) 谢谢。
  • 在 Neovim (neovim.io) 中,在终端以及在 neovim-qt 等 GUI 中映射 alt 键“Just Works”。
猜你喜欢
  • 2011-11-21
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 2010-10-20
  • 2011-06-15
  • 2017-11-20
相关资源
最近更新 更多