将整个(Python)文件从2个空格缩进转换为4个空格缩进
我经常处理一些Python文件,这些文件是以模板的形式提供给我的,里面的缩进是2个空格。不过,我个人更喜欢用4个空格的缩进,这也是我在我的.vimrc
文件里设置的。但是,由于Python对缩进非常敏感,通常用gg=G
这个命令来调整缩进并不能很好地把文件转换成我喜欢的缩进方式。而且,如果我把缩进保持在2个空格,跟我的tabstop设置就会冲突。
为了解决这个问题,我想找个办法把一个2个空格缩进的文件转换成4个空格缩进的文件。我不知道最简单的方法是什么,但我在想可以用vmap <Tab>
来把选中行的缩进宽度增加1个空格,用vmap <S-Tab>
来减少1个空格。我不确定有没有内置的方法可以做到这一点,或者是否需要一些查找/替换的规则,但我觉得有个办法能把缩进调整到我喜欢的宽度会很有用,因为自动缩进功能并不能很好地解决这个问题。
4 个回答
因为你用空格来缩进,而不是用制表符,所以你只需要把每行开头的空格数量翻倍。
你可以使用 ggVG
来选择整个文件。按下 : 键后会出现一些默认选项,然后你可以添加 s/^(\s*)/\1\1
来把每行开头的空格数量翻倍。
这里的正则表达式解释一下: ^
表示一行的开始。 (\s*)
是一个捕获组,里面可以有任意数量的空格。 \1
指的是那个捕获组,而 \1\1
就是把这个组重复两次。
总结一下: ggVG=:s/^(\s*)/\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
从命令行可以用它来重新缩进多个文件(比如目录下的所有文件,甚至可以递归处理整个目录树)。
在vim编辑器中:
" Convert 2-spaces indent to tabs
:set noexpandtab tabstop=2
:retab!
" Convert tabs to 4-spaces indent
:set expandtab tabstop=4
:retab