To: vim_dev@googlegroups.com Subject: Patch 7.3.1179 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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 argument to remove buffer-local + mappings |:map-| Warning: This also removes the default mappings. :map |mapmode-nvo| *************** *** 173,178 **** --- 175,181 ---- :mapclear 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-* *: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-|) 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 \a :echo "Local \a" + :map \abc :echo "Global \abc" + 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 -- Bram@Moolenaar.net -- 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 ///