将整个(Python)文件从2个空格缩进转换为4个空格缩进

3 投票
4 回答
92 浏览
提问于 2025-04-14 16:05

我经常处理一些Python文件,这些文件是以模板的形式提供给我的,里面的缩进是2个空格。不过,我个人更喜欢用4个空格的缩进,这也是我在我的.vimrc文件里设置的。但是,由于Python对缩进非常敏感,通常用gg=G这个命令来调整缩进并不能很好地把文件转换成我喜欢的缩进方式。而且,如果我把缩进保持在2个空格,跟我的tabstop设置就会冲突。

为了解决这个问题,我想找个办法把一个2个空格缩进的文件转换成4个空格缩进的文件。我不知道最简单的方法是什么,但我在想可以用vmap <Tab>来把选中行的缩进宽度增加1个空格,用vmap <S-Tab>来减少1个空格。我不确定有没有内置的方法可以做到这一点,或者是否需要一些查找/替换的规则,但我觉得有个办法能把缩进调整到我喜欢的宽度会很有用,因为自动缩进功能并不能很好地解决这个问题。

4 个回答

1

因为你用空格来缩进,而不是用制表符,所以你只需要把每行开头的空格数量翻倍。

你可以使用 ggVG 来选择整个文件。按下 : 键后会出现一些默认选项,然后你可以添加 s/^(\s*)/\1\1 来把每行开头的空格数量翻倍。

这里的正则表达式解释一下: ^ 表示一行的开始。 (\s*) 是一个捕获组,里面可以有任意数量的空格。 \1 指的是那个捕获组,而 \1\1 就是把这个组重复两次。

总结一下: ggVG=:s/^(\s*)/\1\1

1

reindent.py

这里有一个类似的帖子,讨论了这个问题。

(来自那个帖子)你可以使用reindent.py,这是一个在你安装Python时自带的脚本,用来把Python文件的缩进改成4个空格,并且不使用硬制表符。

你可以通过以下方式来运行它:

python3 -m reindent

(你甚至可以不加python3 -m直接运行)

还可以使用帮助标志来查看可能的选项:

python3 -m reindent --help

如果你的系统里没有这个工具,可以通过pip安装它(pip install reindent)。

在vim中使用

根据Chris这个回答,你实际上可以在vim中使用reindent.py:

:%! reindent

从命令行可以用它来重新缩进多个文件(比如目录下的所有文件,甚至可以递归处理整个目录树)。

3

在vim编辑器中:

" Convert 2-spaces indent to tabs
:set noexpandtab tabstop=2
:retab!

" Convert tabs to 4-spaces indent
:set expandtab tabstop=4
:retab

撰写回答