159

在我的工作中,我被要求按照house风格进行缩进,如下:

  • 编码 html 和 ruby​​ 时的 2 个空格
  • 编写 javascript 时的选项卡,建议使用 tabwidth=4

为每种文件类型指定不同的空白首选项的最佳方法是什么?

4

5 回答 5

254

有很多方法,但这里有一个简单易懂的方法。将这些行添加到您的~/.vimrc

autocmd FileType html setlocal ts=2 sts=2 sw=2
autocmd FileType ruby setlocal ts=2 sts=2 sw=2
autocmd FileType javascript setlocal ts=4 sts=4 sw=4
于 2009-10-13T20:08:52.163 回答
91

彼得的回答很简单,但不幸的是选项不正确。您需要改用以下选项:

autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 noexpandtab

另请注意:

  • 您可以通过使用使 vim 显示制表符:set list
  • :retab!正确设置制表符/空格选项后,您可以使用该命令让 vim 修复文件(用制表符替换空格,反之亦然) 。
于 2009-10-13T23:43:57.510 回答
37

对彼得的回答 +1,但 Vim 也提供了另一种解决方案。如果你想做一些比单个 更复杂的事情setlocal,比如一次设置一大堆选项、命令和映射,那么 vim 的文件类型插件功能就会派上用场。

你需要有filetype plugin onfiletype plugin indent on在你的.vimrc,然后创建一个插件,例如你可以创建的 ruby ~/.vim/ftplugin/ruby.vim​​。从技术上讲,您可以在此处使用您喜欢的任何命令,以便在加载 Ruby 文件时运行,但推荐的命令包括setlocalmap <buffer>command -buffer和定义函数。更多信息在用户指南中;如果您对 vim 脚本非常熟悉,请跳转到:help 41.11,否则请阅读:help usr_40and :help usr_41

于 2009-10-13T20:23:47.157 回答
11

还有一个不错的 vim 脚本:DetectIndent尝试检测您打开的文件的缩进。如果您处理许多具有不同编码风格的文件,这将非常方便。

我在.vimrc中使用自动命令:

:autocmd BufReadPost * :DetectIndent 
于 2009-10-16T06:04:27.217 回答
1

要在按下 Tab 键时插入空格字符,请设置 'expandtab' 选项:

:set expandtab

下一步是控制按下 Tab 键时将插入的空格字符数,设置 'tabstop' 选项。例如,要为制表符插入 2 个空格,请使用:

:set tabstop=2

参考:http: //vim.wikia.com/wiki/Converting_tabs_to_spaces

于 2015-06-09T13:54:55.323 回答