如何在Vim中更改标签大小?


172

每次我在CSS中添加选择器并按下Enter以定义属性时,它最终都会像这样:

#selector {
        property: value;
}

(8个空格的制表符)

我该如何配置Vim使其如下所示:

#selector {
    property: value;
}

(4个空格标签)


4
您是否需要一个4个空格宽度的标签?四个空格?还是四个1个空格宽度的标签?它们是不同的东西,您不清楚。无论如何,请先阅读:he ts,:he sw和:he expandt
abeyer

Answers:


102

扩展zoul的答案:

如果要将Vim设置为在编辑特定文件类型时使用特定设置,则将要使用自动命令:

autocmd Filetype css setlocal tabstop=4

这样可以使选项卡显示为4个空格。设置expandtab将使Vim tabstop在按Tab时实际插入空格(它们的数量由来控制)。您可能要使用它softtabstop来使退格键正常工作(也就是说,减少缩进时应使用制表符,而不是每次都删除一个字符)。

为了充分受过教育的决定至于如何设置的东西了,你需要上阅读Vim的文档tabstopshiftwidthsofttabstopexpandtab。在expandtab:help 'expandtab)下找到最有趣的位:

在Vim中使用标签的主要方法有四种:

  1. 始终将“ tabstop”设置为8,将“ softtabstop”和“ shiftwidth”设置为4(或3或您喜欢的任何值),并使用“ noexpandtab”。然后Vim将使用制表符和空格的混合,但是键入并表现得像一个制表符每4(或3)个字符出现一次。

  2. 将“ tabstop”和“ shiftwidth”设置为您喜欢的任何值,然后使用“ expandtab”。这样,您将始终插入空格。更改“ tabstop”时,格式永远不会搞乱。

  3. 根据需要设置'tabstop'和'shiftwidth'并使用| modeline | 在再次编辑文件时设置这些值。仅在使用Vim编辑文件时有效。

  4. 始终将“ tabstop”和“ shiftwidth”设置为相同的值,并设置“ noexpandtab”。然后,这应该对人们使用的任何制表符设置起作用(仅适用于初始缩进)。如果这样做,最好在第一个非空格后插入制表符作为空格。否则,更改“ tabstop”时对齐的注释将是错误的。


另外,不要担心以后可能会改变主意……请参阅:help retab(检查!变体)。
米哈尔Marczyk

是使用autocmd还是使用.vimrc的补充,还是替代方法?
Josh Desmond

224
:set tabstop=4
:set shiftwidth=4
:set expandtab

这将插入四个空格而不是制表符。空格更“稳定”,这意味着带有空格的缩进文本将在浏览器和任何其他应用程序中显示相同。


83
是的,但制表符是语义的(每个制表符表示缩进的一层),而空格纯粹是表示形式的。换句话说,使用制表符将使其他人查看您的代码以显示他们舒适的宽度,而空格则不允许这样做。
K Prime 2010年

11
请注意,如果您更喜欢使用'>''<'将文本移动到与Tab键相同的距离,则只需:set shiftwidth=0在vimrc中将其永久忘掉,因为这告诉vim您始终希望它与之匹配tabstop
SeldomNeedy

132

要对一个会话进行更改,请使用以下命令:

:set tabstop=4

要使更改永久生效,请将其添加到~/.vimrc~/.vim/vimrc

set tabstop=4

这将影响所有文件,而不仅仅是CSS。只影响CSS文件:

autocmd Filetype css setlocal tabstop=4

Michał的回答所述


2
如果要让制表符充当四个空格,则必须将@Zoul答案中的其他行也添加到.vimrc中。也就是说,也将'set shiftwidth = 4'和'set expandtab'添加到.vimrc中。
qartal

7
问题是“如何更改Vim中的选项卡大小?”
基思

这就是我要做的。为了确保 ~/.vimrc始终进行备份,我通常将文件保存在我的Dropbox文件夹中,然后创建一个指向桌面的符号链接:ln -s /home/myfolder/Dropbox/.vimrc ~
附魔

41

此页面上的几个答案是针对上述问题的“单次使用”修复程序。这意味着,下次使用vim打开文档时,将返回以前的标签设置。

如果有人对永久更改选项卡设置感兴趣:


11
这将插入空格,而不是制表符。
Supernovah

5
@Supernovah,您可以删除“ expandtab”,以获取标签
kommradHomer

27

作为进入vim的一线工具

:set tabstop=4 shiftwidth=4 expandtab

对于永久设置,请将这些行添加到〜/ .vimrc中

set tabstop=4
set shiftwidth=4
set expandtab

6

更新

如果您在特定项目中工作,我强烈建议您使用editorconfig

它使您可以.editorconfig在存储库的根目录处定义一个文件,以定义要用于存储库中每种文件类型的缩进。

例如:

root = true

[*.css]
charset = utf-8
indent_style = space
indent_size = 4

[*.js]
charset = utf-8
indent_style = space
indent_size = 2

有一个vim插件可以根据您打开的文件的配置文件自动配置vim。

最重要的是,该.editorconfig文件在其他许多IDE和编辑器中也自动得到支持,因此它是在具有不同环境的用户之间进行协作的最佳选择。

原始答案

如果您需要经常更改大小,并且不想将其绑定到特定文件类型,则可以在.vimrc文件上使用预定义的命令来快速切换首选项:

nmap <leader>t :set expandtab tabstop=4 shiftwidth=4 softtabstop=4<CR>
nmap <leader>m :set expandtab tabstop=2 shiftwidth=2 softtabstop=2<CR>

这会将两组不同的大小映射到键\ t和\ m。您可以将其重新绑定到所需的任何键。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.