2011-10-25 39 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中,但它似乎工作得很好!