Vim:设置langmap = e; h打破supertab插件

时间:2011-10-25 12:12:37

标签: vim colemak

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

问题只发生在我的vimrc中的以下行(为了更好地使用colemak布局进行导航):

set langmap=hjklneiHJKLNEI;kniejhlKNIEJHL

如果没有上述行,它就可以了。经过进一步的实验,我把它缩小到set langmap=e;h。这条单行破坏了超级特征。

我对Vim完全缺乏经验,无法了解正在发生的事情或如何解决问题。即使是解决方案也会引起人们的兴趣。

2 个答案:

答案 0 :(得分:2)

我找到了一种解决方法:修改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字符串中存在langmap映射字符,即插入模式映射,会产生任何不同。如果是这样,它将随机破坏任何插件,例如使用长imap字符串的SuperTab。只是为了说明这是多么奇怪,如果我imap no yes,编写jo是必要的,以使其触发。我不知道它背后的逻辑如何运作。

答案 1 :(得分:0)

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

Vim langmap breaks plugin (bépo)

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

此修补程序引入了一项新设置:langnoremap,设置后会阻止langmap影响此类映射。

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