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

Amp*_*wat 24 vim

我对每个工作目录都有不同的选项.我set每次工作都不想这些选择.我知道我可以vimrc为选项附加文件,但我不想在每个目录中使用相同的配置.我怎么能处理这种情况?

示例:

对于javascript项目,我想从中加载设置 ~/.vimrc_js

对于Python项目,我想从中加载设置 ~/.vimrc_py

Ing*_*kat 28

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

中央配置

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

:autocmd BufRead,BufNewFile /path/to/dir/* setlocal ts=4 sw=4
Run Code Online (Sandbox Code Playgroud)

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

具有内置功能的本地配置

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

:set exrc
Run Code Online (Sandbox Code Playgroud)

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

通过插件进行本地配置

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

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

  • `:set secure` 完全没用:只需将 `call feedkeys(":!echo 1>2\n")` 放入 `.exrc` 并观察文件 `2` 出现。因此,您要么确定所有此类文件仅来自受信任的来源,要么从不使用“set exrc”。 (2认同)
  • 为set exrc +1。我觉得每个人都比这个显而易见的答案更加复杂化了这个问题。 (2认同)

Jam*_*bri 8

文件类型插件

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

例如,而不是写你的JavaScript设置~/.vimrc_js,写他们~/.vim/ftplugin/javascript.vim.

自动命令

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

autocmd Filetype <language> <setting>
Run Code Online (Sandbox Code Playgroud)

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

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

autocmd FileType markdown,tex,textile setlocal spell
Run Code Online (Sandbox Code Playgroud)

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

autocmd FileType php setlocal shiftwidth=4 tabstop=4|let php_sql_query=1
Run Code Online (Sandbox Code Playgroud)

AutoCMD +来源

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

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

autocmd FileType markdown,tex,textile source ~/.vim/lang_settings/text.vim
Run Code Online (Sandbox Code Playgroud)


xuh*_*dev 7

您可以尝试使用localvimrc插件。它尝试加载.lvimrc到您的项目目录或上面的目录中。您可以将每个项目的设置放在那里。