通过文件类型设置 Vim 空白首选项

在我的工作中,我被要求按照房子的样式进行缩进,具体如下:

  • 编写 html 和 Ruby 时需要2个空格
  • 当编写 javascript 时,建议使用 tabwidth = 4

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

48103 次浏览

有很多方法,但这里有一个简单,容易理解的方法。把这些行添加到你的 ~/.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

彼得的回答是 + 1,但 Vim 也提供了另一种解决方案。如果您想要做一些比单个 setlocal更复杂的事情,比如同时设置一大堆选项、命令和映射,那么 vim 的 filetype 插件特性可以解决这个问题。

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

Peter 的回答很简单,但不幸的是这些选项并不正确,你需要使用以下选项:

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

还要注意:

  • 可以使用 :set list使 vim 显示制表符。
  • 一旦正确设置了制表符/空格选项,就可以使用 :retab!命令让 vim 修复文件(用制表符替换空格,反之亦然)。

还有一个很好的 vim 脚本: 探测器,它试图检测您打开的文件的缩进。 如果您使用许多具有不同编码风格的文件,那么它非常方便。

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

:autocmd BufReadPost * :DetectIndent

若要在按制表符键时插入空格字符,请设置“ expandtab”选项:

:set expandtab

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

:set tabstop=2

档号: http://vim.wikia.com/wiki/Converting_tabs_to_spaces