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"