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;

Raspunde prin e-mail lui