$ autopep8 --in-place spam.py
$ git difftool spam.py # check edits in gVim, write to file
$ git commit spam.py -m "Fix bad PEP8 formatting"
There are two simple answers that won't wipe out your undo history.
I found this
DiffWithSaved function online quite a while ago and it has been very useful. In this case, you can just run autopep8 in the terminal, and when
Gvim asks to reload the file, choose no and then run this function, which will pop up a scratch buffer with your new file and allow you to change things around.
" copy this to your vimrc or source it " tells vim not to automatically reload changed files set noautoread function! DiffWithSaved() let filetype=&ft diffthis vnew | r # | normal! 1Gdd diffthis exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype endfunction " sets up mappings to function com! DiffSaved call DiffWithSaved() map <Leader>ds :DiffSaved<CR>
Once you run that, you can use the vim copy-diff and other diff commands to quickly go through and accept/not accept changes. Plus, all will be stored in undo history.
" run these commands after sourcing the above function " % expands to filename (also %:h to head, %:t to tail) " if it throws an error, just do :cd %:h first :!autopep8 --in-place % :DiffSaved
difftooland reload the file
If you want to diff with the file in the git index (and using git's difftool), you could do the following: