Bram,
what is the reason, setting 'lmap' applies to when a mapping is 
remapped?

Consider this:
~$ cat lmap.vim
imap <tab> <Plug>MyPluginEcho
imap <Plug>MyPluginEcho <c-r>="hello"<cr>
cmap <tab> <Plug>MyPluginEcho
cmap <Plug>MyPluginEcho <c-r>="hello"<cr>
" set lmap=i;k

run vim -u lmap.vim -N
and type <tab> in insert mode, note, how "hello" is printed in either 
insert mode or command line mode.
Now do
:set lmap=i;k
and do it again. Note that <Plug>MyPluginEcho will be output. 

The problem is, setting lmap breaks plugins (see e.g. here:
http://stackoverflow.com/questions/12450803)

I would consider this is a bug and actually think, that setting 'lmap' should 
never be applied to when recursively resolving a mapping. 

Also, I do not understand what this part of the help is trying to say:

,----[ :h 'lmap' ]-
| This will allow you to activate vim actions without having to switch
| back and forth between the languages.  Your language characters will
| be understood as normal vim English characters (according to the
| langmap mappings) in the following cases:
|  o Normal/Visual mode (commands, buffer/register names, user mappings)
|  o Insert/Replace Mode: Register names after CTRL-R
|  o Insert/Replace Mode: Mappings
| Characters entered in Command-line mode will NOT be affected by
| this option.   Note that this option can be changed at any time
| allowing to switch between mappings for different languages/encodings.
| Use a mapping to avoid having to type it each time!
`----

What are the language characters? What is the relationship to lmap 
mappings?

This patch could fix it, but I am not sure, this fixes it correctly.

diff --git a/src/getchar.c b/src/getchar.c
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -2196,12 +2196,16 @@ vgetorpeek(advance)
                                {
 #ifdef FEAT_LANGMAP
                                    c2 = typebuf.tb_buf[typebuf.tb_off + mlen];
-                                   if (nomap > 0)
-                                       --nomap;
-                                   else if (c2 == K_SPECIAL)
-                                       nomap = 2;
-                                   else
-                                       LANGMAP_ADJUST(c2, TRUE);
+                                   /* do not apply lmap setting when resolving 
a mapping */
+                                   if (typebuf_maplen() != typebuf.tb_len)
+                                   {
+                                       if (nomap > 0)
+                                           --nomap;
+                                       else if (c2 == K_SPECIAL)
+                                           nomap = 2;
+                                       else
+                                           LANGMAP_ADJUST(c2, TRUE);
+                                   }
                                    if (mp->m_keys[mlen] != c2)
 #else
                                    if (mp->m_keys[mlen] !=



Mit freundlichen Grüßen
Christian
-- 
Letzte Worte eines Dachdeckers:
  "Mensch ist das heute ein Wind"

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui