让vim/curl识别https://链接

让vim/curl识别https://链接

我最近注意到 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.vimnetrwPlugin.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

相关内容