У меня есть что-то похожее на <Foobar Name='Hello There'/>
и нужно сменить одинарные кавычки на двойные кавычки. Я попробовал :s/\'.*\'/\"\0\"
, но в итоге создал <Foobar Name="'Hello There'"/>
. Замена \0
на \1
породила только пустую строку внутри двойных кавычек - есть ли какой-то специальный синтаксис, который мне не хватает, что мне нужно сделать только найденную строку ( "Hello There" ) внутри кавычек, назначаемых \1
?
Замена кавычек вокруг строк в Vim?
Ответ 1
Вам нужно использовать группировки:
:s/\'\(.*\)\'/\"\1\"
Таким образом, аргумент 1 (т.е.\1) будет соответствовать тому, что ограничено\(и \).
Ответ 2
Там также surround.vim, если вы хотите сделать это довольно часто. Вы должны использовать cs'"
для изменения окружающих кавычек.
Ответ 3
%s/'\([^']*\)'/"\1"/g
Вы хотите использовать [^']*
вместо .*
иначе
'apples' are 'red'
преобразуется в "apples' are 'red"
Ответ 4
Если я что-то не упустил, не работает s/\'/"/g
?
Ответ 5
Просто FYI - чтобы заменить все двойные кавычки одиночным, это правильное регулярное выражение, основанное на примере rayd09 выше
:%s/"\([^"]*\)"/'\1'/g
Ответ 6
Вам нужно скопировать скобки вокруг части выражения, которое вы хотите захватить.
s/\'\(.*\)\'/"\1"/
Но у вас могут быть проблемы с непреднамеренным сопоставлением. Можете ли вы просто заменить любые одинарные кавычки двойными кавычками в вашем файле?
Ответ 7
У вас есть правильная идея - вы хотите иметь "\1"
в качестве предложения replace, но сначала вам нужно поместить часть "Hello There" в группу захвата 1 (0 - полное совпадение). Попробуйте:
:%/'\(.*\)'/"\1"
Ответ 8
Предполагая, что вы хотите сделать это на весь файл...
Режим N:
ggvG$ [SHIFT+:]
X Режим:
'<,'>/'/" [RET]