Le mardi 16 mai 2017 14:25:11 UTC+2, ZyX a écrit :
> 2017-05-16 14:44 GMT+03:00 Ni Va <[email protected]>:
> > Le mardi 16 mai 2017 12:27:34 UTC+2, ZyX a écrit :
> >> 2017-05-16 11:38 GMT+03:00 Ni Va <[email protected]>:
> >> > Hi,
> >> >
> >> > How to retrieve the result of this expression in a vimscript var
> >> >
> >> > let myvar = executable(prevline.',.s/PATTERN//gn')
> >> >
> >> > this seems to don't work.
> >> >
> >> > thank you!
> >>
> >> I do not understand what “expression” you mean, but `executable` is
> >> for checking whether there is some executable e.g. for use in
> >> `system()`. Given that you are trying to feed it a VimL command I
> >> think you at least wanted `execute()`.
> >>
> >> >
> >> > --
> >> > --
> >> > 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
> >> >
> >> > ---
> >> > You received this message because you are subscribed to the Google 
> >> > Groups "vim_use" 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.
> >
> > Assuming this expre : prevline.',.s/PATTERN//gn' returns the number of 
> > occurences of pattern between prevline and currentline, I just want to 
> > store the result in a var.
> 
> The expression `prevline.',.s/PATTERN//gn'` returns a string which may
> look like a VimL command (depends on what is in `prevline`). It is not
> returning any numbers, it returns a string. If you execute this string
> as a VimL *command* (commands are not expressions, what is an
> expression is described at `:h expr`) it will print a number of
> occurrences of PATTERN and number of lines where they occurred.
> `execute` and `redir` are capable of capturing what command prints (it
> is not a *result*, it is one of the side effects, commands do not
> return anything).
> 
> You may do what you asked with `execute()`, but I would not suggest
> actually doing this: most of what built-in commands print is affected
> by the locale and the output you are seeking for definitely is. You
> need to either create a wrapper which calls `language messages C` and
> restores the locale afterwards, or use different technique to get the
> numbers:
> 
> ```VimL
> let d = {'total_count': 0, 'prevline': 0, 'line_count': 0}
> let pattern = 'PATTERN'
> let expr = 'extend(d, {"prevline": line("."), "total_count":
> d.total_count + 1, "line_count": d.line_count + (line(".") !=
> d.prevline)})'
> execute 'silent' printf('%s,s/%s/\=[%s, ""][-1]/en%s', prevline,
> pattern, expr, repeat('g', !&gdefault))
> 
> let myvar = printf('%u matches on %u lines', d.total_count, d.line_count)
> ```
> 
> Note that you also have not cared about `&gdefault` option. And my
> variant does not error out if there are zero matches (remove `e` from
> flags if you need this).
> 
> 
> >
> > Thanks
> >
> > --
> > --
> > 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
> >
> > ---
> > You received this message because you are subscribed to the Google Groups 
> > "vim_use" 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.

Thanks to you I understand better now, thank you very much

-- 
-- 
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

--- 
You received this message because you are subscribed to the Google Groups 
"vim_use" 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.

Reply via email to