我有一些缩进不一致的Python代码。制表符和空格的混合使用使情况变得更糟,甚至不保留空格缩进。
该代码可以按预期工作,但是很难维护。
如何在不破坏代码的情况下修复缩进(如HTML Tidy,但对于Python)?
autopep8:提供缩进以及更多stackoverflow.com/questions/14328406/...
我有一些缩进不一致的Python代码。制表符和空格的混合使用使情况变得更糟,甚至不保留空格缩进。
该代码可以按预期工作,但是很难维护。
如何在不破坏代码的情况下修复缩进(如HTML Tidy,但对于Python)?
autopep8:提供缩进以及更多stackoverflow.com/questions/14328406/...
Answers:
使用在Python安装目录中reindent.py找到的脚本Tools/scripts/:
更改Python(.py)文件以使用4个空格的缩进,并且不使用硬制表符。还修剪行尾多余的空格和制表符,并删除文件末尾的空行。还要确保最后一行以换行符结尾。
查看该脚本以获取详细的使用说明。
python-examples包装。
python-examples安装后,您会在中找到reindent /usr/share/doc/pythonX.X/examples/Tools/scripts/reindent.py。
*:ret * *:retab *
:[range] ret [ab] [!] [new_tabstop]
替换所有包含空格的空白序列
<Tab>,使用新的空白字符串
给出制表符的值。如果不指定新的
制表符大小或为零,Vim使用当前值
“ tabstop”。
'tabstop'的当前值始终用于
计算现有标签的宽度。
使用!,Vim还将替换仅普通字符串
带有制表符的空格。
启用“ expandtab”后,Vim将所有选项卡替换为
适当数量的空格。
此命令将'tabstop'设置为给定的新值,
如果对整个文件执行默认设置,
不应进行任何可见的更改。
注意:此命令修改任何<Tab>字符
在C程序中的字符串中。使用“ \ t”避免
这(无论如何都是好习惯)。
“:重新标记!” 可能还会更改空格序列
<Tab>字符,可能会使printf()混乱。
{Vi无此功能}
| + ex_extra |时不可用 该功能已于禁用
编译时间。
例如,如果您只是键入
:ret
您所有的标签都将扩展为空格。
您可能要
:se等::set expandtab的简写
确保任何新行都不会使用文字标签。
如果您不使用Vim,
perl -i.bak -pe“ s / \ t /''x(8-pos()%8)/ eg” file.py
假设制表符每隔8个字符停止,则将用空格替换制表符file.py(file.py.bak以防万一)。如果制表符停靠符是每4个空格,则用4s替换8s。
我会为autopep8做到这一点:
$ # see what changes it would make
$ autopep8 path/to/file.py --select=E101,E121 --diff
$ # make these changes
$ autopep8 path/to/file.py --select=E101,E121 --in-place
注意:E101和E121是pep8缩进(我认为您可以简单--select=E1地解决所有与缩进有关的问题-以E1开头的问题)。
您可以使用递归标志将其应用于整个项目:
$ autopep8 package_dir --recursive --select=E101,E121 --in-place
autopep8如果语法不正确,则失败。您可以确认使用python -tt <file.py>
autopep8 -i script.py使用autopep8
autopep8 自动格式化Python代码以符合PEP 8
nullstyle指南。它使用该pep8实用程序来确定nullcode需要格式化的哪些部分
。autopep8能够nullformatting解决可以报告的大多数
问题pep8。
pip install autopep8
autopep8 script.py # print only
autopep8 -i script.py # write file
使用Vim,除了点击Esc,然后输入...外,不应该涉及更多内容。
:%s/\t/ /g
...在您要更改的文件上。这会将所有选项卡转换为四个空格。如果间距也不一致,则将更加困难。
还有PythonTidy(因为您说过喜欢HTML Tidy)。
它不仅可以清理标签,还可以做更多的事情。如果您喜欢这种类型的东西,那就值得一看。
如果您像我一样懒惰,也可以下载Wingware Python IDE的试用版,该软件具有用于弄乱缩进的自动修复工具。效果很好。 http://www.wingware.com/
由于缺少某些模块,reindent脚本对我不起作用。无论如何,我发现此sed命令对我来说很完美:
sed -r 's/^([ ]*)([^ ])/\1\1\2/' file.py
试试Emacs。它对Python所需的缩进有很好的支持。请检查此链接http://python.about.com/b/2007/09/24/emacs-tips-for-python-programmers.htm
如果尝试查找将2-space indentedpython脚本转换为tab indented版本的工具,请使用以下在线工具: