按下时 Vim 选项卡的大小并且当自动缩进适用时

按下时 Vim 选项卡的大小并且当自动缩进适用时

我决定将标签大小从 4 改为 2,为什么不呢?其他想要查看代码的人当然可以使用他们的偏好设置。

不过,有一个疑问。

如果我按下 Tab 键,它会插入 2,但 Vim 的自动缩进仍会输入 4。我该如何更改才能将其改为 2?

另一个不相关的问题:哪种缩进样式最适合 C 和类似语言?我一直在使用 1TBS,但有很多可供选择。其中有没有更专业或更受欢迎的?

答案1

尝试将 ' shiftwidth' 设置为与 ' tabstop' 相同的值。更好的是,如果您使用的是较新的 Vim 版本,请将 ' shiftwidth' 设置为 0,它将默认为 ' tabstop' 所设置的值。

答案2

Vim 缩进选项

Vim 主要使用 3 个缩进大小设置:

  • tabstop, ts:当 Vim 在打开的文件中遇到制表符时,它会将制表符显示为 {ts} 空格(参见tabstop帮助,或者:help tabstop在 Vim 中输入)。
  • softtabstop, sts:当你编辑文件时按下 tab 键,Vim 会使用此设置来定义插入制表符的宽度(见softtabstop 帮助,或者:help softtabstop在 Vim 中输入)。
  • shiftwidth, sw:Vim 缩进时使用的空格数,可以使用自动缩进或常用的>>,<<命令。正如 Heptite 所注意到的,这就是您在这种特殊情况下所寻找的。而且,Vim 的最新版本确实允许您不定义此选项,shiftwidth然后会采用 定义的值tabstop。非常方便(请参阅shiftwidth帮助)。

例子

例如,如果您使用以下设置:

set sts=4
set ts=2
set sw=8

这些将产生以下行为:

  1. 在文件中插入制表符将产生 4 个空格宽的缩进。
  2. 由于您的tabstop设置为 2,因此这实际上相当于 2 个制表符。这很容易检查,只需使用listlistchars选项显示制表符即可。
  3. 如果使用 缩进一行>>,缩进将有 8 个空格宽(因此,相当于 4 个制表符,基于tabstop值,与上述相同)。

在此处输入图片描述

Vim 缩进建议(来自 Vim 文档)

来自tabstop帮助(:help tabstop在 Vim 中):

There are four main ways to use tabs in Vim:
  1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
    (or 3 or whatever you prefer) and use 'noexpandtab'.  Then Vim
    will use a mix of tabs and spaces, but typing <Tab> and <BS> will
    behave like a tab appears every 4 (or 3) characters.
  2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
    'expandtab'.  This way you will always insert spaces.  The
    formatting will never be messed up when 'tabstop' is changed.
  3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
    |modeline| to set these values when editing the file again.  Only
    works when using Vim to edit the file.
  4. Always set 'tabstop' and 'shiftwidth' to the same value, and
    'noexpandtab'.  This should then work (for initial indents only)
    for any tabstop setting that people use.  It might be nice to have
    tabs after the first non-blank inserted as spaces if you do this
    though.  Otherwise aligned comments will be wrong when 'tabstop' is
    changed.

我个人主要使用第二种解决方案,使用 2 个空格宽的制表符。

set ts=2
set sts=2
set et     "expand tabs to spaces

答案3

根据http://vim.wikia.com/wiki/Indenting_source_code,'filetype plugin indent on' 命令将导致程序使用位于 Vim 安装的 indent 子目录中的文件类型特定的缩进脚本。该页面还指出,'cindent' 在 C 和 C++ 文件中自动使用,您不需要手动使用该命令。

我对 Vim 不是很熟悉,因为我只偶尔使用它进行一些基本的文本编辑,但我会尝试手动发出“cindent”命令以使用 Vim 的默认自动缩进大小来编辑该代码。如果这不起作用,您可以尝试“filetype plugin indent on”并自行编辑脚本以获得所需的缩进。

相关内容