Vim 缩进完全攻略

332 阅读2分钟

Vim使用高效但复杂,它的缩进机制对很多人来说更是一团迷。本文为你完全解答Vim的缩进问题,并在文末给出建议设置。

Vim缩进机制和softtab机制

Vim使用输入的<Tab>字符来缩进,但不代表它一定会在它的缓冲区为你保存<Tab>字符。 用户需要了解两个重要机制:缩进机制softtab 机制。

当按下<Tab>,行开头的整个空白部分被认为是缩进,归缩进机制管。它有两个功能:

  • 修改输入逻辑:按下<Tab><BS>都会增加或减少shiftwidth数量的字符宽度。
  • 自动替换空格:整个缩进部分被替换成数个<Tab>和几个用于填充的空格:如果缩进总宽度不是tabstop的整数倍,就会使用空格填充。

softtab 机制是管理非缩进部分的:它在非开头部分为用户提供了和开头部分缩进一样的机制。控制softtab宽度的参数是softtabstop。为了获取和缩进一致的体验,建议把softtabstopshiftwidth设置成相同值。

不要任何<Tab>字符:expandtab 选项

当你不想要<Tab>字符,只想保存等效的空格,启用expandtab选项。在该选项下,缩进机制和 softtab 机制都不会插入和替换任何的<Tab>字符。当然,按下<Tab><BS>的行为不变。

建议设置

  1. 如果你用Vim写代码,建议打开expandtab选项来禁用<Tab>字符,因为首先你不知道在他人的编辑器里代码中的<Tab>会被处理成什么样子,更不用说那些要求必须用空格缩进当语言了。
  2. 至于缩进大小,则取决于你的喜好和社区的规定,你可以通过shiftwidth控制它。
  3. 修改tabstop会改变代码中原有<Tab>的显示宽度,所以最好别动tabstop,而是利用softtab机制:它只会修改该你使用<Tab><BS>的输入行为,而不会干扰<Tab>字符的显示。

我使用的是nvim:

vim.o.expandtab = true -- translate all <Tab> to spaces.
vim.o.shiftwidth = 2 -- change the indent width
vim.o.softtabstop = 2 -- change your <Tab> and <BS> experiance.
-- leave vim.o.tabstop default

如果你使用vim:

set expandtab
set shiftwidth=2
set softtabstop=2