根据目录设置Vim的shiftwidth和tabstop

13

我目前正在进行一个项目,其中编码规范是使用2个空格缩进。然而,在其他项目中,我使用4个空格缩进。

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


相关问题 链接 - Nikita Kouevda
可能是多个vim配置?的重复问题。 - Ciro Santilli OurBigBook.com
@CiroSantilli 这个问题已经有一个被接受的答案了。为什么你要建议可能的重复问题呢?那些答案明显比这里被接受的答案更差。 - tghw
您认为这些问题是相同的吗?如果是,我们应该将所有信息集中在单个页面上,而最简单的标准是选择最老的问题。另一个问题在投票标准上也获胜了。即使被标记为重复,此问题及其答案仍将有用。 - Ciro Santilli OurBigBook.com
不,我不认为它们是相同的。我不会选择其他问题中给出的答案。 - tghw
5个回答

20

使用匹配目录并设置所需选项的autocmd

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

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

正如Ingo Karkat指出的那样,这些命令应该使用setlocal而不是set,以使其仅限于缓冲区。


2
请使用:setlocal,否则这些设置会影响后续打开的其他文件。 - Ingo Karkat
@IngoKarkat 谢谢你,我忘了那个。已经修复了。 - Nikita Kouevda

5

备受尊崇的Tim Pope刚刚发布了一个名为Sleuth的插件,它可以自动确定当前文件中使用的shiftwidth和tabstop(以及其他缓冲区选项),甚至可以根据附近的文件(如果是新的缓冲区)来确定。


3
如果您不关心这些项目目录异常的中央配置,那么Nikita Kouevda的:autocmd解决方案简单而有效。另一方面,如果您想将特定配置存储在项目中(并且不想通过modeline嵌入所有文件),则有以下两个选项:
如果您始终从项目根目录启动Vim,则可以使用内置的
:set exrc

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

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


这是一个不错的选择,但最好使用 :set exrc:set secure 一起使用。 - Nikita Kouevda

1

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

甚至有人写了一篇好文章介绍它。

简而言之:您需要在项目的根目录下创建.vimprj文件(或带有一些.vim文件的.vimprj目录),每次切换到该项目时,此文件或目录.vimprj将被调用。

详细信息请阅读插件页面,并随时向我提问,如果您在使用此插件时遇到任何问题。


0

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

我创建了一个包含以下内容的 .lvimrc 文件:

setlocal noexpandtab
setlocal shiftwidth=8
setlocal tabstop=8

它胜过了我的.vimrc中默认的autocmd FileType配置,对于每个包含.lvimrc的子目录中的文件都是如此。

该插件在父目录上搜索每个发现的.lvimrc,优先查找根目录,因此.lvimrc越深层次,则其优先级就越高。

EditorConfig https://github.com/editorconfig/editorconfig-vim 是一个很好的选择,如果您控制源代码树,可以为所有人使用设置,它包含与编辑器无关的设置(以及Vim实现)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接