从windows中的vim调用外部脚本时如何引用主目录

时间:2018-01-30 08:40:49

标签: windows vim

我正在尝试使用vim-plug来管理我的vim插件。 因此我将其添加到我的.vimrc文件中:

if empty(glob('~/.vim/autoload/plug.vim'))
  silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif

这应该将plug-vim脚本下载到autoload文件夹(如果它尚不存在)。

这适用于Mac / Linux,但它不适用于Windows。问题似乎是在Windows上不知道~,因此curl命令只会创建一个名为~的新文件夹。

我试过

silent !curl -fLo $HOME/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

但这不起作用。

我试过

  silent !curl -fLo "%HOME%/.vim/autoload/plug.vim" --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

但这也行不通。我收到此错误消息:

E499: Empty file name for '%' or '#', only works with ":p:h": 

请注意,我的系统上定义了%HOME%环境变量。

当然我知道我可以在第一次使用之前手动安装plug.vim脚本,但我仍然想知道:

如何在Windows上从vim中调用外部命令时传递user home目录?

2 个答案:

答案 0 :(得分:3)

HOME是一个来自Unix的环境变量(虽然如果定义的话,Windows上的Vim会选择它)。相应的Windows变量是HOMEDRIVEHOMEPATH的串联;这些应该为您定义(在Windows命令提示符中使用set HOME进行检查)。

当您使用:!命令时,特殊字符(例如:help filename-modifiers %)需要转义;您可以使用shellescape()功能。请务必将{special}参数设置为1(或切换为:call system()):

execute 'silent !curl -fLo' shellescape("%HOMEDRIVE%%HOMEPATH%/.vim/autoload/plug.vim", 1)  '--create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'

请注意,Windows上的默认名称.vimvimfiles;您的~/.vimrc中可能有自定义代码操作'runtimepath',以便在Windows上使用.vim;否则这也需要改变。

答案 1 :(得分:1)

对于便携式解决方案,我会使用

 shellescape(fnamemodify('~', ':p'))

Vim知道如何翻译~