默认情况下,如果vim中的缓冲区包含诸如http://www.google.com之类的URL,则在正常模式下gx会使用该URL打开浏览器。那很方便。但是,如果URL具有URL参数(例如http://www.google.com/search?q=stuff),则会丢失URL参数(即仅打开http://www.google.com/search)。

我正在使用MacVim 7.4补丁183,将Chrome作为主要浏览器(在OS X 10.9上)。

是否有一种简单的方法,最好是进行最少的自定义,以使gx识别完整的URL?

评论

我无法在Linux上的vim 7.4上重现这一点。当对我使用'let g:netrw_browsex_viewer ='firefox'时,该参数会正确传递给firefox。

@PhilippFrank示例URL也不适合我(Vim 7.4,Linux)……无论如何,我的解决方案是在可视模式下选择URL,然后使用gx(虽然不理想,但比复制/粘贴)。

这是一个变量,而不是一个选项,因此您需要使用let。

我无法在Windows和Chrome上使用GVim 7.4进行复制。您提到的所有URL均由gx完全打开。

确认OP的错误。尝试使用VIM 7.4.473和7.4.663。从预设的用户帐户(无.vimrc)尝试过,具有不同的终端(urxvt,sakura)和不同的浏览器(g:netrw_browsex_viewer设置为'uzbl-browser'/'firefox'/'google-chrome'。

#1 楼

正如@Carpetsmoker在其评论中指出的那样,g:netrw_gx决定了将被视为URI的一部分。

默认情况下将其设置为"<cfile>"。来自文档(:help <cfile>):

<cfile> is replaced with the path name under the cursor

让我感到困惑的是,为什么忽略了URL的参数部分(即?)作为“路径名”的一部分,但是我最终选择设置以下内容作为解决方案:

" Use whole "words" when opening URLs.
" This avoids cutting off parameters (after '?') and anchors (after '#'). 
" See http://vi.stackexchange.com/q/2801/1631
let g:netrw_gx="<cWORD>"                                                                                                                   
现在,其中包括W会选择的内容。 (尝试在VIM中的字符串上使用viW。)

从文档:
<cWORD> is replaced with the WORD under the cursor


提示:在可视模式下使用gx,它将打开可视选择的字符串(无论以上配置如何)。

评论


另一个奇怪的行为:当URI以/结束时,它首先被下载(带有curl),然后被打开。删除结尾的/,将在浏览器中直接打开URI。

–user569825
15年4月17日在18:10

“路径名”由“ isfname”选项定义,其中不包括?默认情况下为有效的文件名字符。更改此选项需要格外小心,因为不能将其设置为本地缓冲区。除非NetRW更改此选项,否则这说明了为什么OP网址不能与gx一起使用。也许使用的NetRW版本存在差异,这可以解释Carpetsmoker看到的不同行为。

–詹姆斯
2015年4月17日在21:28



#2 楼

在Mac上,我必须在.vimrc中使用以下内容:
nmap gx viW"ay:!open <C-R>a &<CR>

说明:


viW"ay复制到a寄存器中<C-R>a从中粘贴

!open调用MacOS默认打开工具。