У меня есть что-то сродни <Foobar Name='Hello There'/>
и должен изменить одинарные кавычки для удвоения кавычек. Я попробовал :s/\'.*\'/\"\0\"
но это закончило тем, что произвело <Foobar Name="'Hello There'"/>
. Замена \0
с \1
только произведенный пустая строка в двойных кавычках - является там некоторым специальным синтаксисом, я пропускаю это, я должен сделать только найденную строку ("Привет Там") в кавычках, присваиваются к \1
?
Вам необходимо использовать группировки:
:s/\'\(.*\)\'/\"\1\"
Таким образом, аргумент 1 (т. Е. \ 1) будет соответствовать тому, что будет разграничено \ (и \).
Если я что-то не хватает, не будет S / \ '/ «/ G
работа?
Вам нужно поставить круглые кронштейны вокруг части выражения, которое вы хотите захватить.
s/\'\(.*\)\'/"\1"/
Но у вас могут возникнуть проблемы с непреднамеренным сопоставлением. Можете ли вы просто заменить любые цитаты с двойными кавычками в вашем файле?
У вас есть правильная идея - вы хотите иметь «\ 1»
в качестве пункта замены, но вам нужно поставить «Hello там» в группе захвата 1 первым (0 - весь матч). Попробуйте:
:% / '\ (. * \)' / "\ 1"
% S / '\ ([^'] * \) '/ "\ 1" / G
Вы захотите использовать [^'] *
вместо . *
В противном случае
«Яблоки» являются «красными»
, будут преобразованы в «Яблоки» - «красным»
Также есть Surround.Vim , если вы хотите сделать это довольно часто. Вы бы использовали CS '"
, чтобы изменить окружающие цитаты.
Просто к сведению - чтобы заменить все двойные кавычки одинарными, это правильное регулярное выражение - на основе приведенного выше примера rayd09
:%s/"\([^"]*\)"/'\1'/g