告诉 Vim 使用自定义 .vimrc 很容易,但如何告诉它使用替代路径而不是 ~/.vim?

0xC*_*22L 15 vim command-line vimrc

我可以使用vim -u filenametofilename代替我的默认.vimrc. 我在切换用户上下文 ( su) 以使用my 时使用此方法,.vimrc即使以超级用户身份运行。

我怎样才能达到同样为它默认是文件夹~/.vim,这样我可以指出Vim的命令行到其他文件夹?


我想要达到的目标

好的,假设用户joe( HOME=/home/joe) 和用户root( HOME=/root)。用户joe有一个别名集vim,看起来像这样(但最初使用$HOME变量设置以使其动态化):

alias vim='vim -p -N -n -i NONE -u "/home/joe/.vimrc"'
Run Code Online (Sandbox Code Playgroud)

然后用户joe确实沿东西线sudo su -(但增加了魔术),从而在.bashrc与其他物品从/home/joe将要加载root。用户root现在具有完全相同的别名vim设置,如上所示。

问题是这.vimrc用于各种系统和各种场景。通常,Joe 的帐户被称为joe,但有时它会是类似的内容local.joe或其他任何内容,从而导致 的值不同$HOME。因此,硬编码~/.vim文件夹的绝对路径似乎不是一个好主意。但是,在我们上面的场景中,用户root没有一个文件夹/root/.vim,但是,默认情况下,该文件夹应该通过加载的.vimrc( /home/joe/.vimrc) 存在。

我想要实现的 - 最好是在命令行上 - 是让 Vim/home/joe/.vim在启动时从下面使用插件等root(假设alias设置如图所示 - 其他情况可以忽略)。如果 VimScript 有一些动态方法,请提供指针。但$HOME我认为,使用诸如此类的变量会导致捕获 22。

gar*_*ohn 9

Vim 在 ~/.vim 中查找,因为该目录位于 'runtimepath' 的默认列表中,缩写为 'rtp'。要告诉 Vim 去别处查看,您必须完全指定一个不同的 'rtp' 值,或者例如使用对替换 () 的调用来编辑默认值。如果你只是想让 Vim 先在不同的地方查找你的配置文件,不要在意它也在 ~/.vim 中查找,也不关心它不在你的替代目录中查找,命令很简单:

vim --cmd 'set rtp^=alternate_dir'
Run Code Online (Sandbox Code Playgroud)

:help --cmd
:help :set^=
Run Code Online (Sandbox Code Playgroud)

用你的替代目录替换 .vim 需要更多的输入。

vim --cmd 'let &rtp = substitute(&rtp, "\.vim", "alternate", "g")'
Run Code Online (Sandbox Code Playgroud)

我尝试用~/.vim另一条路径替换,但我无法匹配~,所以我继续发布我拥有的内容。

编辑

我无法匹配~'rtp' 的值的原因是,当该值作为 的值&rtp而不是 的输出获得时:set rtp?, 将~扩展为用户主目录的完整路径名。~结果中没有。

以下作品。

vim --cmd 'let &rtp = substitute(&rtp, $HOME."/\.vim", "alternate", "g")'
Run Code Online (Sandbox Code Playgroud)