1. 制表符与空格
默认情况下按<Tab>键会输入一个制表符,但是几乎所得编辑器都支持空格替换制表符的缩进策略,Vim中通过设置’expandtab’选项控制,设置该选项时,按下<Tab>键后输入的是多个空格字符,输入的空格数量和制表符所设置的宽度相关(‘tabstop’选项)。
2. 设置缩进格式的几个选项
a. tabstop
设置一个制表符的宽度,也可以认为是所占空格的数量(设置’expandtab’选项时)。
b. expandtab
设置是否展开制表符为空格。
c. softtabstop
这个选项取决于上面两个选项的值。当设置expandtab时,softtabstop的值不生效,按下tab键时,输入tabstop个空格。当设置noexpandtab时并且softtabstop等于0的情况下,按<Tab>键输入一个制表符,宽度为tabstop的值;softtabstop小于0时,按<Tab>键输入的空白字符取决于shiftwidth选项的值,如果shiftwidth的值小于tabstop,则输入shiftwidth个空格字符,如果shiftwidth等于tabstop则输入一个制表符,如果大于tabstop,先输入一个制表符,剩下的字符用用空格填补,空格数量是shiftwidth减去tabstop的差;softtabstop大于0且小于tabstop时,输入softtabstop个空格,等于tabstop时,则输入一个制表符,大于tabstop时,先输入一个制表符,剩下的字符用空格补全,空格数量是softtabstop减去tabstop的差。下面是更为直观的伪代码:
if set expandtab
spaces with tabstop
else
if softtabstop == 0
tab with tabstop
else if softtabstop < 0
if shiftwidth < tabstop
spaces with shiftwidth
else if shiftwidth == tabstop
tab with shiftwidth
else
tab and shiftwidth-tabstop spaces
else
if softtabstop < tabstop
spaces with softtabstop
else if softtabstop == tabstop
tab with softtabstop
else
tab and softtabstop-tabstop spaces
end
end
如果softtabstop和shiftwidth同时不大于0,按<Tab>键输入制表符,占位宽度为tabstop的值。
d. shiftwidth
设置执行缩进操作时的字符宽度,比如shiftwidth等于8时,’>’命令把代码向右缩进8个空格的宽度。
e. :retab命令
临时修改当前的tabstop值,用新的值替换包括制表符在内的空白字符,如果不指定数值或者是0,则使用’tabstop’选项的值。如果设置了’expandtab’选项,则用对应数量的空格替换制表符。
h. ‘smarttab’选项
设置该选项时影响每行前端的空白字符输入,当在每行前端按下<Tab>键,Vim按’shiftwidth’设置的值输入空白字符,而不用’tabstop’的值,’tabstop’和’softtabstop’选项用在每行的其他部分的空白字符的输入。如果’shiftwidth’小于tabstop,则输入shiftwidth个空格。如果输入的空格数等于一个制表符宽度时,用制表符替换(设置’noexpandtab’时)。在每行前端,按退格键<BackSpace>时则按’shiftwidth’的值删除同等宽度的空白字符。
3. 控制每行字符数使用’textwidth’和’formatoptions’选项
’textwidth’选项用于设置Vim中每一行最长的字符数。’formatoptions’是定义了文件格式的一系列标志,其中标志’t’使textwidth自动生效,一旦输入的字符个数达到或超过textwidth所设置的值时,Vim会在遇到空白字符时自动在行尾插入换行符。
4. 代码格式缩进
=根据格式设置和上下文自动缩进代码。
>向右缩进’shiftwidth’个空格宽度的字符,可以是制表符、空格或混合的空白字符。根据’expandtab’的选项的设置而定。
<向左缩进’shiftwidth’个空格宽度的字符,可以是制表符、空格或混合的空白字符。根据’expandtab’的选项的设置而定。
>>和<<可以根据指定的行数对文本向右或向左缩进’shiftwidth’个空格宽度。例如,从当前行开始到以下10行,向右缩进’shiftwidth’个空格宽度,则输入”10>>”。
5. 文件类型检测及在ftplugin中添加自己的插件
当执行:filetype on命令时,Vim进行文本类型的检测,一般把这条命令放在vimrc文件中。
还可以定制自己的对应文件类型的插件,把自己写的插件放入$HOME/.vim/ftplugin或$HOME/.vim/after/ftplugin目录中,然后执行:filetype plugin on命令使Vim识别自己的插件。更多细节请参考3.2.2、3.2.5、3.18.1.a三节内容。
6. 文本编码格式及转换
Vim支持三种不同操作系统上的文本格式,它们分别是Unix/MacOS/windows,它们的区别是unix的文本行以换行符(0x0A)结尾,MacOS的文本行以回车符(0x0D)结尾(现代的MacOS已经用0x0A了),windows的文本行以回车加换行符(0x0D0x0A)结尾。这可以通过’fileformat’选项进行设置,它的值可以是下面三个,分别对应三种系统上的文本行:
![9788d8add6dc874987f1aaeaea23d132.png](https://i-blog.csdnimg.cn/blog_migrate/f2c5d08a4e67f1c60e5f5ee48041c212.png)