No Vim, qual é o comando para corrigir o recuo de todas as linhas?
Muitas vezes, copio e colo o código em um terminal remoto e deixo tudo bagunçado. Eu quero consertar isso de uma só vez.
No Vim, qual é o comando para corrigir o recuo de todas as linhas?
Muitas vezes, copio e colo o código em um terminal remoto e deixo tudo bagunçado. Eu quero consertar isso de uma só vez.
Respostas:
=
, o comando indent pode receber movimentos. Então, gg
para obter o início do arquivo, =
recuar, G
até o final do arquivo gg=G
,.
''
(duas aspas simples) leva você de volta para onde você estava, então gg=G''
deve recuar e depois retornar.
Antes de colar no terminal, tente :set paste
e :set nopaste
depois de terminar. Isso desativará o recuo automático, quebra automática de linha e outros recursos que estão atrapalhando sua pasta.
edit: Além disso, devo salientar que um resultado muito melhor do que o =
recuo geralmente pode ser obtido usando um programa externo. Por exemplo, eu corro :%!perltidy
o tempo todo. astyle
, cindent
etc. também podem ser usados. E, é claro, você pode mapear esses itens para um pressionamento de tecla e mapear diferentes para o mesmo pressionamento de tecla, dependendo do tipo de arquivo.
equalprg
opção em um plug-in ftft para usar um filtro externo para =
recuar, em vez de uma combinação de teclas personalizada.
formatpgm
com arrumado e estilo e depois gq
. Aqui estão alguns exemplos dos meus .vimrc
: au FileType xml set fp=tidy\ -q\ -i\ -xml
eau FileType java set fp=/usr/local/bin/astyle\ --mode=java\ --indent=tab
Se você deseja reinserir o bloco em que está, sem precisar digitar acordes, é possível:
[[=]]
=aB
que não moverá o cursor.
[[=]]
requer 5 acordes :(
O mestre de todos os comandos é
gg=G
Isso recua o arquivo inteiro!
E abaixo estão alguns dos comandos simples e elegantes usados para recuar linhas rapidamente no Vim ou gVim.
Para recuar todas as linhas abaixo da linha atual
=G
Para recuar a linha atual
==
Para recuar n
linhas abaixo da linha atual
n==
Por exemplo, para recuar 4 linhas abaixo da linha atual
4==
Para recuar um bloco de código, vá para um dos chavetas e use o comando
=%
Você pode usar o aplicativo / utilitário organizado para indentar arquivos HTML e XML e funciona muito bem na indentação desses arquivos.
Pré-especificar um arquivo XML
:!tidy -mi -xml %
Pré-especificar um arquivo HTML
:!tidy -mi -html %
pressione escape e digite as combinações abaixo rapidamente:
gg=G
1G=G
. Isso deve recuar todas as linhas do arquivo. 1G
leva a primeira linha, =
inicia o recuo automático e a final G
leva a última linha do arquivo.
1gg=G
No Vim, use :insert
. Isso manterá toda a sua formatação e não fará a identificação automática. Para mais informações help :insert
.
se você não quiser usar :set paste
, clique com o botão do meio set nopaste
, também poderá colar o conteúdo da área de transferência:
"*p
"+p
Dessa forma, você não precisa sair do modo normal. se você precisar colar +
ou *
depender de como você selecionou o texto, consulte :help quoteplus
.
O vim-autoformat formata seus arquivos de origem usando programas externos específicos para o seu idioma, por exemplo, a jóia "rbeautify" para arquivos Ruby, o pacote npm "js-beautify" para JavaScript.
Para arquivos C ++ complexos, o vim nem sempre obtém a formatação correta ao usar o =
comando filter do vim . Portanto, para essas situações, é melhor usar um formatador C ++ externo como astyle (ou uncrustify ), por exemplo:
:%!astyle
A função '=' do Vim usa seu formatador interno por padrão (o que nem sempre acerta as coisas), mas também é possível configurá-lo para usar um formatador externo, como astyle, configurando-o adequadamente, conforme discutido nesta pergunta .
Para arquivos XML, eu uso este comando
:1,$!xmllint --format --recover - 2>/dev/null
Você precisa ter o xmllint instalado (pacote libxml2-utils)
(Fonte: http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-command.html )
Você pode criar um mapeamento para fazer isso por você.
Este recuará automaticamente o arquivo inteiro e ainda manterá o cursor na posição em que você está:
nmap <leader>ai mzgg=G`z
Para o vi Editor, use: insert. Isso manterá toda a sua formatação e não inserirá a indentação automática. Depois disso, pressione escape para visualizar o arquivo formatado real, caso contrário, você verá alguns caracteres ilegíveis. como ^ eu por exemplo:
public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert");
}
Basta ir para o modo visual no vim e selecionar de cima para baixo depois de selecionar, basta pressionar =, Toda a linha selecionada será recuada.
ggvG=
quando você pode gg=G
. Qual era o sentido de tornar o movimento visível? Isso vale para todas as ações que fazem movimentos.