我已经知道Vim中与这些选项卡相关的设置:



我的常规设置是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


在插入模式下,将光标移动到mmore text之前。使用您的设置,按Backspace删除一个空格。但是在使用sts=4时,Backspace会删除所有到上一个制表符停止位的方式,因为如果空格是制表符,它会表现出来。

除了设置之外,您还可以设置sts=4并获取中间值行退格行为,而不混用制表符和空格。制表符将扩展为四个空格,但是您可以在一行的中间空格范围内退格。

#2 楼

请参见下面的示例,因此tabstop涉及定义Tab的宽度,而softtabstop涉及键入Tab时光标的移动距离。如果未将它们设置为相同的值,则意味着如果您敲击Tab按键,则并不意味着琐碎的Tab字符。无论如何,一旦退出插入模式,vim就会决定。 Vim首先将尝试匹配尽可能多的tabstop插入;如果最后不能完整地填满,vim只需用tabstop补偿。

要多说一点,如果设置Space,就等于对vim说:需要expandtab。只需插入Tab


评论


@Herb Wolfe希望我的回答可以帮助PO找出进行不寻常设置(例如:set st = 7 sts = 13)时会发生什么。 as vim不仅用于编码,而且最初是用于文本编辑。

–陈曦
17年3月19日14:52



#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