我对每个工作目录都有不同的选择。我不想set
每次工作时都选择这些选项。我知道我可以vimrc
为选项附加文件,但我不想在每个目录中使用相同的配置。这种情况我该怎么办?
示例:
对于 javascript 项目,我想从~/.vimrc_js
对于 Python 项目,我想从~/.vimrc_py
我对每个工作目录都有不同的选择。我不想set
每次工作时都选择这些选项。我知道我可以vimrc
为选项附加文件,但我不想在每个目录中使用相同的配置。这种情况我该怎么办?
示例:
对于 javascript 项目,我想从~/.vimrc_js
对于 Python 项目,我想从~/.vimrc_py
如果每个项目都使用不同的语言,那么Jamie Schembri 所描述的内置文件类型插件 ( ftplugin ) 机制就可以正常工作。如果您确实需要对同一类型的文件进行不同的设置,请继续阅读:
如果可以集中配置本地异常,您可以将此类自动命令放入您的~/.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 插件,它甚至允许本地文件类型特定的配置。
请注意,从文件系统读取配置具有安全隐患;你可能想要:set secure
。
这可能是您正在寻找的,并且是一种非常简洁的方法。您需要filetype plugin on
在 vimrc 中进行设置才能使其正常工作。然后必须创建一个文件,~/.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,但不是将设置写在一个大行中,您可以改为 source 一个文件。例如:
autocmd FileType markdown,tex,textile source ~/.vim/lang_settings/text.vim
你可以试试localvimrc插件。它会尝试加载.lvimrc
到您的项目目录或上面的目录中。您可以将每个项目的设置放在那里。
另一个解决方案是EditorConfig。它为不同的项目或文件类型设置编码样式。它适用于 Vim,但它与编辑器无关,因此您可以将.editorconfig
文件与其他文本编辑器(SublimeText2、Notepad++、Vim、Emacs、Textmate、Gedit)或 IDE(基于想法的 IDE、RubyMine、PHPStorm、Visual Studio)一起使用。
这是另一个选项,类似于@Ingo Karkat 的第一个建议,除了它允许您为每个工作目录拥有单独的 vimrc 文件(这是对 OP 问题的更接近的答案)。它比使用一个可用的插件有点hackier,但它确实避免了 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,则会出现一些不一致的行为( “为什么 /Baz/Foo 使用我的 /Foo vimrc?!”)
/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 用于您的“我最伟大的应用程序”,另一个用于您的独特网站