Vim: Converter backticks para a notação $ () no shell script

1

Suponha que eu tenha algumas instruções em um script shell (bash) como

var='cat file.txt'
echo "Date is: 'date'"

Eu quero converter a notação de backtick em $() notação como:

var=$(cat file.txt)
echo "Date is: $(date)"

Como posso fazer isso no Vim com pesquisa / substituição, para o arquivo inteiro?

Motivação: link

    
por vatsug 12.01.2017 / 13:55

1 resposta

3

Você pode tentar

:% s/'\([^']*\)'/$()/gc

g torna global (para todas as entradas na linha), c faz com que vim pergunte ao usuário sobre cada substituição.

Mas não funcionará com backstacks aninhados e código de várias linhas. Apenas para pares de backticks em linha.

Você também pode sair de vim e usar sed para isso:

sed -n -i.backup 'N; ${s/'\([^']*\)'/$()/g; p; q}; b' filename

Funcionará com backtrics de várias linhas, mas sem aninhamento.

    
por 12.01.2017 / 14:03