mirror of
https://github.com/vim/vim.git
synced 2025-09-28 04:24:06 -04:00
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)
This commit is contained in:
@@ -6583,7 +6583,8 @@ find_help_tags(
|
|||||||
static char *(mtable[]) = {"*", "g*", "[*", "]*", ":*",
|
static char *(mtable[]) = {"*", "g*", "[*", "]*", ":*",
|
||||||
"/*", "/\\*", "\"*", "**",
|
"/*", "/\\*", "\"*", "**",
|
||||||
"cpo-*", "/\\(\\)", "/\\%(\\)",
|
"cpo-*", "/\\(\\)", "/\\%(\\)",
|
||||||
"?", ":?", "-?", "?<CR>", "g?", "g?g?", "g??",
|
"?", ":?", "?<CR>", "g?", "g?g?", "g??",
|
||||||
|
"-?", "q?", "v_g?",
|
||||||
"/\\?", "/\\z(\\)", "\\=", ":s\\=",
|
"/\\?", "/\\z(\\)", "\\=", ":s\\=",
|
||||||
"[count]", "[quotex]",
|
"[count]", "[quotex]",
|
||||||
"[range]", ":[range]",
|
"[range]", ":[range]",
|
||||||
@@ -6593,27 +6594,43 @@ find_help_tags(
|
|||||||
static char *(rtable[]) = {"star", "gstar", "[star", "]star", ":star",
|
static char *(rtable[]) = {"star", "gstar", "[star", "]star", ":star",
|
||||||
"/star", "/\\\\star", "quotestar", "starstar",
|
"/star", "/\\\\star", "quotestar", "starstar",
|
||||||
"cpo-star", "/\\\\(\\\\)", "/\\\\%(\\\\)",
|
"cpo-star", "/\\\\(\\\\)", "/\\\\%(\\\\)",
|
||||||
"?", ":?", "-?", "?<CR>", "g?", "g?g?", "g??",
|
"?", ":?", "?<CR>", "g?", "g?g?", "g??",
|
||||||
|
"-?", "q?", "v_g?",
|
||||||
"/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
|
"/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
|
||||||
"\\[count]", "\\[quotex]",
|
"\\[count]", "\\[quotex]",
|
||||||
"\\[range]", ":\\[range]",
|
"\\[range]", ":\\[range]",
|
||||||
"\\[pattern]", "\\\\bar", "/\\\\%\\$",
|
"\\[pattern]", "\\\\bar", "/\\\\%\\$",
|
||||||
"s/\\\\\\~", "s/\\\\U", "s/\\\\L",
|
"s/\\\\\\~", "s/\\\\U", "s/\\\\L",
|
||||||
"s/\\\\1", "s/\\\\2", "s/\\\\3", "s/\\\\9"};
|
"s/\\\\1", "s/\\\\2", "s/\\\\3", "s/\\\\9"};
|
||||||
|
static char *(expr_table[]) = {"!=?", "!~?", "<=?", "<?", "==?", "=~?",
|
||||||
|
">=?", ">?", "is?", "isnot?"};
|
||||||
int flags;
|
int flags;
|
||||||
|
|
||||||
d = IObuff; /* assume IObuff is long enough! */
|
d = IObuff; /* assume IObuff is long enough! */
|
||||||
|
|
||||||
/*
|
if (STRNICMP(arg, "expr-", 5) == 0)
|
||||||
* Recognize a few exceptions to the rule. Some strings that contain '*'
|
{
|
||||||
* with "star". Otherwise '*' is recognized as a wildcard.
|
// When the string starting with "expr-" and containing '?' and matches
|
||||||
*/
|
// the table, it is taken literally. Otherwise '?' is recognized as a
|
||||||
for (i = (int)(sizeof(mtable) / sizeof(char *)); --i >= 0; )
|
// wildcard.
|
||||||
if (STRCMP(arg, mtable[i]) == 0)
|
for (i = (int)(sizeof(expr_table) / sizeof(char *)); --i >= 0; )
|
||||||
{
|
if (STRCMP(arg + 5, expr_table[i]) == 0)
|
||||||
STRCPY(d, rtable[i]);
|
{
|
||||||
break;
|
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)(sizeof(mtable) / sizeof(char *)); --i >= 0; )
|
||||||
|
if (STRCMP(arg, mtable[i]) == 0)
|
||||||
|
{
|
||||||
|
STRCPY(d, rtable[i]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (i < 0) /* no match in table */
|
if (i < 0) /* no match in table */
|
||||||
{
|
{
|
||||||
|
@@ -26,11 +26,34 @@ func Test_help_tagjump()
|
|||||||
call assert_true(getline('.') =~ '\*:?\*')
|
call assert_true(getline('.') =~ '\*:?\*')
|
||||||
helpclose
|
helpclose
|
||||||
|
|
||||||
|
help q?
|
||||||
|
call assert_equal("help", &filetype)
|
||||||
|
call assert_true(getline('.') =~ '\*q?\*')
|
||||||
|
call assert_true(expand('<cword>') == 'q?')
|
||||||
|
helpclose
|
||||||
|
|
||||||
help -?
|
help -?
|
||||||
call assert_equal("help", &filetype)
|
call assert_equal("help", &filetype)
|
||||||
call assert_true(getline('.') =~ '\*-?\*')
|
call assert_true(getline('.') =~ '\*-?\*')
|
||||||
helpclose
|
helpclose
|
||||||
|
|
||||||
|
help v_g?
|
||||||
|
call assert_equal("help", &filetype)
|
||||||
|
call assert_true(getline('.') =~ '\*v_g?\*')
|
||||||
|
helpclose
|
||||||
|
|
||||||
|
help expr-!=?
|
||||||
|
call assert_equal("help", &filetype)
|
||||||
|
call assert_true(getline('.') =~ '\*expr-!=?\*')
|
||||||
|
call assert_true(expand('<cword>') == 'expr-!=?')
|
||||||
|
helpclose
|
||||||
|
|
||||||
|
help expr-isnot?
|
||||||
|
call assert_equal("help", &filetype)
|
||||||
|
call assert_true(getline('.') =~ '\*expr-isnot?\*')
|
||||||
|
call assert_true(expand('<cword>') == 'expr-isnot?')
|
||||||
|
helpclose
|
||||||
|
|
||||||
help FileW*Post
|
help FileW*Post
|
||||||
call assert_equal("help", &filetype)
|
call assert_equal("help", &filetype)
|
||||||
call assert_true(getline('.') =~ '\*FileWritePost\*')
|
call assert_true(getline('.') =~ '\*FileWritePost\*')
|
||||||
|
@@ -794,6 +794,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
235,
|
||||||
/**/
|
/**/
|
||||||
234,
|
234,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user