Que tal:
:%s/.*/'&'/
"Substitua zero ou mais caracteres pelos caracteres precedidos e bem sucedidos por um aspas simples".
Para um arquivo inicial com linhas como este exemplo:
1
12
123
1234
12345
O estado desejado do arquivo é
'1'
'12'
'123'
'1234'
'12345'
Eu tenho feito isso com dois comandos, :%s/^/'/g e :%s/$/'/g , que eu gostaria de colocar em um. No entanto, quando tento
:%s/[$^]/'/g
Eu recebo o erro
E486: Pattern not found: [$^]
Eu sei que o ^ entre parênteses significa exclusão, então eu achei que colocar $ primeiro significaria corresponder tanto ao começo quanto ao fim das linhas, o que obviamente não está acontecendo.
Como posso combinar tanto o começo como o fim das linhas no vim?
Você realmente não precisa combinar o começo e o fim da linha se puder combinar tudo com avidez:
:%s/\(.*\)/''/
A principal coisa a saber é escapar dos parênteses para criar o "grupo de captura", então use para se referir ao que foi capturado.
^ e $ não contêm esses significados (início ou fim de linha) dentro de [ ] , que é usado para selecionar um grupo de caracteres. Dentro de [ ] , a maioria dos operadores regex perdem seu significado (e alguns caracteres ganham significado especial, ou obtêm um significado diferente). Um ^ em [] líder significa que o grupo é negado - corresponde a tudo exceto esses caracteres. Então, [^$] corresponde a qualquer caractere diferente de $ . (E [$^] corresponde apenas aos caracteres $ e ^ .)
Se você quer combinar o começo ou fim de uma linha, use /^\|$/ , onde | é ou (precisa ser escapado no regex padrão do Vim modo).
Então:
:%s/^\|$/'/g
O g é necessário, uma vez que ^ e $ são duas correspondências independentes e s , por padrão, só atua na primeira correspondência em uma linha.
Com o comando norm[al] e A para anexar controle, I para pré-definir o controle, o comando :exe[cute] para executar a segunda norma 'prepend', porque por padrão o comando :norm[al] não pode ser seguido por outro comando como em :help :normal documentado.
então o comando seria o seguinte:
:exe "%norm A'" |%norm I'
Observe que % aqui está realizando as alterações em todas as linhas.