2011-10-25 11 views
6

我是Vim的新手,试图设置一些插件。到目前为止,我已经安装了病原体,pyflakes和supertab。后者似乎并不奏效;在插入模式下按tab只需写入字符串<Plug>SuperTabForwardVim:set langmap = e; h破解supertab插件

该问题只与我的vimrc以下行发生(使用Colemak键盘布局更好的导航):

set langmap=hjklneiHJKLNEI;kniejhlKNIEJHL 

没有上面的线只是正常工作。经过进一步的实验,我已经缩小到set langmap=e;h。这条单线突破了超性能。

我对Vim完全没有足够的经验,无法知道正在发生什么或者如何解决它。即使是一种解决方法也会引起人们的兴趣。

+0

我有完全相同的问题。 – porgarmingduod

+0

我认为你的问题与[this one]类似(http://stackoverflow.com/questions/8464534/entering-text-in-snippet-fields-uses-wrong-character-when-using-langmap/8471492#8471492 )。 – romainl

+0

@romainl:其实,该链接让我尝试了一种解决方法(我在下面发布了一个答案)。它提出了比答案更多的问题,我很乐意将奖金奖给任何可以解释的人。 – porgarmingduod

回答

2

我想出了一个解决办法:编辑supertab.vim,与<P>P,这会导致像<Plug>SuperTabForward字符串成为<P>PForward更换的<Plug>SuperTab实例。

我认为它的工作原理是因为这些字符串不再包含任何涉及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. 

这是没有意义的,我这样过,然后,那langmap的映射字符在imap串的存在,那是什么一个插入模式映射,有什么区别。如果确实如此,它将随机破坏任何插件,例如使用长字符串的SuperTab。只是为了说明这是多么奇怪,如果我做imap no yes,写作jo是必要的,以使其触发。我不知道背后的逻辑是如何工作的。

+0

如果你有'set showmode',你是否在命令行中看到一个简短的' - SELECT --',而你点击了''? – romainl

+0

据我所知,还不够。它说' - INSERT - '和一个非常简短的'_'''''',我只有通过按住''键才能注意到。就这样。 – porgarmingduod

0

我有同样的问题,但这种解决方法不适合我的情况,所以我贴我自己的问题,有人提出,修复它补丁:

Vim langmap breaks plugin (bépo)

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

此修补程序引入了一种新的设置:langnoremap,它在设置时防止langmap影响此类映射。

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