Como eu automatizo um conjunto de comandos VIM que uso o tempo todo?

1

Estou executando alguns arquivos de texto escritos no Markdown através do Pandoc para obter o html, mas ele renderiza as tags estranhamente com a linha estranha quebra e espaço em branco em tags, então eu tenho executado alguns comandos sed no VIM.

Devo estar a olhar para o Vimscripts ou para macros? Ou um shellscript (se eu quiser combinar os comandos VIM com o comando shell do Pandoc)?

Estou executando o gVIM no Windows 7 e estou executando o Pandoc através do shell comum do Windows cmd, embora eu normalmente o faça dentro do VIM.

    
por Joe 04.04.2011 / 20:30

2 respostas

1

Acho que depende de onde a maior parte do processamento de arquivos e da tomada de decisões está sendo feita e das instalações de script disponíveis para você fora do Vim. Como a maior parte do processamento que você está fazendo parece estar executando uma sequência de programas, talvez em um pipeline, eu estaria inclinado a colocar tudo isso em um script de shell ou em um arquivo de lote e lançá-lo no Vim. (Você escreveu que você usa sed. Você tem acesso a um shell Unix também?) Se você não tem acesso a um shell Unix e se encontra limitado pelo conjunto de comandos do arquivo de lote, você pode colocar todos os comandos em uma função Vim. Colocar os comandos em uma função Vim lhe dá um pouco mais de flexibilidade e programação mais fácil do que tentar citar tudo certo para um comando ou mapeamento Vim.

Você pode colocar comandos shell dentro de funções facilmente como este

function Foo()
    !echo "hello"
endfunction

ou isto:

function Bar()
    call system('echo "hello"')
endfunction

Veja

:help usr_41.txt

e especialmente

:help 41.6
:help 41.7

bem como

:help system()

para mais sobre isso. Para mais informações sobre comandos e mapeamentos, consulte

:help usr_40.txt

Você pode escrever um comando para chamar sua função assim:

:command Foo call Foo()

para que você possa executar sua função com

:Foo
    
por 04.04.2011 / 21:07
0

ed é muito fácil de escrever com scripts.

printf "%s\n" "%s/$/...end/" "g/delete.this.line/d" w q | ed filename
    
por 04.04.2011 / 21:01