summaryrefslogtreecommitdiffstats
path: root/src/tag.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-02-13 21:19:14 +0100
committerBram Moolenaar <Bram@vim.org>2019-02-13 21:19:14 +0100
commit943e9639a9ecb08bdec78ae6695c917bca6210b9 (patch)
treed00072ca8b4c753fe1fb4f2dc024591bae4dec1d /src/tag.c
parent15bbd6ec871a0efdd16256e1fccbaac0fd374cbd (diff)
patch 8.1.0911: tag line with Ex command cannot have extra fieldsv8.1.0911
Problem: Tag line with Ex command cannot have extra fields. Solution: Recognize |;" as the end of the command. (closes #2402)
Diffstat (limited to 'src/tag.c')
-rw-r--r--src/tag.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/tag.c b/src/tag.c
index b1915e1e14..a148fbc0e9 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -3014,7 +3014,10 @@ parse_match(
p = tagp->command;
if (find_extra(&p) == OK)
{
- tagp->command_end = p;
+ if (p > tagp->command && p[-1] == '|')
+ tagp->command_end = p - 1; // drop trailing bar
+ else
+ tagp->command_end = p;
p += 2; /* skip ";\"" */
if (*p++ == TAB)
while (ASCII_ISALPHA(*p))
@@ -3784,7 +3787,7 @@ find_extra(char_u **pp)
{
char_u *str = *pp;
- /* Repeat for addresses separated with ';' */
+ // Repeat for addresses separated with ';'
for (;;)
{
if (VIM_ISDIGIT(*str))
@@ -3798,7 +3801,16 @@ find_extra(char_u **pp)
++str;
}
else
- str = NULL;
+ {
+ // not a line number or search string, look for terminator.
+ str = (char_u *)strstr((char *)str, "|;\"");
+ if (str != NULL)
+ {
+ ++str;
+ break;
+ }
+
+ }
if (str == NULL || *str != ';'
|| !(VIM_ISDIGIT(str[1]) || str[1] == '/' || str[1] == '?'))
break;