如何获取 Vim 主目录?

asd*_*dfg 13 vim

我想以VIMHOME这种方式设置变量(常见于 Windows 和 Linux),

let $VIMHOME=expand("%:p")."/..",
Run Code Online (Sandbox Code Playgroud)

所以VIMHOME在 Linux中是“~/.vim”或在 Windows 中是“path/to/vimfiles”。

我把它放在一个var.vim文件中,并将它放在插件目录中。它正确加载,但 VIMHOME 仅设置为“./..”。

如何使用 获取文件的完整路径expand

有没有简单的设置方法VIMHOME

编辑: 我将表达式更改为:

let $VIMHOME=expand("<sfile>:p:h")
Run Code Online (Sandbox Code Playgroud)

现在,VIMHOME在 Linux 中设置为“~/.vim/plugin”。

我的要求是将 VIMHOME 设置为“~/.vim”或“path/to/vimfiles”。但,

let $VIMHOME=expand("<sfile>:p:h")
let $VIMHOME=expand("$VIMHOME:p:h")
Run Code Online (Sandbox Code Playgroud)

不管用。

我该如何解决这个问题?

Chr*_*sen 18

把它放在你的var.vim插件文件中:

let $VIMHOME=expand('<sfile>:p:h:h')
Run Code Online (Sandbox Code Playgroud)

%expand将引用正在编辑的文件(即在命令行上给出的路径名)。<sfile>将指的是“来源”的文件(即在进行扩展时处于活动状态的插件或启动文件)。

:p修改使绝对路径和:h后缀丢弃最后的路径名部分(即在这种情况下,文件名)。

  • 请注意,如果您在函数中 expand('&lt;sfile&gt;') ,它可能不会返回您期望的内容。解决方案是在脚本中的函数之外扩展('&lt;sfile&gt;')(在 ag:sfile 变量或其他东西中,使用 :help instance-variables 获取更多信息),然后在函数中使用该变量。 (3认同)

asd*_*dfg 5

这就是我一直在寻找的,

如果有('win32') || 有('win64')
    让 $VIMHOME = $VIM."/vimfiles"
别的
    让 $VIMHOME = $HOME."/.vim"
万一