Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Vim autocmd (save file, run code formatter, reload file)

Tags:

vim

uncrustify

I wish to integrate the source code formatter Uncrustify with Vim. Any of the below two options will suffice.

  1. Format the code that I am currently editing (i.e. when gq is pressed).
  2. Format the code when I save the file and then reload the formatted file into current Vim window.

Option 1 is preferable. I tried

set formatprg=uncrustify\ -c ~/misc/uncrustify.cfg --no-backup

i.e. I call Uncrustify with command line options. This does not work. Vi gives the E518: Unknown option: ~/misc/uncrustify.cfg error.

For option 2, I tried the following in the vimrc file

autocmd bufwritepost *.cpp ! ~/bin/uncrustify -c ~/misc/uncrustify.cfg --no-backup <afile>

The file is formatted after the save, but I have to manually reload the file into Vim.

like image 765
user1280213 Avatar asked Mar 20 '12 07:03

user1280213


1 Answers

Have you tried escaping whitespaces:

:set formatprg=uncrustify\ -c\ ~/misc/uncrustify.cfg\ --no-backup

UPDATE

uncrustify prints "Parsing: 170 bytes ..." message to stderr so we need to redirect it to /dev/null:

:set formatprg=uncrustify\ -c\ ~/misc/uncrustify.cfg\ -l\ CPP\ --no-backup\ 2>/dev/null

gq operates on lines, so you can select necessary lines in visual mode and execute gq. For example, if you want to reformat whole file execute ggVGgq.

More info at :help gq

like image 193
galymzhan Avatar answered Oct 02 '22 05:10

galymzhan