updated for version 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)
diff --git a/src/getchar.c b/src/getchar.c
index 946e757..e24a6ab 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -1924,6 +1924,7 @@
mapblock_T *mp;
#ifdef FEAT_LOCALMAP
mapblock_T *mp2;
+ int expecting_global_mappings;
#endif
mapblock_T *mp_match;
int mp_match_len = 0;
@@ -2105,6 +2106,7 @@
/* 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,6 +2130,16 @@
#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.
diff --git a/src/version.c b/src/version.c
index 32a81cf..e7f399b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1179,
+/**/
1178,
/**/
1177,