Quando copio o código de outro arquivo, a formatação fica desarrumada, assim:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Como posso formatar automaticamente esse código no vim?
Quando copio o código de outro arquivo, a formatação fica desarrumada, assim:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Como posso formatar automaticamente esse código no vim?
Respostas:
Tente as seguintes teclas:
gg=G
Explicação: gg
vai para a parte superior do arquivo, =
é um comando para corrigir o recuo e G
solicita que ele execute a operação até o final do arquivo.
Eu gosto de usar o programa Artistic Style. De acordo com o site :
Artistic Style é um indentador, formatador e embelezador de código-fonte para as linguagens de programação C, C ++, C # e Java.
É executado no Windows, Linux e Mac. Ele fará coisas como recuar, substituir guias por espaços ou vice-versa, colocando espaços em torno das operações da maneira que você desejar (convertendo if(x<2)
para se ( x<2 )
é assim que você gosta), colocando chaves na mesma linha das definições de função ou movendo-as para o linha abaixo, etc. Todas as opções são controladas por parâmetros de linha de comando.
Para usá-lo no vim, basta definir a opção formatprg e, em seguida, use o comando gq. Então, por exemplo, eu tenho no meu .vimrc:
autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ -T4pb
para que, sempre que abrir um arquivo .cpp, o formatprg seja definido com as opções que eu desejar. Em seguida, posso digitar gg para ir para o topo do arquivo e gqGformatar o arquivo inteiro de acordo com meus padrões. Se eu precisar reformatar apenas uma única função, posso ir para o topo da função, digite gq][e ela reformatará exatamente essa função.
As opções que tenho para o estilo -T4pb
são apenas minhas preferências. Você pode consultar os documentos deles e alterar as opções para que ele formate o código da maneira que desejar.
Aqui está uma demonstração. Antes do estilo:
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
Após o estilo (gggqG):
int main()
{
if (x < 2)
{
x = 3;
}
}
float test()
{
if (x < 2)
x = 3;
}
Espero que ajude.
O plug-in vim-autoformat permite formatar seu buffer (ou seleções de buffer) com um único comando: https://github.com/Chiel92/vim-autoformat . Ele usa programas de formato externo para isso, com um recurso à funcionalidade de indentação do vim.
Acho que clang-format
funciona bem.
Existem alguns exemplos de combinações de teclas na documentação do clang
Eu prefiro usar a equalprg
ligação no vim. Isso permite que você chame clang-format
com G=gg
ou outras =
opções de recuo.
Basta colocar o seguinte no seu arquivo .vimrc:
autocmd FileType c,cpp setlocal equalprg=clang-format
sudo apt install clang-format
Gosto como indent
mencionado acima, mas na maioria das vezes quero formatar apenas uma pequena seção do arquivo em que estou trabalhando. Como indent
pode pegar o código do stdin, é realmente simples:
:!indent
.astyle
leva stdin também, então você pode usar o mesmo truque lá.
Eu gostaria de acrescentar que, para evitar que seja confuso, você pode digitar :set paste
antes de colar. Após colar, você pode digitar :set nopaste
coisas como js-beautify e recuo para trabalhar novamente.
:set paste!
para isso, que alterna o valor da pasta em vez de defini-lo. Isso facilita a desativação, pois você pode simplesmente voltar alguns comandos e pressionar enter.