Подтвердить что ты не робот

Замена кавычек вокруг строк в Vim?

У меня есть что-то похожее на <Foobar Name='Hello There'/> и нужно сменить одинарные кавычки на двойные кавычки. Я попробовал :s/\'.*\'/\"\0\", но в итоге создал <Foobar Name="'Hello There'"/>. Замена \0 на \1 породила только пустую строку внутри двойных кавычек - есть ли какой-то специальный синтаксис, который мне не хватает, что мне нужно сделать только найденную строку ( "Hello There" ) внутри кавычек, назначаемых \1?

4b9b3361

Ответ 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]