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?
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:
- pozostaw gvim otwarty,
- Uruchom swoje polecenia w terminalu i pozwól programowi otworzyć nową instancję gvim (lub vim), aby zajmij się diffingiem.
- zachowaj to wszystko.
- 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
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
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