Nikolay Pavlov wrote:
> >> One of the points of initial suggestion was that `submatch()` is too
> >> long to type, `{m, c1, c2 -> c2 . c1 }` (pattern looks like `\(c1\)
> >> \(c2\)`, `m='c1 c2'`) is easier. Using lambdas like this just avoids
> >> escaping, though it alone already is a good improvement over current
> >> \= syntax.
> >
> > Yeah, I was wondering if we can pass the list of submatches to the
> > function.
> >
> > substitute(text, '\<\k*\>', {m -> 'key-' . m[0]}, 'g')
> >
> > Currently it would be:
> >
> > substitute(text, '\<\k*\>', {-> 'key-' . submatch(0)}, 'g'
> >
> > It does require that the function takes one argument, even when not
> > using it:
> >
> > substitute(text, '\<\k*\>', {m -> 'key-' . g:key}, 'g')
>
> Actually, not. It is possible to determine how many arguments a
> function accepts (also whether it accepts variable number, do not
> repeat one of the Neovim bugs) and construct argument list
> accordingly. Without this dealing with capturing groups may be tricky
> (specifically I mean cases when there *is* capturing group, but it
> matched nothing or it did not match: if I am not mistaking, regexp
> engine does not report how many capturing groups there are in the
> pattern).
>
> Note: unless `text` could be a list `submatch()` is no longer needed
> for substitute() with lambdas: the only feature lambdas do not provide
> here is the second non-zero argument of submatch().
>
> Probably, the easiest implementation would be something like below,
> but it has one downside: it will allocate memory for all captured
> groups and match, even if none are used (note: I have neither tested
> nor compiled this, it just shows the idea).
Well, yes, I suppose you could only pass the argument if the function
wants it. Or ignore the function taking fewer arguments.
I don't see a good reason to pass each submatch as a separate argument.
A list is much more convenient. The user is already used to the number
from "\1" in the :s command. A list of arguments is a hassle if only
using the third one.
It does require allocating a list, but since the matching costs
something anyway it won't be much extra.
--
ARTHUR: Be quiet!
DENNIS: --but by a two-thirds majority in the case of more--
ARTHUR: Be quiet! I order you to be quiet!
WOMAN: Order, eh -- who does he think he is?
ARTHUR: I am your king!
The Quest for the Holy Grail (Monty Python)
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
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.