Ответ 1
Если в строковых литералах нет экранированных кавычек, и не требуется обеспечить правильное сопряжение кавычек, можно использовать команду
:%s/['"]/\="'\""[submatch(0)!='"']/g
Часто я обнаруживаю, что переворачиваю цитаты:
из двойных кавычек ""
в одинарные кавычки ''
и
из одинарных кавычек ''
в двойные кавычки ""
.
Я знаю, что есть способ переключить одинарные кавычки в двойные кавычки: :%s/'\(\([^']*\)\)'/"\1"/g
И способ переключения двойных кавычек на одиночные кавычки: :%s/"\(\([^"]*\)\)"/'\1'/g
но как мне сделать обе операции вместе без включения первых кавычек с заменой во второй замене?
Если в строковых литералах нет экранированных кавычек, и не требуется обеспечить правильное сопряжение кавычек, можно использовать команду
:%s/['"]/\="'\""[submatch(0)!='"']/g
Обычно, когда вы хотите поменять A
и B
таким образом, вам нужен промежуточный шаг, на котором вы заменяете A
чем-то совершенно другим и, скорее всего, уникальным в документе, будь то необычный символ или что-то длиннее и сумасшедшее, как |x-monkeyz-x|
.
Затем вы можете преобразовать все Bs в As и, наконец, все |x-monkeyz-x|
в Bs.
Например,
'
на !X!
"
на '
!X!
на "
Это лучше: Самый простой способ поменять местами две строки в Vim?
Используйте \=
:
:%s/'\([^']*\)'/\='"'.tr(submatch(1), '"', "'").'"'/g
. Это предполагает, что оба символа служат только кавычками, но ваш исходный код также делает то же самое, за исключением того, что мой не проверяет их сопряжение.
Обычно я использую промежуточную строку, такую как мое имя, которое вряд ли появится в тексте: