当涉及到选项卡和空间首选项时,Vim 非常通融。据我所知,tabstop
设置表示制表符的宽度。shiftwidth
设置指定在使用 <<和 >>命令时增加/减少多少列,而 softtabstop
设置影响在插入模式下按下 Tab键时插入的空格数量。如果 expandtab
打开,制表符键将插入 softtabstop
个空格字符。关闭 expandtab
时,按下 Tab键插入与 softtabstop
匹配的选项卡 + 空格字符的数量尽可能少。(如果我说错了,请纠正我。)
最后一点让我想知道: 是否有一个实际的情况下,你不希望 shiftwidth == tabstop && tabstop == softtabstop
?我想不出来。就我而言,如果我可以在一次赋值中将所有3个值设置为相同的值,那将是最方便的。例如:
:set stab=4
相当于跑步:
:set tabstop=4 softtabstop=4 shiftwidth=4
有人能告诉我们如何做到这一点吗?
感谢迄今为止从 太多苯丙胺了,Hobbs和 Kaiser的答复。我没有单独回答每个问题,而是在这里更新问题。
我在上面说过,关闭 expandtab 后,按 Tab 键会插入尽可能少的与 softtabstop
匹配的 Tab + 空格字符。我同意,但我想我需要解释一下我的意思。我将试着举几个例子来说明这一点。若要继续,请运行 :set list
,以便可以看到制表符。
tabstop=4 softtabstop=2 shiftwidth=4 noexpandtab
在插入模式下,按制表符键插入2个空格字符。第二次按制表符键,不再插入另外两个空格字符(总共4个空格字符) ,而是用一个制表符替换前两个空格。Tabstop 设置为4,因此单个制表符的宽度与4个空格相同。
tabstop=4 softtabstop=6 shiftwidth=4 noexpandtab
在插入模式下,按制表符键插入1个制表符加2个空格。制表符的宽度为4,因此总宽度为6,这是通过使用3个字符实现的。第二次按制表符键将插入两个制表符,并删除前面插入的两个空格。总宽度为12,这是用3个字符实现的。
在这两个示例中,Vim 都插入了匹配 softtabstop 的最小可能的 tab + 空格字符数。
如果我在关闭 expandtab 的情况下工作,我不会想要通过将 softtabstop 设置为与 tabstop 不同的值来实现额外的粒度控制。如果能够用一个命令将 tabstop
、 softtabstop
和 shiftwidth
设置为相同的值,对我来说仍然是有用的。
tabstop=4 softtabstop=0 shiftwidth=4 expandtab
在插入模式下,按制表符键插入4个空格。按删除键会删除一个空格——所以如果你不小心按到了 tab 键,你必须退后4次。
tabstop=4 softtabstop=4 shiftwidth=4 expandtab
在插入模式下,按制表符键插入4个空格。按退格键删除4个空格。
如果打开 expandtab
,我希望删除键可以删除与选项卡键插入相同数量的空白。因此,在这种情况下,我也认为能够同时为 tabstop
、 softtabstop
和 shiftwidth
赋予相同的值是有用的。
Vim 提供如此多的灵活性,这很好,但我觉得自己不需要它。我只是想能够选择一个选项卡的宽度,以及它是一个“硬”选项卡(使用选项卡字符)还是一个“软”选项卡(由空格组成)。在硬选项卡和软选项卡之间切换很容易(:set expandtab!
) ,但我希望它能更直接地设置选项卡的宽度,而不必摆弄3个不同的参数。
所以我提出的类似 :set stab=4
的建议对我来说还是不错的。