这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战
0. 参考资料
1. Tab 键与空格键的配置项
Vim 针对空格提供了细粒度的配置项,一共有 4 项:
tabstop:指定一个tab字符的宽度,缩写为ts。expandtab:激活该项会让空格代替tab字符,禁用该项需要使用noexpandtab。softtabstop:指明用多少个空格来代替tab字符,缩写为sts。shiftwidth:指明在普通模式下用缩进命令插入或删除的空格数量,缩写为sw。
2. 实例演示
默认设置
ts=8 sts=0 sw=8 noexpandtabVim中默认设置用一个制表符\t来表示tab键,不使用空格替换- 插入模式中的退格键会删除制表符
- 制表符的宽度为
8列 - 在普通模式下使用
<或者>调整缩进时,相当于删除和增加制表符
ts=8 sts=0 sw=8 expandtab
- 与默认设置的区别在于激活了
expandtab选项 Vim会用8个空格代替制表符- 插入模式中的退格键一次只会删除一个空格
- 在普通模式下使用
<或者>调整缩进时,一次性减少或添加8个空格
ts=8 sts=8 sw=8 expandtab
softtabstop设置为8,此时在插入模式中退格键可以一次性删除8个空格- 普通模式下的缩进行为与之前保持一致,因为没有修改
shiftwidth选项 - 一般情况下,
softtabstop需要与shiftwidth相等,这样在插入模式下使用tab和退格键时的行为就与在普通模式下使用<和>调整缩进的行为一致了。
ts=8 sts=4 sw=4 expandtab
- 激活了
expandtab选项,所有插入的制表符都会用空格代替。 - 插入模式下,由于
softtabstop的设置,使用tab和退格键都是4个空格。 - 同样,在普通模式下的缩进也是
4个空格,这是由shiftwidth决定的。 - 但是如果有现存的
\t制表符,该符号会占据8个列宽。
ts=8 sts=4 sw=4 noexpandtab
- 使用
noexpandtab将不会用tab键代替空格。 softtabstop设置为4,它优先于tabstop。所以在插入模式下我们键入tab,首先将会输入4个空格,只有再按一次tab,才会删除原先输入的4个空格,用一个占据8个列宽的制表符替换它。- 在普通模式下,由于
shiftwidth设置为4,所以使用缩进命令时的行为与插入模式中类似。
ts=4 sts=4 sw=4 noexpandtab
- 减少
tabstop到4,可以看到一个制表符占据4个列宽。 - 在插入模式使用
tab键和退格键、在普通模式使用缩进命令,都会对制表符进行操作。
同时设置 ts = sts = sw
- 如果你不想让空格和制表符混在一起的话,需要保证
tabstop等于softtabstop。 - 如果你只想用空格而不是制表符的话,那么你需要让
softtabstop等于shiftwidth。 - 所以一般而言,同时设置这三个值,并让它们相等是比较好的做法。
完成于 2019.7.4