我目前正在进行一个项目,其中编码规范是使用2个空格缩进。然而,在其他项目中,我使用4个空格缩进。
有没有一种简单的方法告诉vim,某个目录中的所有文件都应该有2个空格的tabstop?
我目前正在进行一个项目,其中编码规范是使用2个空格缩进。然而,在其他项目中,我使用4个空格缩进。
有没有一种简单的方法告诉vim,某个目录中的所有文件都应该有2个空格的tabstop?
使用匹配目录并设置所需选项的autocmd
:
au BufRead,BufNewFile,BufEnter /path/to/dir/* setlocal ts=2 sts=2 sw=2
这也适用于子目录中的文件。
正如Ingo Karkat指出的那样,这些命令应该使用setlocal
而不是set
,以使其仅限于缓冲区。
:setlocal
,否则这些设置会影响后续打开的其他文件。 - Ingo Karkat备受尊崇的Tim Pope刚刚发布了一个名为Sleuth的插件,它可以自动确定当前文件中使用的shiftwidth和tabstop(以及其他缓冲区选项),甚至可以根据附近的文件(如果是新的缓冲区)来确定。
:autocmd
解决方案简单而有效。另一方面,如果您想将特定配置存储在项目中(并且不想通过modeline嵌入所有文件),则有以下两个选项::set exrc
允许从当前目录读取.vimrc
文件。您可以在其中放置:set ts=2 sw=2 et
命令。
否则,您需要插件的帮助; vim.org上有几个插件可供选择;我可以推荐localrc插件。
:set exrc
与 :set secure
一起使用。 - Nikita Kouevdaembear/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实现)。