Adicione aspas ao grande número de palavras no vim

0

Então criei um grande número de objetos javascript com sintaxe literal e esqueci de usar aspas para as chaves de muitos pares de valores-chave. Como eu criaria um regex para "adicionar aspas simples a qualquer string sem aspas simples seguidas imediatamente por dois-pontos" no vim?

Eu tentei o regex encontrado aqui mas acrescenta um conjunto vazio de aspas após a chave.

    
por Yitzchak 24.07.2014 / 21:44

2 respostas

2

Suponho que cada um de seus pares key: value esteja em sua própria linha, assim:

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

Em seguida, as 2 regex / substituições a seguir realizam o que você precisa: :%s/\(.*\):/'':/ seguido por %s/''/'/

O primeiro substitui todo o texto que precede dois pontos (esse é o \(.*\): parte) com o mesmo texto (mas cercado por aspas) e os dois pontos novamente (a parte '': ). Isso não leva em conta as chaves que já foram citadas, de modo que o segundo comando simplesmente substitui qualquer conjunto de duas aspas simples por apenas uma aspa simples.

O primeiro comando não funcionará se você tiver vários pares chave: valor em uma única linha. Nesse caso, você pode tentar algo como :%s/, \(.*\):/, '':/ , onde há uma vírgula e espaço no início das duas expressões. Você ainda teria que limpar a primeira entrada em cada objeto, já que eles não são precedidos por vírgulas.

Qualquer comando que você usar, eu recomendaria terminá-lo com /c , como em :%s/\(.*\):/'':/c , para que você possa confirmar cada substituição, pelo menos para ter certeza de que funciona da maneira que você quiser.

Boa sorte!

    
por 24.07.2014 / 23:37
0
:%s/^.\{-}:\s*\zs[^',]\+/'&'

parece fazer o truque:

  • ^.\{-}:\s* corresponde a tudo antes do valor:

     ^             | .\{-}:              | \s*
    ---------------+---------------------+--------------------
     start of line | any character,      | as much whitespace
                   | as few as possible, | as possible
                   | until the 1st colon |
    
  • \zs[^',]\+\ é a nossa correspondência real. Ele corresponde apenas ao valor, basicamente o máximo possível de qualquer caractere que não seja uma citação simples ou um coma.

  • '&' substitui a correspondência por si só entre aspas simples.

por 24.07.2014 / 23:31

Tags