Используйте BufWritePre
вместо BufWritePost
и объедините фильтрацию диапазона Vim с режимом stdin / stdout PythonTidy.
autocmd FileType python autocmd BufWritePre <buffer> let s:saveview = winsaveview() | exe '%!python PythonTidy.py' | call winrestview(s:saveview) | unlet s:saveview
(Использование autocmd FileType python autocmd BufWritePre <buffer>
делает это немного более точным, чем сопоставление нашаблон glob: это означает, что «всякий раз, когда обнаружен файл Python, установите этот autocmd для этого буфера» - так он работает независимо от имени файла.)
К сожалению, это не может сохранить позицию курсора, если вы отмените фильтрацию.(Вы фильтруете весь диапазон файлов; при отмене операции фильтрации курсор переходит на первую строку в диапазоне; таким образом, вы попадаете в начало файла.) Я надеялся найти способ создать нет-op Отменить состояние, прежде, так что вы можете дважды нажать u и вернуться в нужное место, но я пока не могу сделать эту работу.Может быть, кто-то еще знает, как.