Zastosuj automatyczne poprawki pep8 z okna QuickFix

Background:

Używam (fantastycznej) wtyczki Vim python-mode, która zawiera linter pep8. Polecenie :PyLint uruchamia wszystkie lintery i otwiera błędy w oknie QuickFix.

Problem:

Załóżmy teraz, że używam tylko lintera pep8 i mam okno QuickFix pełne błędów. Chciałbym przejść przez każdy z tych błędów i zastosować automatyczną poprawkę (z czymś takim jak autopep8). Narzędzie autopep8 jest fantastyczne, ale popełnia błędy. Idealnie. lubię być w stanie nadzorować każdą poprawkę w Vim (zastosuj poprawkę, sprawdź, przejdź do następnej poprawki).

Moim obecnym podejściem jest uruchomienie autopep8 na moim pliku Pythona, różnicowanie wyników, a następnie naprawienie złych zmian:

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

Jednak takie podejście rujnuje moją historię i wydaje się niepotrzebnie złożone. Jest lepszy sposób?

Pytanie:

Czy jest jakiś sposób, aby automatycznie zastosować poprawki pep8 (jeśli są dostępne) do błędów pep8 w oknie QuickFix?

Author: David Cain, 2012-06-08

2 answers

Opcje

Są dwie proste odpowiedzi, które nie wymazają twojej historii cofania.

1. Różnica z zapisanym plikiem w Vim

Znalazłem tę funkcję DiffWithSaved w sieci jakiś czas temu i była bardzo przydatna. W takim przypadku, możesz po prostu uruchomić autopep8 w terminalu, a gdy Gvim poprosi o ponowne wczytanie pliku, wybierz no, a następnie uruchom tę funkcję, która pojawi się bufor scratch z nowym plikiem i pozwoli Ci zmienić rzeczy wokół.

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

Gdy biegniesz możesz użyć vim copy-diff i innych poleceń diff , aby szybko przejść i zaakceptować / nie zaakceptować zmian. Ponadto wszystkie zostaną zapisane w historii Cofnij.

" 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. Diff with the git difftool and reload the file

Jeśli chcesz odróżnić plik w indeksie Gita( i używając difftoola Gita), możesz wykonać następujące czynności:

  1. pozostaw gvim otwarty,
  2. Uruchom swoje polecenia w terminalu i pozwól programowi otworzyć nową instancję gvim (lub vim), aby zajmij się diffingiem.
  3. zachowaj to wszystko.
  4. wróć do swojego oryginalnego gvima, pozwól Vimowi przeładować plik i (przynajmniej według mojej wiedzy) Twoja historia cofania powinna pozostać.

Zalety / Wady

Opcja 1

Zalety:

  • każda zmiana zostanie zapisana w historii Cofnij
  • graficzne różnice w vim-IE są łatwe do odczytania

Wady:

  • nie będzie używać difftoola Gita
  • na funkcje Vima diff.

Opcja 2

Zalety:

  • używa difftoola Gita
  • cleaner Cofnij historię (pojedyncze Cofnij z autopep8 pre i post--bardzo zależne od tego, co chcesz)

Wady:

  • wydaje się bardziej niezręczne
  • mniej ziarnista historia cofania
 7
Author: Jeff Tratner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-12 00:06:08

Możesz również użyć doskonałego vim-autopep8

 0
Author: Valerio Crini,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-14 16:01:37