我正在尝试使用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
目录?
答案 0 :(得分:3)
HOME
是一个来自Unix的环境变量(虽然如果定义的话,Windows上的Vim会选择它)。相应的Windows变量是HOMEDRIVE
和HOMEPATH
的串联;这些应该为您定义(在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上的默认名称.vim
为vimfiles
;您的~/.vimrc
中可能有自定义代码操作'runtimepath'
,以便在Windows上使用.vim
;否则这也需要改变。
答案 1 :(得分:1)
对于便携式解决方案,我会使用
shellescape(fnamemodify('~', ':p'))
Vim知道如何翻译~
。