13

我有一个项目,我目前正在处理其中的编码标准是使用 2 个空格缩进。然而,在其他项目中,我使用 4 个空格缩进。

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

4

5 回答 5

19

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

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

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

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

于 2013-01-18T20:31:09.257 回答
4

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

于 2013-01-19T00:27:39.917 回答
3

如果您不担心这些项目目录异常的集中配置,:autocmdNikita Kouevda 的解决方案简单而有效。另一方面,如果您希望将特定配置存储在项目中(并且不想通过模式将其嵌入所有文件中),您有以下两个选项:

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

:set exrc

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

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

于 2013-01-18T20:30:35.690 回答
1

Some time ago I wrote plugin exactly for these needs: Vimprj. This is a plugin for managing options for different projects.

One guy even wrote nice article about it.

Shortly: you need to create .vimprj file at the root of your project (or .vimprj directory with some .vim files), and every time you switch to this project, this file or directory .vimprj will be sourced.

Read plugin page for details, and feel free to ask me if you have any problems with this plugin.

于 2013-01-18T21:29:31.200 回答
0

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

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

setlocal noexpandtab
setlocal shiftwidth=8
setlocal tabstop=8

对于包含. autocmd FileType_.vimrc.lvimrc

插件源.lvimrc它在父目录中找到的每一个,根端优先,因此越深.lvimrc优先级越高。

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

于 2015-07-19T11:45:49.703 回答