我在学C编程。
我遇到了一个关于vim配置的问题。
以下是我在.vimrc中编写的vim设置:

set nu
set shiftwidth=4
set tabstop=4
set softtabstop=8
set autoindent
set cindent
set smartindent
syntax on

为了查看选项卡的位置,我使用了:set list
#include <stdio.h>$
int main(void)$
{$
^Iprintf("ab\n");$
^Ireturn 0;$
}$

现在在Insert模式下的第4行中,我想看看在不同位置按Tab键后可以得到多少个选项卡。
结果如下:
当我在n之后点击Tab键时,我得到^Iprin^I^Itf("ab\n");$
当我在\n之后点击Tab键时,我得到^Iprintf("ab\n^I^I");$
以上两种情况我完全可以理解。
但是当我在a之后点击Tab键时,我得到^Iprintf("a^Ib\n");$
这是我无法理解的。
有人能解释为什么只有一个标签被替换了吗?
我认为应该有两个,因为softtabstop占用8个空间,是tabstop的2倍(4)。

最佳答案

这是softtabstop和(常规的)tabstop之间交互作用的结果。
您的softtabstop表示,当点击Tab键时,结果应该与8列的倍数对齐。当你在a后面划Tab键时,你已经在第13列了,所以只有一个4宽的Tab字符就足够了。在其他情况下,您分别是16岁和8岁,因此需要两个4-width制表符才能与8-width软制表符对齐。
注:如果你想要怪异的行为(当然不推荐),设置tabstop=3 softtabstop=8。然后,当您按下tab键时,将得到空格和制表符的组合。
PPS:这是我不喜欢文字制表符的部分原因。它们是不稳定的,它们的显示取决于每个开发人员的制表位设置。在我的组织中,我极力要求每个人都使用:set expandtab(或者在每个开发人员的编辑器中使用等效的)并使用空格字符来实现稳定和可复制的显示。在我的工作中,我唯一能容忍tab字符的地方是makefiles,在那里我没有选择。

07-24 09:44
查看更多