Добавить кавычки к большому количеству слов в vim

Добавить кавычки к большому количеству слов в vim

Итак, я создал большое количество объектов javascript с литеральным синтаксисом и забыл использовать кавычки для ключей многих, многих пар ключ-значение. Как бы я разработал регулярное выражение для «добавления одинарных кавычек к любой строке без одинарных кавычек, за которой сразу следует двоеточие» в vim?

Я попробовал найденное регулярное выражениездесьно он добавляет пустой набор кавычек после ключа.

решение1

Я предполагаю, что каждая из ваших пар ключ:значение находится на отдельной строке, например:

var myObject = {
key1:val1,
key2:val2,
};

:%s/\(.*\):/'\1':/Тогда следующие 2 регулярных выражения/замены сделают то, что вам нужно: %s/''/'/

Первая команда заменяет весь текст, который предшествует двоеточию (это часть \(.*\):) тем же текстом (но заключенным в кавычки) и снова двоеточием ( '\1':часть). Это не учитывает никакие ключи, которые уже заключены в кавычки, поэтому вторая команда просто заменяет любой набор из 2 одинарных кавычек всего на 1 одинарную кавычку.

Первая команда не будет работать, если у вас есть несколько пар ключ:значение в одной строке. В этом случае вы можете попробовать что-то вроде того, :%s/, \(.*\):/, '\1':/где есть запятая и пробел в начале двух выражений. Вам все равно придется очистить первую запись в каждом объекте, так как им не предшествуют запятые.

Какую бы команду вы ни использовали, я бы рекомендовал заканчивать ее на /c, чтобы :%s/\(.*\):/'\1':/cвы могли подтвердить каждую замену или хотя бы убедиться, что она работает так, как вам нужно.

Удачи!

решение2

:%s/^.\{-}:\s*\zs[^',]\+/'&'

Кажется, это срабатывает:

  • ^.\{-}:\s*соответствует всему, что находится перед значением:

     ^             | .\{-}:              | \s*
    ---------------+---------------------+--------------------
     start of line | any character,      | as much whitespace
                   | as few as possible, | as possible
                   | until the 1st colon |
    
  • \zs[^',]\+\наше фактическое совпадение. Оно только соответствует значению, в основном, как можно большему количеству любого символа, который не является одинарной кавычкой или запятой.

  • '&'заменяет совпадение самим собой, заключенным в одинарные кавычки.

Связанный контент