diff options
| author | Jan Edmund Lazo <janedmundlazo@hotmail.com> | 2018-08-27 19:23:40 -0400 | 
|---|---|---|
| committer | Jan Edmund Lazo <janedmundlazo@hotmail.com> | 2018-09-04 21:16:34 -0400 | 
| commit | 9d7dc49db133cabebc3b6017830020163526c533 (patch) | |
| tree | de24b3d4149e276b9db907c50a9cd287bfff743b /src/nvim/ex_cmds.c | |
| parent | 106b308ed4c99b1f2397ebd106974e07f934a9f8 (diff) | |
| download | rneovim-9d7dc49db133cabebc3b6017830020163526c533.tar.gz rneovim-9d7dc49db133cabebc3b6017830020163526c533.tar.bz2 rneovim-9d7dc49db133cabebc3b6017830020163526c533.zip  | |
vim-patch:8.1.0235: more help tags that jump to the wrong location
Problem:    More help tags that jump to the wrong location.
Solution:   Add more exceptions and a table for "expr-" tags. (Hirohito
            Higashi)
https://github.com/vim/vim/commit/3bf5e6a4c8eb84b44437d6148428565d44783eed
Diffstat (limited to 'src/nvim/ex_cmds.c')
| -rw-r--r-- | src/nvim/ex_cmds.c | 35 | 
1 files changed, 25 insertions, 10 deletions
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c index 8971c0c16c..7538e353c4 100644 --- a/src/nvim/ex_cmds.c +++ b/src/nvim/ex_cmds.c @@ -4688,7 +4688,8 @@ int find_help_tags(char_u *arg, int *num_matches, char_u ***matches, int keep_la    static char *(mtable[]) = {"*", "g*", "[*", "]*",                               "/*", "/\\*", "\"*", "**",                               "/\\(\\)", "/\\%(\\)", -                             "?", ":?", "-?", "?<CR>", "g?", "g?g?", "g??", +                             "?", ":?", "?<CR>", "g?", "g?g?", "g??", +                             "-?", "q?", "v_g?",                               "/\\?", "/\\z(\\)", "\\=", ":s\\=",                               "[count]", "[quotex]",                               "[range]", ":[range]", @@ -4698,26 +4699,40 @@ int find_help_tags(char_u *arg, int *num_matches, char_u ***matches, int keep_la    static char *(rtable[]) = {"star", "gstar", "[star", "]star",                               "/star", "/\\\\star", "quotestar", "starstar",                               "/\\\\(\\\\)", "/\\\\%(\\\\)", -                             "?", ":?", "-?", "?<CR>", "g?", "g?g?", "g??", +                             "?", ":?", "?<CR>", "g?", "g?g?", "g??", +                             "-?", "q?", "v_g?",                               "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",                               "\\[count]", "\\[quotex]",                               "\\[range]", ":\\[range]",                               "\\[pattern]", "\\\\bar", "/\\\\%\\$",                               "s/\\\\\\~", "s/\\\\U", "s/\\\\L",                               "s/\\\\1", "s/\\\\2", "s/\\\\3", "s/\\\\9"}; +  static char *(expr_table[]) = {"!=?", "!~?", "<=?", "<?", "==?", "=~?", +                                 ">=?", ">?", "is?", "isnot?"};    int flags;    d = IObuff;               /* assume IObuff is long enough! */ -  /* -   * Recognize a few exceptions to the rule.	Some strings that contain '*' -   * with "star".  Otherwise '*' is recognized as a wildcard. -   */ -  for (i = (int)ARRAY_SIZE(mtable); --i >= 0; ) -    if (STRCMP(arg, mtable[i]) == 0) { -      STRCPY(d, rtable[i]); -      break; +  if (STRNICMP(arg, "expr-", 5) == 0) { +    // When the string starting with "expr-" and containing '?' and matches +    // the table, it is taken literally.  Otherwise '?' is recognized as a +    // wildcard. +    for (i = (int)ARRAY_SIZE(expr_table); --i >= 0; ) { +      if (STRCMP(arg + 5, expr_table[i]) == 0) { +        STRCPY(d, arg); +        break; +      }      } +  } else { +    // Recognize a few exceptions to the rule.  Some strings that contain +    // '*' with "star".  Otherwise '*' is recognized as a wildcard. +    for (i = (int)ARRAY_SIZE(mtable); --i >= 0; ) { +      if (STRCMP(arg, mtable[i]) == 0) { +        STRCPY(d, rtable[i]); +        break; +      } +    } +  }    if (i < 0) {  /* no match in table */      /* Replace "\S" with "/\\S", etc.  Otherwise every tag is matched.  | 
