Automatic reindent your files with VIM
by Felipe 'chronos' Prenholato on Monday, 06 April/2009, under Planet GentooBR, Tips, VIM - Vi IMproveded
Hey people
After a long time without post on blog, but always colecting ideas, the tip of today touch in a delicated area, code indent. Around all word we found ugly and mall indented codes (except in python :]), and, when working with PHP, this is a case extremely normal and really sucks.
So, one day, I start to search for a batch mode for vim, because for me, reident of PHP files with vim is awesome!. My idea is a single script that launchy vim in batch mode for each file, reindent and save.
Very well, after about 30 minutes of talk in #vim da irc.freenode.net, some people talk about ‘-c’ option, that, for some reason, I not see on vim man pages :\. Now let’s tip!
Basically we use -c option (today I know that we can use +<cmd here> too, that is same as :<cmd here>) and I put it in a single script:
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/bash # usage: script <basedir to indent> <files to indent> # ex: script /www/project ".html\$|.php\$|.inc\$|.tpl\$" find $1 -type f | egrep "$2" > file_list for file in $( < file_list ); do echo "$(date +'%d/%m/%Y %H:%M:%S') - start indent of $file'" >> log_indentacao vim -c ":normal gg=G" -c :w! -c :q! ---- $file && echo "$(date +'%d/%m/%Y %H:%M:%S') - end indent of '$file'" >> log_indentacao || echo "$(date +'%d/%m/%Y %H:%M:%S') - fail on indent of '$file'" >> log_indentacao done |
Explaining:
- Line 4: find for files to indent.
- Line 7 to 10: execute vim to indent inside a for … in loop with some info for you.
This tip is very useful but not works 100% for misc files (PHP+HTML as example). Using vim in this way you can work to convert files from dos to unix, etc, and a lot of posibilities.
About vim mapping, to indent opened files, you can use follow mappings in your .vimrc:
" map <F8> to reindent file noremap <F8> mzgg=G`z inoremap <F8> <ESC>mzgg=G`z<Insert>
Friday March 21st, 2008 on 12:55 PM
Usando a opção “bufdo” não resolveria também?
Saturday March 22nd, 2008 on 12:45 AM
Opa Sérgio, pesquisei sobre isto com o pessoal do #vim.
A idéia do bufdo é legal, dependendo do número de arquivos que você teria.
A questão em você abrir de um em um é que você poupa memória, com você abrindo vários arquivos você iria lotar a memória. Digamos que temos 10k arquivos em um site, abrindo todos ao mesmo tempo e com cada um aberto na memória, poderia ser um problema sério, principalmente se feito em servidores.
Outra coisa, testei aqui nos meus arquivos *.php dentro do /var/www, são pouco mais de 75k, mandei os nomes para uma lista e fiz isto:
cat lista | xargs vim
na primeira ele abriu ~2300, qdo fechei, abriu mais ~1800, e foi variando por ai o número de arquivos.
Acredito que colocando vim -c bufdo blabla em vez de somente vim poderia agilizar o processo, mas ainda assim é mais sensível a falhas. Imagine se da problema em um dos processos ‘vim’ abertos, vc perde a identação de centenas de arquivos.
Sérgio, obrigado pela participação
Saturday March 22nd, 2008 on 12:45 AM
Opa Sérgio, pesquisei sobre isto com o pessoal do #vim.
A idéia do bufdo é legal, dependendo do número de arquivos que você teria.
A questão em você abrir de um em um é que você poupa memória, com você abrindo vários arquivos você iria lotar a memória. Digamos que temos 10k arquivos em um site, abrindo todos ao mesmo tempo e com cada um aberto na memória, poderia ser um problema sério, principalmente se feito em servidores.
Outra coisa, testei aqui nos meus arquivos *.php dentro do /var/www, são pouco mais de 75k, mandei os nomes para uma lista e fiz isto:
cat lista | xargs vim
na primeira ele abriu ~2300, qdo fechei, abriu mais ~1800, e foi variando por ai o número de arquivos.
Acredito que colocando vim -c bufdo blabla em vez de somente vim poderia agilizar o processo, mas ainda assim é mais sensível a falhas. Imagine se da problema em um dos processos ‘vim’ abertos, vc perde a identação de centenas de arquivos.
Sérgio, obrigado pela participação
Monday January 5th, 2009 on 07:49 AM
Muito bom … aproveitei bem, só mudei a expressão regular para arquivos em C++
Quem sabe isso vira um shell script né
Tuesday January 6th, 2009 on 11:32 AM
Iniciei um projeto para a criação de um livro sobre o vim em português:
No meu blog há uma postagem sobre e um previw em um frame do site scribd:http://vivaotux.blogspot.com/2009/01/nosso-livro-sobre-o-vim.html
Há um grupo de discussão
http://groups.google.com/group/vimbook
e a página oficial do projeto
http://code.google.com/p/vimbook/
A idéia é que as pessoas que dominam melhor o vim e o Latex adicionem suas melhores idéias a este projeto!