Hi lilydjwg,
2016-1-17(Sun) 17:52:00 UTC+9 依云:
> On Sat, Jan 16, 2016 at 04:49:58PM +0100, Bram Moolenaar wrote:
> >
> > Patch 7.4.1105
> > Problem: When using slices there is a mixup of variable name and
> > namespace.
> > Solution: Recognize variables that can't be a namespace. (Hirohito
> > Higashi)
> > Files: src/eval.c, src/testdir/test_eval.in, src/testdir/test_eval.ok
>
> This patch breaks EnhCommentify.vim[1]. It has things like this:
>
> if exists(ns .":EnhCommentifyPretty")
> if {ns}:EnhCommentifyPretty =~? 'ye*s*'
> let {lns}:ECprettyComments = ' '
> let {lns}:ECprettyUnComments = ' \='
> else
> let {lns}:ECprettyComments = ''
> let {lns}:ECprettyUnComments = ''
> endif
> else
> let {lns}:ECprettyComments = s:ECprettyComments
> let {lns}:ECprettyUnComments = s:ECprettyUnComments
> endif
>
> Vim says this:
>
> Error detected while processing function <SNR>47_InitScriptVariables:
> line 15:
> E121: Undefined variable: g
> E15: Invalid expression: {ns}:EnhCommentifyPretty =~? 'ye*s*'
> line 16:
> E488: Trailing characters
>
> Is this intentional?
>
> [1]: http://www.vim.org/scripts/script.php?script_id=23
I reproduce it.
Please confirm attached patch.
--
Best regards,
Hirohito Higashi (a.k.a h_east)
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.
diff --git a/src/eval.c b/src/eval.c
index d4e3b9e..1c30abf 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -20814,11 +20814,11 @@ find_name_end(arg, expr_start, expr_end, flags)
if (*p == NUL)
break;
}
- else if (br_nest == 0 && mb_nest == 0 && *p == ':')
+ else if (br_nest > 0 && mb_nest == 0 && *p == ':')
{
/* "s:" is start of "s:var", but "n:" is not and can be used in
* slice "[n:]". Also "xx:" is not a namespace. */
- len = (int)(p - arg);
+ len = (int)(p - arg - br_nest);
if ((len == 1 && vim_strchr(NAMESPACE_CHAR, *arg) == NULL)
|| len > 1)
break;