我对每个工作目录都有不同的选项.我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.
这是你可能正在寻找的,而且是一种非常巧妙的方法.您需要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 FileType markdown,tex,textile source ~/.vim/lang_settings/text.vim
Run Code Online (Sandbox Code Playgroud)