我可以使用vim -u filename
来filename
代替我的默认.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
您的普通帐户工作。