Atom auto缩进脚本破坏了Python缩进

时间:2017-08-27 22:04:20

标签: python coffeescript indentation atom-editor

我在init.coffee文件中为Atom配置写了这个函数来自动缩进整个文件:

atom.commands.add 'body', 'custom:auto-format', ->
    editor = atom.workspace.getActiveTextEditor();

    oldSelection = editor.getSelectedBufferRanges();

    editor.selectAll();
    editor.autoIndentSelectedRows();

    editor.setSelectedBufferRanges(oldSelection);

对于除Python之外的每种语言,它都可以完美运行!我对结果非常满意。但是,CoffeeScript自动缩进完全与Phyton代码混淆。

需要此文件:

import sys

def factorial (n):
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)

if __name__ == "__main__":
    for arg in sys.argv[1:]:
        n = factorial(int(arg))
        print("The factorial of " + arg + " is " + str(n))

并且无法识别阶乘函数的结束位置,因此这样的缩进:

import sys

def factorial (n):
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)

        if __name__ == "__main__":
            for arg in sys.argv[1:]:
                n = factorial(int(arg))
                print("The factorial of " + arg + " is " + str(n))

如果有人对如何解决这个问题有任何见解,我们将不胜感激!

1 个答案:

答案 0 :(得分:3)

你不能自动缩进Python代码,完全停止。

自动缩进仅适用于通过显式开始和结束标记(例如花括号)描绘块的语言。这些语言中的缩进基本上是可选的,仅供人类软件开发人员用来帮助阅读。

但在Python缩进中有意义;如何执行代码随缩进更改。要求软件决定要应用多少缩进就像要求计算机读取你的想法一样,然后再猜测程序员想要代码做什么就开始了。

例如,以下非缩进代码可以以不同方式缩进,并导致不同的结果。哪一种解释是正确的?

var = 'foobar'
for i in range(5):
if var.endswith('bar'):
print('Hello')
if i == 0:
print('World')
break
var += 'spam'
else:
print('!')

if __name__ == '__main__':测试视为顶级语句并不重要。 Python无法知道,并且这样的测试在Python代码中的任何地方都是合法的,有时甚至可能在函数或类定义中有意义。