如何避免在Vim中更改制表位后出现缩进错误?

如何避免在Vim中更改制表位后出现缩进错误?,vim,vi,Vim,Vi,我以前在Vim中有8个空格标签。然后我改为4个空格,但现在每当我在改为4个空格之前编写的代码中添加一行时,它会给我一个缩进不匹配错误,即使所有内容都排列得很好。有什么方法可以避免这个问题吗?您是否做了一个:%retab…?您是否只更改了tabstop选项 我使用了4个空格(当我点击tab时用空格填充,以插入实际的tab点击ctrl-v tab)。以下是.vimrc中与选项卡相关的设置: " tabs set tabstop=4 set shiftwidth=4 set expandtab 用空

我以前在Vim中有8个空格标签。然后我改为4个空格,但现在每当我在改为4个空格之前编写的代码中添加一行时,它会给我一个缩进不匹配错误,即使所有内容都排列得很好。有什么方法可以避免这个问题吗?

您是否做了一个
:%retab
…?

您是否只更改了tabstop选项

我使用了4个空格(当我点击tab时用空格填充,以插入实际的tab点击
ctrl-v tab
)。以下是.vimrc中与选项卡相关的设置:

" tabs
set tabstop=4
set shiftwidth=4
set expandtab
用空格填充制表符时,您将始终插入空格而不是制表符,并且您的代码将始终保持不变

当您使用选项卡时,每个工具都会以不同的方式显示选项卡,最终您会花费时间设置选项卡(8,4,3.5)应显示的空间数量,而不是进行生产性工作

或从vim 7.1帮助选项卡STOP中选择以下选项之一:

注意:将“tabstop”设置为8以外的任何其他值都会使您的文件
在许多地方出现错误(例如,打印时)。
Vim中有四种主要的选项卡使用方式:
1.始终将“tabstop”设置为8,将“softtabstop”和“shiftwidth”设置为4
(或3或任何您喜欢的)并使用“noexpandtab”。然后是维姆
将混合使用制表符和空格,但键入和
每4(或3)个字符显示一个选项卡。
2.将“tabstop”和“shiftwidth”设置为您喜欢和使用的任意值
“expandtab”。这样,您将始终插入空格。这个
更改“tabstop”时,格式将永远不会混乱。
3.将“tabstop”和“shiftwidth”设置为您喜欢的值,并使用
|modeline |在再次编辑文件时设置这些值。只有
使用Vim编辑文件时工作。
4.始终将“tabstop”和“shiftwidth”设置为相同的值,并且
“noexpandtab”。这样就可以了(仅适用于初始缩进)
对于人们使用的任何tabstop设置。有可能很好
如果执行此操作,则第一个非空选项卡后的选项卡将作为空格插入
不过。当使用“tabstop”时,否则对齐的注释将是错误的
改变。

对于python代码,您最好使用以下内容:

:set tabstop=8
:set shiftwidth=4
:set expandtab
这样,您仍在使用“行业标准”8个空间选项卡,但不会将它们中的任何一个放入您的文件中。这也会让你的旧代码保持干净,尽管你必须回到过去,手动移动所有遗留下来的东西。你肯定会想:重新标记所有内容

如果要用4个空格缩进替换所有内容,请执行以下操作

:set tabstop=4
:retab
:set tabstop=8
这将使用空格重新缩进所有内容,每个选项卡4个空格,并将您设置回正常默认值


显然,这取决于意见,但在我的书中,使用选项卡设置为除您在搜索文件时得到的内容以外的任何内容都是自找麻烦。

可视化不匹配的最佳方法是:设置显示空白问题的列表

set listchars=tab:>-,trail:-,nbsp:+ "This is terminal friendly but you can make fancy
set list
我想说,当间隔缩进是标准时,这是python编辑的基本设置。尤其是当文件由同事编辑时

我还仔细检查了“代码布局”下的样式指南。有一个python-tt选项,您可能希望按照中的指定使用。如果将制表符与空格混合使用,将引发警告和错误

您可以将其合并到单元测试中。似乎政治公众人物建议新代码使用4个空格。如果您打算对开源项目作出贡献,您可能需要考虑更改。 另外,为了更加整洁,我在eol中删除了空格

nnoremap <leader>wd :%s/\s\+$//<cr>
nnoremap wd:%s/\s\+$//

这里最好举个例子。或者不要使用真正的制表符,而是用空格填充。不管有多少个8或4,只要你是一致的。顺便说一句,为什么你会对python使用不同的缩进?顺便说一句,我推荐“set smarttab”,呃,我讨厌用空格缩进的代码。如果Python忽略空格,像OP这样的问题就不会发生。小提示:当使用语法高亮显示时,可以通过为这些字符设置一个特殊的高亮显示规则,让违规字符(无论是空格还是制表符)脱颖而出。效果非常好
nnoremap <leader>wd :%s/\s\+$//<cr>