Применить автоматические исправления pep8 из окна QuickFix

Задний план:

Я использую (фантастический) Vim-плагин python-mode , который включает pep8 linter. Команда :PyLint запускает все литеры и открывает ошибки в окне QuickFix.

Проблема:

Теперь давайте предположим, что я использую только pep8 linter, и у меня есть окно QuickFix, полное ошибок. Я хотел бы пройти через каждую из этих ошибок и применить автоматическое исправление (с чем-то вроде autopep8). Инструмент autopep8 является фантастическим, но он допускает ошибки. В идеале, я хотел бы иметь возможность контролировать каждое исправление в Vim (применить исправление, проверить, перейти к следующему исправлению).

Мой текущий подход заключается в том, чтобы запустить autopep8 в моем файле Python, отличить результаты, а затем исправить любые плохие изменения:

 $ 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" 

Однако этот подход разрушает мою историю отмены и кажется излишне сложным. Есть ли способ лучше?

Вопрос:

Есть ли способ автоматически применять исправления pep8 (когда они доступны) к ошибкам pep8 в окне QuickFix?

2 Solutions collect form web for “Применить автоматические исправления pep8 из окна QuickFix”

Опции

Есть два простых ответа, которые не уничтожат вашу историю отмены.

1. Diff с сохраненным файлом в Vim

DiffWithSaved время назад я нашел эту функцию DiffWithSaved онлайн, и это было очень полезно. В этом случае вы можете просто запустить autopep8 в терминале, и когда Gvim попросит перезагрузить файл, выберите no, а затем запустите эту функцию, которая выведет буфер нуля с вашим новым файлом и позволит вам изменить ситуацию.

 " 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> 

После его запуска вы можете использовать команды vim copy-diff и другие команды diff, чтобы быстро пройти и принять / не принимать изменения. Кроме того, все будут сохранены в истории отмены.

 " 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 

2. difftool git difftool и перезагрузите файл

Если вы хотите разграничить файл в индексе git (и с помощью git's diffftool), вы можете сделать следующее:

  1. оставить gvim открытым,
  2. запустите свои команды в терминале и дайте программе открыть новый экземпляр gvim (или vim) для обработки отличия.
  3. Сохраните все.
  4. Вернитесь к своему оригинальному gvim, пусть vim перезагрузит файл и (по крайней мере, насколько мне известно) ваша история отмены останется.

Преимущества недостатки

Опция 1

Преимущества:

  • каждое изменение будет сохранено в вашей истории отмены
  • графические различия в vim легко читаются

Недостатки:

  • Не будет использовать git's diffftool
  • опирается на функции diff vim.

Вариант 2

Преимущества:

  • использует git's diffftool
  • чистая история отмены (однократное отключение от pre и post autopep8 – очень зависит от того, что вы хотите)

Недостатки:

  • кажется более неудобным
  • менее гранулированная история отмены

Вы также можете использовать отличный vim-autopep8

  • Есть ли способ получить vim для автоматического переноса строк python на 79 символов?
  • Как получить значение, возвращаемое функцией в Python & Vimscript?
  • Как установить правильное значение при использовании formatprg = autopep8?
  • Как я могу отправить номер строки из трассировки Python в vim?
  • Vim автоматически удаляет отступы в комментариях Python
  • Как исправить vim для правильных отступов, содержащих строки комментариев Python?
  • Найдите каждое третье значение и вставьте cr или новую строку в VIM
  • сортировать по названию в vim
  • Python - лучший язык программирования в мире.