Vim:将制表符更改为空格

Vim:将制表符更改为空格

我知道这个问题已被问过很多次了,但我并没有找到解决我的问题的方法,主要是因为我甚至无法真正识别问题。

以下是事件的时间表:

  • 打开旧的 python 文件(用 python2.7 编写)- 一切正常
  • 更改键绑定以使用 python3 而不是 python2.7 执行 .py 文件 - 正如预期的那样,有很多IndentErrors,但文件仍然是相同的结构/布局/空格/制表符的数量
  • 添加expandtab到我的 .vimrc - 不再IndentError有因不一致而产生的 s ,但IndentError由于我的源代码结构现在完全混乱了,所以到处都是新的 s 。
  • expandtab从我的 .vimrc 中删除它,但仍然得到相同的错误源,即使我杀死会话,退出 iTerm,从 github 提取最新的源...为什么!?

需要说明的是,在过去的几个月里,我的 vimrc 中只有两处被修改,而且都是今天早上做的。第一处是重新映射<F9>以发出 python3 而不是 2.7 的 shell 命令,这不会影响我的源代码结构。第二处更改是添加,这expandtab把一切都搞乱了……删除后expandtab我的 vim 体验不会恢复到添加之前的状态。

我的源的结构改变是半统一的,所以让我尝试解释一下实际发生的情况。

以前是这样的:

class GUI():
    def __init__(self):
        suite of code

现在看起来像:

class GUI():
    def __init__(self):
    suite of code

并且对于所有嵌套的代码套件来说,情况似乎都是这样的......换句话说,第一次将制表符扩展为 4 个空格可以正常工作,但它并没有扩展嵌套在第一个制表符内的制表符,而是看起来像是删除了该制表符。

还发生了其他奇怪的事情,但我真的看不出有什么规律。

知道发生什么事了吗?

答案1

这种外观,随着每个其他缩进级别被删除,通常是(并且似乎是您的代码中的情况)查看代码的症状,该代码每个缩进有 4 个空格,但每隔一行有 8 个空格制表符(例如 4s、1t、1t4s、2t),设置tabstop为 4。

对于 Python 代码,您只需将代码中的所有制表符替换为八个空格,因为这是解释器处理它的方式。通常,您可以使用:retab命令设置tabstop为源代码最初编写的值,例如

:set ts=8
:retab 4

如果expandtab设置了,retab 将用空格替换制表符。

相关内容