Como uso o vim na linha de comando para adicionar texto no meio de um arquivo?

Como uso o vim na linha de comando para adicionar texto no meio de um arquivo?

Estou tentando escrever um comando nos seguintes moldes:

vim -c "XXXXXX" myFile

Em vez de "XXXXX", quero fornecer alguns comandos ao vim para adicionar algum texto a um ponto arbitrário no arquivo, especificando um número de linha exato e, em um cenário diferente, procurando por uma linha específica e depois inserindo-a. a linha acima.

O que estou tentando fazer é uma espécie de "anexo" inteligente, onde posso acrescentar linhas a um bloco de código ou função dentro de um script. Em última análise, pretendo ter um script de configuração que altere talvez uma dúzia de arquivos do sistema.

Idealmente, envolveria apenas um sinalizador -c e, idealmente, seria legível para qualquer pessoa que pudesse entender os comandos do modo normal - na minha cabeça, eu estava pensando originalmente em algo como "ggjjjiInsertingOnLine4:wq"assim que conseguir colocá-lo no modo normal.

Responder1

Os intervalos de linha de comando podem ser usados ​​para selecionar uma linha específica que precisa ser editada. Em seguida, o padrão substituto pode ser usado para realizar a edição (anexar).

Por exemplo, para acrescentar o texto "oi" no início da linha 3:

vim -c "3 s/^/hi/" -c "wq" file.txt

Para acrescentar o texto "oi" no final da linha 3:

vim -c "3 s/$/hi/" -c "wq" file.txt

Para encontrar mais opções e explicações:

vim -c "help cmdline-range"

Mais alguns exemplos

Para encontrar uma string de pesquisa "oi" e anexar a string "todos" na linha 3:

vim -c "3 s/\(hi\)/\1 everyone/" -c "wq" file.txt

Para encontrar uma string de pesquisa "hi" e acrescentar uma string "say" na linha 3:

vim -c "3 s/\(hi\)/say \1/" -c "wq" file.txt

Caso o número da linha não seja conhecido, para anexar as primeiras ocorrências da string "hi" em cada linha com "all":

vim -c "1,$ s/\(hi\)/\1 all/" -c "wq" file.txt

Para anexar todas as ocorrências da string "hi" em cada linha com "all":

vim -c "1,$ s/\(hi\)/\1 all/g" -c "wq" file.txt

Para mais informações sobre substituições:

vim -c "help substitute"

informação relacionada