Replacing quote marks around strings in Vim?
I have something akin to <Foobar Name='Hello There'/>
and need to change the single quotation marks to double quotation marks. I tried :s/\'.*\'/\"\0\"
but it ended up producing <Foobar Name="'Hello There'"/>
. Replacing the \0
with \1
only produced a blank string inside the double quotes - is there some special syntax I'm missing that I need to make only the found string ("Hello There") inside t开发者_StackOverflow社区he quotation marks assign to \1
?
There's also surround.vim, if you're looking to do this fairly often. You'd use cs'"
to change surrounding quotes.
You need to use groupings:
:s/\'\(.*\)\'/\"\1\"
This way argument 1 (ie, \1) will correspond to whatever is delimited by \( and \).
%s/'\([^']*\)'/"\1"/g
You will want to use [^']*
instead of .*
otherwise
'apples' are 'red'
would get converted to "apples' are 'red"
unless i'm missing something, wouldn't s/\'/"/g
work?
Just an FYI - to replace all double quotes with single, this is the correct regexp - based on rayd09's example above
:%s/"\([^"]*\)"/'\1'/g
You need to put round brackets around the part of the expression you wish to capture.
s/\'\(.*\)\'/"\1"/
But, you might have problems with unintentional matching. Might you be able to simply replace any single quotes with double quotes in your file?
You've got the right idea -- you want to have "\1"
as your replace clause, but you need to put the "Hello There" part in capture group 1 first (0 is the entire match). Try:
:%/'\(.*\)'/"\1"
Shift + V to enter visual block mode. Highlight the lines of code you want to remove single quotes from.
Then hit : on keyboard
Then type
s/'//g
Press Enter.
Done. You win.
Presuming you want to do this on an entire file ...
N Mode:
ggvG$ [SHIFT+:]
X Mode:
'<,'>/'/" [RET]
精彩评论