16

バックグラウンド:

私は(素晴らしい)Vimプラグインpython-modeを使用しています。これにはpep8リンターが含まれています。この:PyLintコマンドはすべてのリンターを実行し、QuickFixウィンドウでエラーを開きます。

問題:

ここで、pep8リンターのみを使用していて、QuickFixウィンドウにエラーがいっぱいあると仮定します。これらの各エラーをステップスルーし、自動修正(autopep8など)を適用したいと思います。autopep8ツールは素晴らしいですが、間違いを犯します。理想的には、Vimの各修正を監視できるようにしたいと思います(修正を適用し、確認し、次の修正に移動します)。

私の現在のアプローチは、Pythonファイルでautopep8を実行し、結果を比較してから、悪い変更を修復することです。

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

ただし、このアプローチは私の元に戻る履歴を台無しにし、不必要に複雑に見えます。もっと良い方法はありますか?

質問:

QuickFixウィンドウ内のpep8エラーにpep8修正(利用可能な場合)を自動的に適用する方法はありますか?

4

2 に答える 2

7

オプション

元に戻す履歴を消去しない簡単な答えが 2 つあります。

1.保存したファイルをVimで差分

このDiffWithSaved機能はかなり前にオンラインで見つけましたが、非常に便利です。この場合、ターミナルで autopep8 を実行するだけでGvim、ファイルをリロードするように求められたら、[いいえ] を選択してからこの関数を実行します。これにより、新しいファイルでスクラッチ バッファーがポップアップし、変更できるようになります。

" 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. gitdifftoolとの差分を取り、ファイルをリロードします

git インデックス内のファイルと比較したい場合 (そして git の difftool を使用して)、次のようにすることができます:

  1. gvimを開いたままにし、
  2. ターミナルでコマンドを実行し、プログラムが gvim (または vim) の新しいインスタンスを開いて差分を処理できるようにします。
  3. すべて保存してください。
  4. 元の gvim に戻り、vim にファイルをリロードさせます。(少なくとも私の知る限りでは) 元に戻す履歴が残っているはずです。

長所/短所

オプション1

利点:

  • 各変更は元に戻す履歴に保存されます
  • vim のグラフィカルな差分は読みやすい

短所:

  • git の difftool を使用しない
  • diffvim の機能に依存しています。

オプション 2

利点:

  • git の difftool を使用します
  • よりクリーンな元に戻す履歴 (autopep8 の前と後の単一の元に戻す - 必要なものに大きく依存)

短所:

  • もっとぎこちなく見える
  • 粒度の低い元に戻す履歴
于 2012-06-11T23:50:18.203 に答える
0

優れたvim-autopep8も使用できます

于 2016-11-14T16:01:37.380 に答える