I am new to Vim and trying to set up some plugins. So far I have installed pathogen, pyflakes and supertab. The latter does not seem to work; pressing tab
while in insert mode simply writes the string <Plug>SuperTabForward
.
The problem only occurs with the following line in my vimrc (for better navigation using colemak layout):
set langmap=hjklneiHJKLNEI;kniejhlKNIEJHL
Without the above line it works just fine. After further experiments I've narrowed it down to set langmap=e;h
. This single line breaks supertab.
I am entirely too inexperienced with Vim to have the faintest idea of what is going on or how to fix it. Even a workaround would be of interest.
I figured out a workaround: Editing
supertab.vim
, replacing instances of<Plug>SuperTab
with<P>P
, which causes strings like<Plug>SuperTabForward
to become<P>PForward
.I reckon it works because those strings no longer include any of the letters involved in
set langmap=hjklneiHJKLNEI;kniejhlKNIEJHL
. Several issues are unresolved still. Is langmap bugged? To me it seems the option exists explicitly to allow mapping that effects only commands:It makes no sense to me what so ever, then, that the presence of a langmap mapped character in an
imap
string, that is an insert mode mapping, makes any difference. If it does, it will randomly break any plugin such as SuperTab that uses longimap
strings. Just to illustrate how strange this is, if I doimap no yes
, writingjo
is necessary to make it trigger. I have no idea how the logic behind that works.I had the same problem, but this workaround didn't fit my case, so I posted my own question and someone made a patch that fixes it:
Vim langmap breaks plugin (bépo)
https://groups.google.com/forum/#!msg/vim_dev/QnNwLWhJ744/1qNcD7d9OvgJ (see the last message)
This patch introduces a new setting:
langnoremap
which, when set, preventslangmap
from affecting such mappings.It may need some more testing and may not be included in vim very soon, but it seems to work quite well!