我的常规设置是
ts
。 但是根据
sw
文档,如果未设置expandtab
,它将尝试使用空格和制表符的组合来组成制表符大小的所需空白数。 我真的不能想到这种设置的有用方案:为什么有人会想拥有固定数量的制表符和空格,而这些制表符和空格可能会使事情搞砸了?我可以想到的这样做的唯一好处是减少了字符数,从而减小了文件大小,这对我来说很奇怪。
#1 楼
正如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
并获取中间值行退格行为,而不混用制表符和空格。制表符将扩展为四个空格,但是您可以在一行的中间空格范围内退格。#2 楼
请参见下面的示例,因此tabstop
涉及定义Tab
的宽度,而softtabstop
涉及键入Tab
时光标的移动距离。如果未将它们设置为相同的值,则意味着如果您敲击Tab
按键,则并不意味着琐碎的Tab
字符。无论如何,一旦退出插入模式,vim就会决定。 Vim首先将尝试匹配尽可能多的tabstop
插入;如果最后不能完整地填满,vim只需用tabstop
补偿。 要多说一点,如果设置
Space
,就等于对vim说:需要expandtab
。只需插入Tab
。#3 楼
简单的答案:例如,它对于编程特别有用,尤其是在制表至关重要的Python中。当按sts = 4按下Backspace时,它将取消制表符的行,而不是删除单个空格字符。
#4 楼
'softtabstop'
的值等于按<Tab>
时光标向右移动几列(=空格),等于按<BS>
(退格键)以擦除制表符时向左移动几列。因此,如果'tabstop'
为8 ,而'softtabstop'
为4,则所有显示的标签页均为8列,但每次按一次<Tab>
键都只能一次向前移半个标签页(= 4个空格):如您所见,只要空格的总和达到
'tabstop'
的大小,它们就会变成一个制表符。 (这可以通过设置'expandtab'
来防止。)0
的值会禁用'softtabstop'
,因此按<Tab>
可以使您获得常规的跳格: 'shiftwidth'
的值。因此,此处的光标一次向前移动两个空格:评论
欢迎来到Vi和Vim!可能值得分享您为获得精彩片段/角色所做的工作
– D. Ben Knoble♦
20/11/13在16:09
评论
@Herb Wolfe希望我的回答可以帮助PO找出进行不寻常设置(例如:set st = 7 sts = 13)时会发生什么。 as vim不仅用于编码,而且最初是用于文本编辑。
–陈曦
17年3月19日14:52