Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从“快速修复”窗口应用自动pep8修复 背景:_Python_Vim_Pep8_Python Mode - Fatal编程技术网

Python 从“快速修复”窗口应用自动pep8修复 背景:

Python 从“快速修复”窗口应用自动pep8修复 背景:,python,vim,pep8,python-mode,Python,Vim,Pep8,Python Mode,我正在使用(非常棒的)Vim插件,其中包括pep8 linter。:PyLint命令运行所有过梁并在快速修复窗口中打开错误 问题: 现在,让我们假设我只使用pep8 linter,并且我有一个充满错误的快速修复窗口。我希望逐步解决这些错误,并应用自动修复(使用类似autopep8的工具)。autopep8工具非常棒,但也会出错。理想情况下,我希望能够监督Vim中的每个修复(应用修复、检查、移动到下一个修复) 我目前的方法是在Python文件上运行,区分结果,然后修复任何错误的更改: $ auto

我正在使用(非常棒的)Vim插件,其中包括pep8 linter。
: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.使用git
difftool
进行Diff并重新加载文件 如果您希望与git索引中的文件进行区分(并使用git的difftool),可以执行以下操作:

  • 让gvim打开
  • 在终端中运行命令,让程序打开一个新的gvim(或vim)实例来处理差异
  • 省省吧
  • 回到您原来的gvim,让vim重新加载文件,并且(至少据我所知)您的撤销历史应该保留下来
  • 优点/缺点 选项1

    优点:

    • 每次更改都将保存在撤消历史记录中
    • vim中的图形差异易于阅读
    缺点:

    • 不会使用git的difftool
    • 依赖于vim的
      diff
      功能
    选项2

    优点:

    • 使用git的difftool
    • 更清晰的撤消历史记录(autopep8之前和之后的单个撤消--完全取决于您想要什么)
    缺点:

    • 看起来更尴尬
    • 较少粒度的撤消历史记录

    您还可以使用出色的

    感谢您提供的关于python模式的提示—看起来很棒—特别是动态支持virtualenv和语法错误。(与syntastic/其他一些较新的vim插件不同)值得注意的是,从版本开始,Python模式现在支持使用
    :PyLintAuto
    在缓冲区内自动进行
    autopep8
    更改。(但是,没有选项逐个批准/拒绝更改)。@DavidCain或
    :PymodeLintAuto
    感谢您如此详细的回复。选项1似乎更可取——我只是使用Git的difftool作为我预期目标的可读演示。无论如何,我不会总是编辑最近提交的文件。遗憾的是,这仍然是一种解决方法,但它比我以前的方法要好得多。你想只接受所有更改,只撤销你不想要的更改吗?请不要将我的评论视为对你的解决方案的侮辱-这太好了。但是,我更希望能够从QuickFix窗口自动应用解决方案,接受/拒绝,然后继续。好像是pep8 linter的延伸,我应该试着写。不,不,我没有生气。(我很感激你的好话!)我真的只是想知道。老实说,最简单的方法可能是扩展autopep8脚本,在每次更改时提示您,并让您说是/否,而不是重复所有工作。