我正在学习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;$
}$
现在在插入模式下的第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
(4)的两倍。
这是你的softtabstop
和(常规)tabstop
之间相互作用的结果。
你的softtabstop
说,当按Tab键时,结果应与8列的倍数对齐。当你在a之后敲击Tab时,你已经在第13列,所以只有一个4宽的制表符足以到达那里。在其他情况下,你分别是16和8,所以它需要两个4宽的制表符对齐你的8宽软标签。
PS:如果你想要奇怪的行为(当然不推荐),请设置tabstop=3 softtabstop=8
。然后,当您按Tab键时,您将获得空格和制表符的组合。
PPS:所有这些都是我不喜欢文字Tab字符的部分原因。它们不稳定,它们的显示取决于每个开发人员的制表位设置。在我的组织中,我努力让每个人都使用:set expandtab
(或每个开发人员编辑器中的等效文件),并使用空格字符进行稳定和可重复的显示。我在工作中唯一容忍制表符的地方是makefile,我没有选择权。