我为每个工作目录提供了不同的选项。我每次工作时都不想set
这些选项。我知道我可以附加vimrc
文件作为选项,但我不想在每个目录中使用相同的配置。我该怎么办?
示例:
对于javascript项目,我想从~/.vimrc_js
对于Python项目,我想从~/.vimrc_py
答案 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 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;和另一个独特的网站