Monday, March 5, 2012

Re: Curly brace expansion oddity (was "How to clear number registers")

diff --git a/src/eval.c b/src/eval.c
--- a/src/eval.c
+++ b/src/eval.c
@@ -2435,13 +2435,29 @@
if (op != NULL && (*op == '+' || *op == '-'))
EMSG2(_(e_letwrong), op);
else if (endchars != NULL
- && vim_strchr(endchars, *skipwhite(arg + 1)) == NULL)
+ && (vim_strchr(arg, '{') == NULL ||
+ vim_strchr(arg, '}') == NULL)
+ && vim_strchr(endchars, *skipwhite(arg + 1)) == NULL)
EMSG(_(e_letunexp));
else
{
char_u *ptofree = NULL;
char_u *s;

+ if (vim_strchr(arg, '{') != NULL
+ && vim_strchr(arg, '}') != NULL)
+ {
+ /* brace expansion */
+ char_u *alias;
+ int l = 0;
+
+ l = get_name_len(&arg, &alias, TRUE, TRUE);
+ if (alias != NULL)
+ arg = alias;
+ if (l <= 0)
+ EMSG(_(e_letunexp));
+ }
+
p = get_tv_string_chk(tv);
if (p != NULL && op != NULL && *op == '.')
{
@@ -5086,6 +5102,20 @@
* Register contents: @r.
*/
case '@': ++*arg;
+ if (vim_strchr(*arg, '{') != NULL
+ && vim_strchr(*arg, '}') != NULL)
+ {
+ /* brace expansion */
+ len = get_name_len(arg, &alias, TRUE, TRUE);
+ if (alias != NULL)
+ *arg = alias;
+ if (len <= 0)
+ {
+ EMSG(_("EXXX: Failed to evaluate '{expr}'"));
+ clear_tv(rettv);
+ ret = FAIL;
+ }
+ }
if (evaluate)
{
rettv->v_type = VAR_STRING;
Hi Bram,

On So, 04 Mär 2012, Tim Chase wrote:

> On 03/04/12 00:49, Paul Isambert wrote:
> >howard Schwartz<howardb21@gmail.com> a écrit:
> >>au BufRead * for i in range(1,9) | let @i = "" | endfor
> >
> >You should use ":exe[cute]":
> >
> > au BufRead * for i in range(1,9) | exe "let @" . i . " = ''" | endfor
>
>
> In attempting to answer for this, I reached for
> curly-braces-expansion but discovered it didn't work as expected:
>
> :let i=3
> :let @{i}=''
> :echo @{i}
>
> returned an E18 (on the let) and an E15 (on the echo). If I issue
>
> :let i=3
> :let x{i}=42
> :echo x3
>
> it works as expected. Reading up at
>
> :help curly-braces-names
>
> doesn't give me much insight. Any takers to tell me it's a bug or
> point out my misunderstanding?

Attached patch fixes it


regards,
Christian

--
You received this message from the "vim_use" 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

No comments: