On 16/04/10 01:00, Benjamin R. Haskell wrote:
I encountered an oddity when trying to use the substitute() function to
prepend '# ' to the start of every line returned from a command.

A very simplified example:

I might expect
:echo substitute("a\na",'^','b','g')
to echo "ba\na"

But, why does
:echo substitute("a\na",'\_^','b','g')
also echo "ba\na" -- instead of "ba\nba"?

In the end, my ugly workaround was to use:
join(map(split(system(...),"\n"),'substitute(v:val,x,y,z)'),"\n")
where I wanted just:
substitute(system(...),x,y,z)


\_^ matches start-of-line. However, unlike the range of the :s[ubstitute] command, the first argument of the substitute() function is regarded by Vim as one line. It has therefore only one start-of-line -- at the very beginning of the string.

What you can do is use '^\|\n\zs' as second argument of substitute(), to match the start of the first argument or (zero-length) whatever follows an embedded linefeed.


Best regards,
Tony.
--
Overflow on /dev/null, please empty the bit bucket.

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

Subscription settings: http://groups.google.com/group/vim_use/subscribe?hl=en

Reply via email to