我最近注意到 vim/vimdiff 可以打开链接(似乎使用curl),这是一个很棒的功能。我今天想使用它,如下所示:
vimdiff 依赖项https://raw.github.com/symfony/symfony-standard/v2.0.10/deps
但https://
似乎也没有触发这个很棒的机制。这个页面没有任何身份验证,我认为https://
只是提供数据加密。如何强制 vim 识别该https://
协议?
答案1
正如我在评论中所说,处理 的 netrw 插件http://
不处理https://
(这是通过查看插件代码得出的)。我进入代码并开始https://
工作(不能保证它没有错误,但它适用于我尝试过的几个网站)。我创建了一对补丁,用于netrw.vim
和netrwPlugin.vim
。以下是应用它们的方法,保持原始版本不变,并将修补版本保留在本地配置中:
- 确保您有一个
~/.vim/autoload
和~/.vim/plugin
目录。 - 下载补丁,记住保存它们的位置(我假设它位于
~/.vim/patches/netrw.patch
和~/.vim/patches/netrwPlugin.patch
)
cp /usr/share/vim/vimcurrent/autoload/netrw.vim ~/.vim/autoload
cp /usr/share/vim/vimcurrent/plugin/netrwPlugin.vim ~/.vim/plugin
patch ~/.vim/autoload/netrw.vim ~/.vim/patches/netrw.patch
patch ~/.vim/plugin/netrwPlugin.vim ~/.vim/patches/netrwPlugin.patch
这适用于我的 vim 7.3,希望你也适用。如果没有,请使用这些更改作为指导,看看是否可以破解它。
如果粘贴箱消失了,它们在这儿:
netrw插件.补丁
56c56
< au BufReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe "silent doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(expand("<amatch>"))
---
> au BufReadCmd ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe "silent doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(expand("<amatch>"))
网络补丁
682c682
< if choice =~ "^.*[\/]$" && b:netrw_method != 5 && choice !~ '^http://'
---
> if choice =~ "^.*[\/]$" && b:netrw_method != 5 && choice !~ '^http://' && choice !~ '^https://'
835c835
< elseif b:netrw_method == 5
---
> elseif b:netrw_method == 5 || b:netrw_method == 50
850c850,854
< exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1)
---
> if b:netrw_method == 5
> exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1)
> else
> exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("https://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1)
> endif
853c857,861
< exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)
---
> if b:netrw_method == 5
> exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)
> else
> exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("https://".g:netrw_machine.b:netrw_fname,1)
> endif
865c873,877
< exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1)
---
> if b:netrw_method == 5
> exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1)
> else
> exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("https://".g:netrw_machine.netrw_html,1)
> endif
1565a1578
> let httpsurm = '^https://\([^/]\{-}\)\(/.*\)\=$'
1598a1612,1618
> " Method#5.5: https://user@hostname/...path-to-file {{{3
> elseif match(a:choice,httpsurm) == 0
> " call Decho("https://...")
> let b:netrw_method = 50
> let g:netrw_machine= substitute(a:choice,httpsurm,'\1',"")
> let b:netrw_fname = substitute(a:choice,httpsurm,'\2',"")
>
7075c7095
< if w:netrw_method == 2 || w:netrw_method == 5
---
> if w:netrw_method == 2 || w:netrw_method == 5 || w:netrw_method == 50
答案2
我给作者(drchip)发了邮件,这是他的回答:
你好,
Netrw v144b 已经支持 https (你可以从 http://drchip.0sites.net/astronaut/vim/index.html#NETRW)。
谢谢你,查尔斯·坎贝尔
该网站已迁移,目前可以在以下位置找到:http://www.drchip.org/astronaut/vim/index.html#NETRW
要安装它,我只需下载 .vba.gz 文件,解压它,使用 vim 打开它,然后按照说明进行操作(使用 获取文件:so %
)。
我的 .vim 受版本控制,您可以在此处查看提交:https://github.com/greg0ire/dotvim/commit/bfbe569ce070383c9f0a7b966ad23a35eefb651f