使用 `gx` 的一些问题

#1

vim8 中内嵌了一些标准的官方插件,其中有一个是 netrw,它使得通过本地或者网络来读写文件变得更加容易(参考netrw:help netrw),其中有一个功能 gx 可以允许用户通过特定程序浏览 vim 中的 url。

比如,你打开 vim,输入一个 url,比如 https://www.baidu.com ,然后将光标移动到这个 url 上,按 gx,如果配置正常的话,vim 就会调用你的默认浏览器来打开它,这样你就可以直接看到这个网址中的内容了,这在我们阅读一些带有 url 的文本,比如 markdown 类型的文件时是很有帮助的。当然你也可以用这个功能通过 file:// 来打开你本地的文件或目录,相应地,它会根据你的文件的类型来调用对应的软件来打开它。

参考

:help gx


stack overflow

但是我在使用 gx 的过程中出现了一些问题。
前面提到,vim 会调用系统的软件来打开对应的 url 描述的文件,在这个过程中,实际是 vim 调用操作系统提供的打开文件的接口,然后操作系统中的这个接口服务程序会根据 url 或文件的类型调用相应的软件来打开它。如果是 http 或 https 协议的 url,系统会调用浏览器来打开这个 url;如果是 file:// 协议,它会先判断文件的类型,然后根据文件的类型调用相应的程序软件去打开它。

这个接口

  • 对 Windows 32 或 64 来说,是 FileProtocolHandler dll。
  • 对 Gnome (带 gnome-open) 来说: 是 gnome-open。
  • 对 KDE (带 kfmclient) 来说: 是 kfmclient。
  • 对 Mac OS X 来说: 是 open。

但在我的 ubuntu 16.04, unity 的桌面环境中,这些都不起作用,我对着一个 url 按 gx 后并没有反应,操作系统没有打开任何的外部软件来打开这个 url(url 是正确的)。
我尝试设置了

:let g:netrw_browsex_viewer = "/usr/bin/xdg-open"

:let g:netrw_browsex_viewer = "/usr/bin/gvfs-open"

都没有用,但是我在 shell 中却可以通过这样的方式

$ /usr/bin/xdg-open https://www.baidu.com
$ /usr/bin/xdg-open file:///my/path/file

来调用不同的程序打开这些 url, 在 vim 中通过 gx 来调用 xdg-open 却没有反应。
我不知道哪里出了问题,也没有在网上找到解决的方法,所以来求助。:smile:

另:
当我在 vim 中设置用 firefox 来打开这些 url 的时候,

:let g:netrw_browsex_viewer = "/usr/bin/firefox"

firefox 的确是可以打开这些 url,但是都是通过 firefox 浏览器来打开的,(其中我本地的 file:///my/path/ 也是通过firefox 在浏览器中打开的

example),我希望可以用对应的桌面应用来打开它们。

注:我使用的是 gvim8

Thanks :blush:

0 Likes

#2

发现自己也有这个问题 :joy: gvim不行,vim可以。
有没有大神帮助一下

0 Likes