Mapeie um comando shell para executá-lo no vim

1

Eu quero mapear, no meu arquivo ~/vimrc , a chave <F4> in vim para executar o programa indent no arquivo que estou editando no momento. Como eu posso fazer isso? Se eu fizer isso, a compatibilidade com vi será quebrada?

Obrigado antecipadamente.

    
por David Martínez 26.10.2013 / 13:06

2 respostas

3

Embora não esteja implícito em --help ou nas man pages, acontece que indent processa as coisas em um pipeline, lendo da entrada padrão (aka, FD 0) e gravando na saída padrão (aka, FD 1) que é o que você precisa para fazer isso funcionar dentro do vim.

Comece com o comando mapeado:

map <F4> :!indent<CR>

Vá para a primeira linha do arquivo e entre no modo visual ( Ctrl-v ). Em seguida, pressione Ctrl-End , que o levará até a última linha do arquivo. Aparecerá que um bloco da largura da última linha mais um (a nova linha, que está no final de todas as linhas no vim), incluindo todas as linhas, é destacado. Não importa o quão grande seja, porque se alimentarmos este bloco através de um comando externo, a vertical é o único fator determinante: se uma linha for incluída, será toda a linha.

Então agora você pressiona F4 e pronto. Isso foi testado por mim e funciona . IMO, simples o suficiente - e isso significa que você pode recuar facilmente apenas uma seção, em vez de todo o arquivo, se você quer. Outra ideia seria remover o retorno <CR> do mapeamento para que você tenha que inserir você mesmo, mas também resta a opção de adicionar opções a indent . Então você pode misturar e combinar estilos diferentes, lol.

Se você realmente deseja mapeá-lo para selecionar o arquivo inteiro automaticamente, chame indent e retorne ao modo de comando e / ou sua posição original - tenho certeza de que isso é possível usando uma construção mais elaborada. Infelizmente eu não sei nada sobre programar o vim, então não posso lhe dizer como seria. Mas alguém pode vir e isso acontece. Até lá, você terá que aceitar seis pressionamentos de tecla ( :1 + return para ir para o início do arquivo, ctrl-v para visual, ctrl-end para ir até o final do arquivo e, finalmente, F4 ) .

    
por 26.10.2013 / 14:31
1

Acho que isso deve funcionar.

map <F4> !indent %<CR>

Acho que depende do seu sistema o que exatamente acontecerá a seguir, mas pelo menos você terá que recarregar o arquivo.

Mas, o que indent está realmente fazendo? Parece que o que você tenta pode ser alcançado de uma maneira muito mais fácil.

    
por 26.10.2013 / 13:25

Tags