我的情况是,我有一个文件 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 个空格,而您的开发服务器似乎配置为noexpandtab
并tabstop
设置为 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