Patch 7.3.1179
Problem:    When a global mapping starts with the same characters as a
            buffer-local mapping Vim waits for a character to be typed to find
            out whether the global mapping is to be used. (Andy Wokula)
Solution:   Use the local mapping without waiting. (Michael Henry)
Files:      runtime/doc/map.txt, src/getchar.c


*** ../vim-7.3.1178/runtime/doc/map.txt 2013-06-08 15:24:41.000000000 +0200
--- runtime/doc/map.txt 2013-06-12 20:50:01.000000000 +0200
***************
*** 107,112 ****
--- 107,114 ----
  :cmapc[lear]                  |mapmode-c|             *:cmapc*  *:cmapclear*
                        Remove ALL mappings for the modes where the map
                        command applies.  {not in Vi}
+                       Use the <buffer> argument to remove buffer-local
+                       mappings |:map-<buffer>|
                        Warning: This also removes the default mappings.
  
  :map                          |mapmode-nvo|
***************
*** 173,178 ****
--- 175,181 ----
        :mapclear <buffer>
  Local mappings are also cleared when a buffer is deleted, but not when it is
  unloaded.  Just like local option values.
+ Also see |map-precedence|.
  
                                                *:map-<silent>* *:map-silent*
  To define a mapping which will not be echoed on the command line, add
***************
*** 644,649 ****
--- 655,672 ----
  you type slowly, or your system is slow, reset the 'timeout' option.  Then you
  might want to set the 'ttimeout' option.
  
+                                                       *map-precedence*
+ Buffer-local mappings (defined using |:map-<buffer>|) take precedence over
+ global mappings.  When a buffer-local mapping is the same as a global mapping,
+ Vim will use the buffer-local mapping.  In addition, Vim will use a complete
+ buffer-local mapping immediately, even if a longer global mapping has the
+ buffer-local mapping as a prefix.  For example, given the following two
+ mappings: >
+     :map <buffer> \a   :echo "Local \a"<CR>
+     :map          \abc :echo "Global \abc"<CR>
+ The buffer-local mapping \a will be used immediately.  Vim will not wait for
+ more characters to see if the user might be typing \abc.
+ 
                                                        *map-keys-fails*
  There are situations where key codes might not be recognized:
  - Vim can only read part of the key code.  Mostly this is only the first
*** ../vim-7.3.1178/src/getchar.c       2013-05-06 05:50:22.000000000 +0200
--- src/getchar.c       2013-06-12 20:52:49.000000000 +0200
***************
*** 1924,1929 ****
--- 1924,1930 ----
      mapblock_T        *mp;
  #ifdef FEAT_LOCALMAP
      mapblock_T        *mp2;
+     int               expecting_global_mappings;
  #endif
      mapblock_T        *mp_match;
      int               mp_match_len = 0;
***************
*** 2105,2110 ****
--- 2106,2112 ----
                        /* First try buffer-local mappings. */
                        mp = curbuf->b_maphash[MAP_HASH(local_State, c1)];
                        mp2 = maphash[MAP_HASH(local_State, c1)];
+                       expecting_global_mappings = (mp && mp2);
                        if (mp == NULL)
                        {
                            mp = mp2;
***************
*** 2128,2133 ****
--- 2130,2145 ----
  #endif
                                (mp = mp->m_next))
                        {
+ #ifdef FEAT_LOCALMAP
+                           if (expecting_global_mappings && mp2 == NULL)
+                           {
+                               /* This is the first global mapping. If we've
+                                * got a complete buffer-local match, use it. */
+                               if (mp_match)
+                                   break;
+                               expecting_global_mappings = FALSE;
+                           }
+ #endif
                            /*
                             * Only consider an entry if the first character
                             * matches and it is for the current state.
*** ../vim-7.3.1178/src/version.c       2013-06-12 20:35:46.000000000 +0200
--- src/version.c       2013-06-12 20:56:36.000000000 +0200
***************
*** 730,731 ****
--- 730,733 ----
  {   /* Add new patch number below this line */
+ /**/
+     1179,
  /**/

-- 
If Apple would build a car...
... it would be powered by the sun, be reliable, five times
as fast and twice as easy to drive; but would only run on
five percent of the roads.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
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/groups/opt_out.


Raspunde prin e-mail lui