在Vim插入模式下敲击Tab键后我得到的标签数量

问题描述 投票:1回答:1

我正在学习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)的两倍。

c vim configuration vi auto-indent
1个回答
3
投票

这是你的softtabstop和(常规)tabstop之间相互作用的结果。

你的softtabstop说,当按Tab键时,结果应与8列的倍数对齐。当你在a之后敲击Tab时,你已经在第13列,所以只有一个4宽的制表符足以到达那里。在其他情况下,你分别是16和8,所以它需要两个4宽的制表符对齐你的8宽软标签。

PS:如果你想要奇怪的行为(当然不推荐),请设置tabstop=3 softtabstop=8。然后,当您按Tab键时,您将获得空格和制表符的组合。

PPS:所有这些都是我不喜欢文字Tab字符的部分原因。它们不稳定,它们的显示取决于每个开发人员的制表位设置。在我的组织中,我努力让每个人都使用:set expandtab(或每个开发人员编辑器中的等效文件),并使用空格字符进行稳定和可重复的显示。我在工作中唯一容忍制表符的地方是makefile,我没有选择权。

© www.soinside.com 2019 - 2024. All rights reserved.