【问题标题】:Vim: set langmap=e;h breaks supertab pluginVim: set langmap=e;h 打破 supertab 插件
【发布时间】:2011-12-14 21:38:36
【问题描述】:

我是 Vim 新手,正在尝试设置一些插件。到目前为止,我已经安装了病原体、pyflakes 和 supertab。后者似乎不起作用;在插入模式下按tab 只会写入字符串<Plug>SuperTabForward

问题仅出现在我的 vimrc 中的以下行(为了使用 colemak 布局更好地导航):

set langmap=hjklneiHJKLNEI;kniejhlKNIEJHL

如果没有上述行,它就可以正常工作。经过进一步的实验,我将其缩小到set langmap=e;h。这一行打破了 supertab。

我对 Vim 完全没有经验,根本不知道发生了什么或如何解决它。即使是解决方法也会很有趣。

【问题讨论】:

  • 我也有同样的问题。
  • 我觉得你的问题和this one类似。
  • @romainl:实际上,该链接让我尝试了一种解决方法(我在下面发布了答案)。不过,它提出的问题多于回答的问题,我很乐意将赏金奖励给任何可以解释的人。

标签: vim colemak


【解决方案1】:

我想出了一个解决方法:编辑supertab.vim,将<Plug>SuperTab 的实例替换为<P>P,这会导致<Plug>SuperTabForward 之类的字符串变为<P>PForward

我认为它有效,因为这些字符串不再包含set langmap=hjklneiHJKLNEI;kniejhlKNIEJHL 中涉及的任何字母。有几个问题还没有解决。 langmap 有问题吗?对我来说,似乎明确存在允许仅影响命令的映射的选项:

When you are typing text in Insert mode the characters are
inserted directly.  When in command mode the 'langmap' option takes
care of translating these special characters to the original meaning
of the key.  This means you don't have to change the keyboard mode to
be able to execute Normal mode commands.

那么,在imap 字符串中存在语言映射映射字符(即插入模式映射)对我来说毫无意义。如果是这样,它将随机破坏任何使用长 imap 字符串的插件,例如 SuperTab。只是为了说明这有多奇怪,如果我这样做imap no yes,则必须编写jo 以使其触发。我不知道这背后的逻辑是如何运作的。

【讨论】:

  • 如果您有set showmode,当您点击<Tab> 时,您是否会在命令行中看到一个简短的-- SELECT --
  • 据我所知没有。它说-- INSERT -- 和一个非常简短的=<SNR>17_SuperTab('n'),我只有按住<TAB> 键才注意到。就是这样。
【解决方案2】:

我遇到了同样的问题,但是这个解决方法不适合我的情况,所以我发布了我自己的问题,并且有人制作了一个补丁来修复它:

Vim langmap breaks plugin (bépo)

https://groups.google.com/forum/#!msg/vim_dev/QnNwLWhJ744/1qNcD7d9OvgJ(见最后一条消息)

此补丁引入了一个新设置:langnoremap,设置后可防止langmap 影响此类映射。

它可能需要更多测试,可能不会很快包含在 vim 中,但它似乎工作得很好!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2013-06-10
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    相关资源
    最近更新 更多