как использовать pythontidy в vim - PullRequest
4 голосов
/ 02 октября 2010

я сейчас использую,

autocmd BufWritePost *.py !python PythonTidy.py % %

Он действительно вызывает программу tidy и меняет файл, но vim не перезагружает новый файл.

И я не хочу устанавливать для него другой плагин.

======================= примечание: я обнаружил, что эта функция опасна, PythonTidy выдаст пустой файл, если команда не выполнена, это означает, что если у вас есть синтаксическая ошибка, вы потеряете свой файл, если не нажмете «u», чтобы получить его, но вы не можете сохранить прежде чем исправить синтаксическую ошибку.

Я вызываю:! PythonTidy%% вручную после завершения pylint.

Ответы [ 3 ]

2 голосов
/ 02 октября 2010

Используйте 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 и вернуться в нужное место, но я пока не могу сделать эту работу.Может быть, кто-то еще знает, как.

1 голос
/ 21 марта 2011

привет, следующее исправило проблему с позицией курсора

function! PythonTidySaver()
    let oldpos=getpos('.')
    %!PythonTidy    
    call setpos('.',oldpos)
endfunction

autocmd! bufwritepost *.py call PythonTidySaver()
1 голос
/ 02 октября 2010

На основании: help: e:

                                                        *:e* *:edit*
:e[dit] [++opt] [+cmd]  Edit the current file.  This is useful to re-edit the
                        current file, when it has been changed outside of Vim.
                        This fails when changes have been made to the current
                        buffer and 'autowriteall' isn't set or the file can't
                        be written.
                        Also see |++opt| and |+cmd|.
                        {Vi: no ++opt}

Таким образом, вам нужно будет использовать: e после внешнего обновления файла.Тем не мение, :!не позволяет использовать |обычно (см .: help:!), поэтому вам нужно обернуть его:

autocmd BufWritePost *.py execute "!python PythonTidy.py % %" | e

(: autocmd тоже не интерпретирует | обычно, поэтому вам не нужно снова его избегать.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...