I am trying to to acheive the following every time a file is saved in Vim under Windows 10 (Vim 8.2):
Right now I am able using autocmd
to autoformat the file, by adding the following to my .vimrc
:
autocmd BufWritePost * silent! !start /min Autoformat.bat <afile>
The problem is that the file contents is not updated on the screen (I still see the unformatted file). I have to go out of focus and come back to see a prompt to reload the file. What is missing to refresh the file?
After some research, I have tried the following so far:
autocmd BufWritePost * !edit
(manually, it works)autocmd BufWritePost * !redraw
but it does not seem to work.
Note: The silent! !start /min
silence the annoying command prompt that used to flash by on every save (on Windows).
The following worked for me on Windows:
set autoread
autocmd BufWritePost * silent! !C:\Users\epoirier\Documents\BufWritePost.bat <afile>
autocmd BufWritePost * redraw!
I still see the console flashing by for (less than) a second, but I can live with that since Vim reloads the file automaticaly and I can keep working.
can't test this on Windows 10 right now, but on Linux I'm trying a similar setup that works:
autocmd BufWritePost * silent! !start /min Autoformat.bat <afile>
autocmd BufWritePost * edit
autocmd BufWritePost * redraw!
file reload is triggered with edit
(as you already discovered) without prepending !
!
executes a shell command but edit
is a vim command, we don't need !
before the command (same thing applies to redraw
).
redraw!
is necessary because silent
can mess up the screen when used for an external command.
an alternative (and I think better suited) solution to reload the file is by using autoread
option instead of triggering edit
. from :help autoread
:
'autoread'
'ar'
When a file has been detected to have been changed outside of Vim and it has not been changed inside of Vim, automatically read it again.
lines on .vimrc
become:
set autoread
autocmd BufWritePost * silent! !start /min Autoformat.bat <afile>
autocmd BufWritePost * redraw!