如何在vim插件中获取该插件的目录?

3

我需要从我的插件目录中复制一个文件,但我不知道如何获取包含插件目录的字符串?我知道我在我的机器上安装了插件,但我希望插件能够在其他人的机器上工作,包括Windows。我该怎么做?


为什么需要从插件目录中复制某些内容?安装插件时,为什么不直接将其放在正确的位置? - FDinoff
我必须复制并修改它以适应用户的项目。这不是一个静态文件。 - SteveDeFacto
当需要时,我会将那个文件的内容放入一个变量中,并将其写入用户项目中的文件。 - romainl
1个回答

8
为了获取插件目录的完整路径,您可以使用以下代码来获取插件被加载时的目录并将其存储在变量中。
let s:plugindir = expand('<sfile>:p:h:h')

您只需使用变量获取插件目录。 expand() 将通配符扩展为字符串。
<sfile> 是正在源代码的文件。
:p 在扩展名称时将其转换为完整路径。
:h 从路径中删除文件名。
:h 再次删除文件名(在这种情况下应该是插件目录)。
请参阅 :h filename-modifiers:h expand()

那似乎不是我想要的。我想要像这样的东西,“/home/steven/.vim/bundle/myplugin”。 - SteveDeFacto
@SteveDeFacto 添加另一个 :h 以从路径中删除插件目录。 - FDinoff
返回当前工作目录。我非常怀疑<sfile>是否是我所需要的。 - SteveDeFacto
1
@SteveDeFacto 嗯,这对我起作用...或者至少我认为是这样。当我把echo expand('<sfile>:p:h:h')放在~/.vim/plugin/dir.vim中时,输出为/home/fdinoff/.vim - FDinoff
将 expand 的输出存储在插件中的一个变量中,然后让您的函数在以后使用该变量。 - FDinoff
直到我按照@FDinoff的方法去做,这才对我起作用。在函数中将其作为变量调用let dir = expand(...)是行不通的。但是在脚本的顶部调用let s:dir = expand(..)是可以的。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接