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

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

我可以使用vim -u filenamefilename代替我的默认.vimrc。我在切换用户上下文时使用此方法(su)来使用我的 .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"'

然后用户joe按照 的思路做了一些事情sudo su -(但添加了魔法),导致.bashrc和其他好东西/home/joe被加载root。用户现在拥有与上面显示的 setroot完全相同的别名。vim

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

我想要实现的目标(最好是在命令行上)是让 Vim/home/joe/.vim在启动时从底层使用插件等root(假设alias设置为所示 - 其他情况可以忽略)。如果通过 VimScript 有一些动态方法,请提供指针。但我认为使用诸如这样的变量$HOME会导致陷入困境。

答案1

Vim 在 ~/.vim 中查找,因为该目录位于 'runtimepath' 的默认列表中,缩写为 'rtp'。要告诉 Vim 到其他地方查找,您必须完全指定不同的 'rtp' 值,或者使用对 substitute() 的调用编辑默认值。如果您只是希望 Vim 首先在其他位置查找您的配置文件,而不必在意它是否也在 ~/.vim 中查找,也不必在意它是否不在您选择的后续目录中查找,该命令非常简单:

vim --cmd 'set rtp^=alternate_dir'

:help --cmd
:help :set^=

用你的替代目录替换 .vim 需要多输入一点内容。

vim --cmd 'let &rtp = substitute(&rtp, "\.vim", "alternate", "g")'

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

编辑

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

下列作品。

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

答案2

在您选择的 .vimrc 中,您可以指定运行时路径:

let &runtimepath=/path/to/specific/vim/folder

如果您正在使用您的个人,.vimrc那么您可以将其设置为您的个人.vim目录,它应该可以作为su您的普通帐户工作。

相关内容