Vim 中的制表符:当对齐完全错误时,如何修复..........?

Vim 中的制表符:当对齐完全错误时,如何修复..........?

我的情况是,我有一个文件 myfile.py(用Python),我开始在自己的机器上开发。我使用 vim 来做这件事,但那时我不知道 Vim 可以让你定义制表符的长度,还可以用标记显示该行被制表的次数。

因此,在我将 myfile.py SCP 到远程 unix 服务器并开始在那里处理它之前,我的所有选项卡都是关于每间有 6 个空格,并且没有标记定义每行中有多少个缩进。但由于 6 个空格很多,所以真的没有必要……

但当我开始在远程服务器上进行开发时,我注意到他们的 vim 配置有一个选项卡,因此它将是关于每段长度为 4 个空格,因此垂直标记以显示制表符存在。但是,它不会自动更改 myfile.py 中已有的代码行以适应它们的制表符设置,并且这些设置最终仅适用于我使用 vim 编写的任何新代码行他们的服务器。

作为一个新手,我没有费心去修复任何东西来让文件看起来一致。现在我有一些奇怪的、交错的混合体,有些行的标签长度​​为 4,有些行的标签长度​​为 6,较短的那个的每个标签都有垂直标记,而较长的那个则没有任何标记。

我该如何有效地解决这个问题,以恢复到标准?(希望是标签长度较短的那个垂直标记)。我正在寻找任何有过这种困境经验的人——这是否会导致我在高级水平上学习更多 vim,或者首先从一些迂回的方式开始,我不在乎。我只是喜欢任何东西,而不是手动修复每一行——你知道当你处理Python!

[编辑]-> 我还认为我应该注意到每行没有相同数量的标签...有些行有 0、1、4、5 等等...

答案1

vim 中的缩进可能有点复杂。

你可以配置 vim 在按下 tab 键时插入一个制表符或者插入一定数量的空格,方法是使用展开标签选项。您还可以使用制表位选项。最后,您还可以使用以下命令配置 vim 以显示带有特殊字符的制表符:列表字符选项(▸ 是常见选择)。但是,当使用空格代替制表符时,不会显示该字符。这就是为什么有些制表符有特殊字符,而有些没有,其中一些是实际的制表符,而其他只是大量像制表符一样的空格。

听起来远程 unix 服务器配置为expandtab开启并tabstop设置为 6,因此当您输入制表符时,它会输出 6 个空格,而您的开发服务器似乎配置为noexpandtabtabstop设置为 4。

要解决此问题,您可以使用 vim 的查找/替换功能,使用命令 将所有出现的六个空格替换为一个制表符:%s/ \{6}/\t/g。要理解该命令,您应该阅读 vim 的搜索和替换功能这里。为了防止将来再发生这种情况,您应该制作自己的.vimrc文件,按您喜欢的方式进行设置,并将其放在您的主目录中,以便自动加载,或者:source在您编辑任何文件时加载它。

注意:还有其他选项卡选项,例如移位宽度软制表位但它们与您的问题不太相关。但是您应该阅读它们,以便您可以配置 vim 以完全按照您的需要运行。

答案2

如何将 6 转换为 4

1. 您当前的设置(tab == 6 个空格宽度 && 展开标签)

:set ts=6 et

#!/usr/bin/env python
def fun():
······print "hello, world"

2. 将 6 个空格转换为制表符

:set noet
:ret!

#!/usr/bin/env python
def fun():
»·····print "hello, world"

3. 将标签重置为 4 个空格宽度

:set ts=4

#!/usr/bin/env python
def fun():
»···print "hello, world"

4. 将制表符转换为 4 个空格

:set et
:ret!

#!/usr/bin/env python
def fun():
····print "hello, world"

答案3

.vimrc我会怎么做?按照您最喜欢的方式在两台机器上设置制表符。

制表符所占的空格数

set tabstop=4

用于(自动)缩进的空格数

set shiftwidth=4

如果你想将制表符扩展为空格

set expandtab

或不

set noexpandtab

每次打开一个文件,发现缩进乱了。转到页面开头gg,然后自动缩进到页面结尾=G

相关内容