Adicione aspas a um grande número de palavras no vim

Adicione aspas a um grande número de palavras no vim

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 seguida imediatamente por dois pontos" no vim?

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

Responder1

Suponho que cada um dos seus pares chave:valor 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/\(.*\):/'\1':/seguido por%s/''/'/

O primeiro substitui todo o texto que precede dois pontos (essa é a \(.*\):parte) pelo mesmo texto (mas entre aspas) e os dois pontos novamente (a '\1':parte). Isso não leva em consideração nenhuma chave que já esteja entre aspas, então o segundo comando simplesmente substitui qualquer conjunto de 2 aspas simples por apenas 1 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/, \(.*\):/, '\1':/onde há uma vírgula e um espaço no início das duas expressões. Você ainda teria que limpar a primeira entrada de cada objeto, já que elas não são precedidas de vírgulas.

Qualquer que seja o comando que você usar, recomendo finalizá-lo com /c, para :%s/\(.*\):/'\1':/cque você possa confirmar cada substituição, pelo menos para ter certeza de que funciona da maneira desejada.

Boa sorte!

Responder2

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

parece funcionar:

  • ^.\{-}:\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[^',]\+\é o nosso par real. Ele corresponde apenas ao valor, basicamente, tanto quanto possível, de qualquer caractere que não seja uma aspa simples ou vírgula.

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

informação relacionada