Answers:
如softtabstop
文档所述,如果要保持默认制表位的大小为8,但编辑文件时就像制表位的大小是其他值一样,则很有用。例如,如果您在编辑代码时希望缩进级别为4,但是某些注释具有制表符缩进的文本,例如表格,该表取决于制表符停止位8,则可以设置sts
为4
。
我注意到您的标签设置(set ts=4 sw=4 expandtab smarttab
)和sts
(例如set ts=8 sts=4
)的使用之间的区别是在文本行中间的空白处退格。例如,考虑下面的文本行,其中·
表示空格:
some·text·······more·text
在插入模式时,之前只是移动光标m
的more text
。使用您的设置,按Backspace删除一个空格。但是在使用时sts=4
,Backspace会删除所有到上一个制表位的方式,因为如果空格是制表符,它就会表现出来。
您可以sts=4
在设置之外进行设置,并在不混合制表符和空格的情况下获得中线退格键行为。制表符将被扩展为四个空格,但是您可以在一行中间的一系列空格中退格。
请参见下面的示例,
// Start vim without loading your vimrc. set only tabstop=8 softtabstop=4.
// This makes <Tab> in insert mode equals to 4 <Space> length at max.
// In insert mode, type 12, one <Tab>, 5. We get insertion below,
12··5
// Quit insert mode. Move cursor back, we find 2 <Space> inserted.
// In insert mode, type 12, two <Tab>, 9. We get insertion below,
12······9
// Quit insert mode. Move cursor back, you find a <Tab> inserted.
// In insert mode, type 12, three <Tab>, 3. We get insertion below,
12··········3
// Move the cursor back, you find a <Tab> and 4 <Space> inserted.
// We can even set sotftabstop=12, but this time we only need type one <Tab>, then 3.
12··········3
// Move the cursor back, you find a <Tab> and 4 <Sapce> inserted.
因此,定义tabstop
a的宽度Tab
是softtabstop
多少,而键入时 光标移动了多远Tab
。如果未将它们设置为相同的值,则表示如果您敲击了Tab
按键,则并不意味着一个简单的Tab
字符。无论如何,一旦退出插入模式,由vim决定。Vim首先将尝试尽可能多地匹配插入tabstop
;如果最后还是无法充实tabstop
,vim只会补偿Space
。
多说一点,如果您设置expandtab
,就等于对vim说:
请不要懒得去计算有多少
Tab
和Sapce
需要。只需插入Space
。
:set st=7 sts=13
。由于vim不仅是为编码而设计的,而且最初是为文本编辑而设计的。