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
) .