Python 从“快速修复”窗口应用自动pep8修复 背景:
我正在使用(非常棒的)Vim插件,其中包括pep8 linter。Python 从“快速修复”窗口应用自动pep8修复 背景:,python,vim,pep8,python-mode,Python,Vim,Pep8,Python Mode,我正在使用(非常棒的)Vim插件,其中包括pep8 linter。:PyLint命令运行所有过梁并在快速修复窗口中打开错误 问题: 现在,让我们假设我只使用pep8 linter,并且我有一个充满错误的快速修复窗口。我希望逐步解决这些错误,并应用自动修复(使用类似autopep8的工具)。autopep8工具非常棒,但也会出错。理想情况下,我希望能够监督Vim中的每个修复(应用修复、检查、移动到下一个修复) 我目前的方法是在Python文件上运行,区分结果,然后修复任何错误的更改: $ auto
:PyLint
命令运行所有过梁并在快速修复窗口中打开错误
问题:
现在,让我们假设我只使用pep8 linter,并且我有一个充满错误的快速修复窗口。我希望逐步解决这些错误,并应用自动修复(使用类似autopep8的工具)。autopep8工具非常棒,但也会出错。理想情况下,我希望能够监督Vim中的每个修复(应用修复、检查、移动到下一个修复)
我目前的方法是在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错误?选项
有两个简单的答案不会抹去你的撤销历史记录
" 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
1.与Vim中保存的文件的差异
很久以前,我在网上发现这个diffusesave
功能,它非常有用。在这种情况下,您只需在终端中运行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>
2.使用gitdifftool
进行Diff并重新加载文件
如果您希望与git索引中的文件进行区分(并使用git的difftool),可以执行以下操作:
- 每次更改都将保存在撤消历史记录中
- vim中的图形差异易于阅读
- 不会使用git的difftool
- 依赖于vim的
功能diff
- 使用git的difftool
- 更清晰的撤消历史记录(autopep8之前和之后的单个撤消--完全取决于您想要什么)
- 看起来更尴尬
- 较少粒度的撤消历史记录
:PyLintAuto
在缓冲区内自动进行autopep8
更改。(但是,没有选项逐个批准/拒绝更改)。@DavidCain或:PymodeLintAuto
感谢您如此详细的回复。选项1似乎更可取——我只是使用Git的difftool作为我预期目标的可读演示。无论如何,我不会总是编辑最近提交的文件。遗憾的是,这仍然是一种解决方法,但它比我以前的方法要好得多。你想只接受所有更改,只撤销你不想要的更改吗?请不要将我的评论视为对你的解决方案的侮辱-这太好了。但是,我更希望能够从QuickFix窗口自动应用解决方案,接受/拒绝,然后继续。好像是pep8 linter的延伸,我应该试着写。不,不,我没有生气。(我很感激你的好话!)我真的只是想知道。老实说,最简单的方法可能是扩展autopep8脚本,在每次更改时提示您,并让您说是/否,而不是重复所有工作。