根据目录设置Vim的shiftwidth和tabstop

时间:2013-01-18 20:15:48

标签: vim coding-style

我正在进行一个项目,目前编码标准是使用2个空格缩进。但是,在其他项目中,我使用了4个空格缩进。

有没有一种简单的方法告诉vim某个目录中的所有文件都应该有2个空格的tabstop?

5 个答案:

答案 0 :(得分:14)

使用与目录匹配的autocmd并设置您需要的任何选项:

au BufRead,BufNewFile,BufEnter /path/to/dir/* setlocal ts=2 sts=2 sw=2

这也适用于子目录中的文件。

正如Ingo Karkat所指出的,此类命令应该使用setlocal而不是set,以便特定于缓冲区。

答案 1 :(得分:4)

古老的Tim Pope刚刚发布了一个插件调用Sleuth,它根据当前文件中使用的内容自动确定shiftwidth和tabstop(以及其他缓冲区选项)(或者,令人难以置信的是,如果它是一个新的缓冲区,基于在附近的文件上。)

答案 2 :(得分:1)

如果您不担心这些项目目录例外的中央配置,Nikita Kouevda的:autocmd解决方案简单有效。另一方面,如果您希望将特定配置与项目一起存储(并且不希望通过模型将其嵌入到所有文件中),则可以使用以下两个选项:

如果你总是从项目根目录启动Vim,那就是内置的

:set exrc

允许从当前目录中读取.vimrc文件。您可以在其中放置:set ts=2 sw=2 et命令。

否则,您需要插件的帮助; vim.org上有几个;我可以推荐localrc plugin

答案 3 :(得分:1)

前段时间我完全根据这些需求编写了插件:Vimprj。这是一个用于管理不同项目选项的插件。

有一个人甚至写过关于它的nice article

很快:您需要在项目的根目录(或.vimprj目录中创建一些.vimprj文件)创建.vim文件,并且每次切换到此项目时,此文件或者目录.vimprj将被采购。

阅读插件页面了解详情,如果您对此插件有任何问题,请随时问我。

答案 4 :(得分:0)

embear / vim-localvimrc https://github.com/embear/vim-localvimrc运作良好。

我创建了一个.lvimrc文件,其中包含:

setlocal noexpandtab
setlocal shiftwidth=8
setlocal tabstop=8

并且对于包含autocmd FileType的子目录中的每个文件,它优于.vimrc的{​​{1}}默认配置。

插件会在父目录中找到每.lvimrc个来源,首先是根目录,因此.lvimrc越深越优先。

EditorConfig https://github.com/editorconfig/editorconfig-vim是一个很好的选择,如果您控制源树,每个人都必须使用的设置,因为它包含编辑器不可知的设置(以及Vim实现)。