Hi,

sinbad schrieb am 08.12.2016 um 08:57:
> 
> I have a file contents as follows, i want to change the text from abc("def"); 
> to
> foo(("def")); in multiple files.
> 
> It works if i run the command, but the same thing fails if i run the same 
> command using bufdo;
> 
> works-> :s/abc(\(.*\));/foo((\1));/gc

I assume you wanted to change the text in the whole file; thus you need
do provide the range 1,$ or % for the substitute command. Otherwise you
will only change the text on the one line where you cursor currently
happens to be.

> fails-> :bufdo execute "s/abc(\(.*\));/foo((\1));/"
> 
> error: E486: Pattern not found: abc((.*));

This command fails because you enclosed the command in double quotes.
Inside double quotes the backslash has a special meaning.

You can fix this by either doubling every backslash which effectively
uses the backslash to escape itself:

  :bufdo execute "%s/abc(\\(.*\\));/foo((\\1));/"

Or you can use single quotes where the backslash has no special meaning:

  :bufdo execute '%s/abc(\(.*\));/foo((\1));/'

Or get rid of the execute command and use the substitute command directly:

  :bufdo %s/abc(\(.*\));/foo((\1));/

I'd prefer the last solution.

Regards,
Jürgen

-- 
Sometimes I think the surest sign that intelligent life exists elsewhere
in the universe is that none of it has tried to contact us.     (Calvin)

-- 
-- 
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 vim_use+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to