如何为不同的工作目录加载不同的.vimrc文件?

时间:2013-09-21 11:26:49

标签: vim

我为每个工作目录提供了不同的选项。我每次工作时都不想set这些选项。我知道我可以附加vimrc文件作为选项,但我不想在每个目录中使用相同的配置。我该怎么办?

示例

对于javascript项目,我想从~/.vimrc_js

加载设置

对于Python项目,我想从~/.vimrc_py

加载设置

4 个答案:

答案 0 :(得分:26)

如果每个项目使用不同的语言,Jamie Schembri所描述的内置文件类型插件( ftplugin )机制就可以正常工作。如果您确实需要针对相同类型文件的不同设置,请继续阅读:

中央配置

如果可以集中配置本地例外,您可以将此类autocmds放入~/.vimrc

:autocmd BufRead,BufNewFile /path/to/dir/* setlocal ts=4 sw=4

另一方面,如果您希望将特定配置与项目一起存储(并且不希望通过 modelines 将其嵌入到所有文件中),则可以使用以下两个选项:

具有内置功能的本地配置

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

:set exrc

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

通过插件进行本地配置

否则,您需要插件的帮助; vim.org上有几个;我可以推荐localrc plugin,它甚至允许本地文件类型特定的配置。

请注意,从文件系统读取配置具有安全隐患;你可能想要:set secure

答案 1 :(得分:7)

文件类型插件

这是你可能正在寻找的,而且是一种非常巧妙的方法。您需要在vimrc中设置filetype plugin on才能使其正常工作。然后必须在~/.vim/ftplugin/<language>.vim创建一个文件,该文件将自动加载到使用该语言的任何缓冲区。

例如,不要将JavaScript设置写入~/.vimrc_js,而是将其写入~/.vim/ftplugin/javascript.vim

自动命令

autocmd是在特定语言的基础上设置内容的最简单方法:

autocmd Filetype <language> <setting>

这直接在您的vimrc中进行,并仅加载指定文件类型的设置。

例如,要在各种文本文件中启用拼写检查,可以使用:

autocmd FileType markdown,tex,textile setlocal spell

您可以通过用管道将它们分开来一次设置多个设置,这很快就会变得难以处理:

autocmd FileType php setlocal shiftwidth=4 tabstop=4|let php_sql_query=1

AutoCMD +来源

在极少数情况下,您可能有足够的设置来保证单独的文件,但是想要为多种语言加载它们。使用文件类型插件,您最终会得到重复的文件或符号链接。

一个简单的替代方法是回退到autocmd,但不是在一个大行中写入设置,而是可以改为源文件。例如:

autocmd FileType markdown,tex,textile source ~/.vim/lang_settings/text.vim

答案 2 :(得分:2)

另一个解决方案是EditorConfig。它为不同的项目或文件类型设置编码样式。它适用于Vim,但它与编辑无关,因此您可以将.editorconfig文件与其他文本编辑器(SublimeText2,Notepad ++,Vim,Emacs,Textmate,Gedit)或IDE(基于思想的IDE,RubyMine,PHPStorm)一起使用,Visual Studio)。

答案 3 :(得分:0)

这是另一个选项,类似于@Ingo Karkat的第一个建议,不同之处在于它允许您为每个工作目录提供单独的vimrc文件(这是对OP的更接近的答案)题)。它比使用其中一个可用的插件更麻烦,但它确实避免了localvimrc插件的安全问题,并允许您将所有vimrc变体存储在主目录中,而不是分散在不同的工作目录中(尽管它如果 将它们放在每个相关工作目录的根目录中,它们也可以正常工作。

在.vimrc

if getcwd() =~ 'One Unique Target Directory'
  source ~/.one_unique_vimrc
elseif getcwd() =~ 'Another Unique Target Directory'
  source ~/.another_unique_vimrc
endif

挑战在于你需要将一个vimrc定位到一个独特的路径 - 所以这对于以下目录结构来说效果不会很好 - 如果你有一个用于Foo的vimrc和一个用于Baz的vimrc,会有一些不一致的行为(&#34;为什么/ Baz / Foo使用我的/ Foo vimrc?!&#34;)

/Foo
/Foo/Bar
/Foo/Bar/Baz
/Baz
/Baz/Quux
/Baz/Foo

但它可以很好地处理更像这样的目录结构

/Projects/My Greatest App/
/Projects/My Greatest App/src
/Projects/My Greatest App/bin
/Projects/unique.net/
/Projects/unique.net/index.html
/Projects/unique.net/.htaccess

如果你有一个vimrc用于你最好的应用程序&#39;和另一个独特的网站