如何在更改Emacs中的缩进宽度后重新缩进Python代码?

时间:2013-01-10 21:18:29

标签: python emacs

我将python-indent从3更改为4.然后我mark-whole-bufferindent-for-tab-command。它给了我垃圾。

6 个答案:

答案 0 :(得分:6)

indent-region功能。所以我尝试标记整个缓冲区,然后M-x并输入indent-region。据我所知,它通常与C-M-\绑定。

修改

重新缩进不适用于tab-width更改。正如我在评论中写的那样,将空格更改为制表符,然后更改tab-width是一个解决方案:

“猜测你是缩进空格而不是制表符,首先对tabify设置为3的缓冲区内容tab-width进行缩放。然后将tab-width更改为4并运行untabify“。

答案 1 :(得分:2)

这是一种黑客行为,但它不会给你indent-region给你的垃圾

1)确保标签为空格设置为4个空格。在暂存缓冲区中输入:

(setq tab-width 4)

然后通过标记并使用M-x eval-region

来评估它

2)使用制表符

全局替换所有三个空格的集合
M-x replace-regexp [SPC][SPC][SPC][RET] C-q[TAB][RET]

3)突出显示整个缓冲区并取消验证

M-x mark-whole-buffer M-x untabify

这会将所有标签转换为四个空格。

答案 2 :(得分:0)

尝试indent-region而不是缓冲区。最初限制为C-M-\

答案 3 :(得分:0)

这有点像黑客,但它对我来说是一个快速的解决办法:到“M-X替换字符串”,“” - > “”。然后,如果您的emacs对文件进行自动idnent检测,则必须关闭并重新打开。然后你必须通过并修复多行代码(使用制表符)和具有大量空格的字符串。

答案 4 :(得分:0)

这也可能有所帮助:

http://www.emacswiki.org/emacs/IndentingPython

特别是,PythonTidy对于重构凌乱的代码非常有效,并且有轻微的打嗝(遗憾的是该工具不易配置):

http://www.emacswiki.org/emacs/PythonProgrammingInEmacs#toc17

答案 5 :(得分:0)

可能是主题没有用,但是我使用这样的脚本。 从命令行运行它。 (python reindent.py some.py)

更改string_equal和replace_to。

import sys

file_name = sys.argv[1]
string_equal = "   "
replace_to =  "    "

with open(file_name) as f:
    data = f.readlines()
    f.close()

def create_new_line(i):
    new_line = ""
    flag = True
    cur_s = ""
    for k in i:
        if flag and k == " ":
            cur_s += k
            if cur_s == string_equal:
                new_line += replace_to
                cur_s = ""
        else:
            flag = False
            new_line += k
    return new_line

with open(file_name, "w") as f:
    for i in data:
        l = create_new_line(i)
        f.write(l)
    f.close()