Executando comandos externos no vim

5

Parece que se eu executar o seguinte dentro do vim :

:w !wc -w

Eu recebo a contagem de palavras do arquivo. Mas eu não entendo a sintaxe. Como isso funciona e como eu especificaria que eu quero a contagem de palavras de um parágrafo e não de todo o arquivo?

    
por Cratylus 16.06.2013 / 12:36

3 respostas

4

Quando você emite :w !wc -w , o vim cria um arquivo temporário e canaliza esse arquivo para o comando seguindo o ! , ou melhor, coloca seus dados em um arquivo temporário e pede ao seu shell para executar um comando que pareça algo como o seguinte:

 (wc -w) < /tmp/vHhjUPf/2

Onde essa última parte é alguma pasta / nome de arquivo aleatório que o vim armazena seus dados. Uma coisa interessante a notar, este comando irá falhar em shells não compatíveis como peixe . Isso ocorre porque o peixe usa a sintaxe (cmd) para a substituição de comandos, em vez de seu uso tradicional.

    
por 04.07.2013 / 14:59
3

Para especificar um intervalo de dados para passar para um comando externo, digite:

:<range>w !<command>

Por exemplo,

:1,5w !wc -w

contaria o número de palavras dentro do intervalo delimitado pelas linhas 1 e 5. Digite :h 10.3 para obter mais informações sobre intervalos.

Você também pode usar

:<range>!<command>

para substituir o conteúdo das linhas 1 a 5 pela saída do comando, o que é útil ao usar comandos externos para filtrar texto. (por exemplo, para classificação). Digite :h ! para obter mais informações sobre filtros.

Se você deseja executar um comando externo sem que o Vim passe o texto para sua entrada padrão, execute o comando da seguinte forma: :!command .

    
por 16.06.2013 / 13:00
1

O comando vim :w simplesmente grava no disco o arquivo atual.

Usando !w newfilename , você escreve o arquivo atual em um novo nome de arquivo.

O comando :!ls -al executa o programa externo ls com os parâmetros -al e exibe o resultado.

O comando que você mencionou ( :w !wc -w ) irá (provavelmente) simplesmente escrever o arquivo atual em um pipe para um comando externo ( wc -w ) que por sua vez contará as palavras no arquivo atual.

    
por 16.06.2013 / 13:19

Tags