Comment puis-je faire en sorte que gx reconnaisse les URL complètes dans vim?

19

Par défaut, si un tampon dans vim contient une URL telle que http://www.google.com, gxen mode normal ouvrira un navigateur avec cette URL. C'est très pratique. Cependant, si l'URL a des paramètres d'URL (par exemple http://www.google.com/search?q=stuff), alors les paramètres d'URL sont manqués (c'est-à-dire qu'ils sont simplement http://www.google.com/searchouverts).

J'utilise MacVim 7.4 patch 183, avec Chrome comme navigateur principal (sur OS X 10.9).

Existe-t-il un moyen simple, idéalement avec une personnalisation minimale, de faire gxreconnaître une URL complète?

Andrew Ferrier
la source
Je ne peux pas reproduire cela avec vim 7.4 sur linux. Le paramètre est correctement transmis à firefox lorsque j'utilise 'let g: netrw_browsex_viewer =' firefox 'pour moi.
PhilippFrank
@PhilippFrank L'exemple d'URL ne fonctionne pas non plus pour moi (Vim 7.4, Linux) ... Dans tous les cas, ma solution est de sélectionner l'URL en mode visuel, puis d'utiliser gx(ce qui n'est pas idéal mais mieux que copier / coller) ).
Martin Tournoij
1
C'est une variable, pas une option, vous devez donc l'utiliser let.
Martin Tournoij
1
Je ne peux pas reproduire avec GVim 7.4 sur Windows et Chrome. Toutes les URL que vous avez mentionnées sont ouvertes exactement par gx.
Gonçalo Ribeiro
1
Confirmation de l'erreur de l'OP. Essayé avec VIM 7.4.473 et 7.4.663. Testé à partir du compte utilisateur prestine (sans .vimrc), avec différents terminaux ( urxvt, sakura) et différents navigateurs ( g:netrw_browsex_viewerdéfini sur 'uzbl-browser'/ 'firefox'/ 'google-chrome'.
user569825

Réponses:

13

Comme le souligne @Carpetsmoker dans son commentaire, g:netrw_gxdétermine ce qui sera considéré comme faisant partie d'un URI.

Par défaut, il est défini sur "<cfile>". Depuis la documentation ( :help <cfile>):

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

Cela m'échappe, pourquoi les parties de paramètre (c.-à-d. ?) D'une URL sont ignorées en tant que parties d'un "nom de chemin", mais j'ai finalement choisi de définir ce qui suit, comme solution:

" 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>"                                                                                                                   

Maintenant, cela comprend tout ce qui Wserait sélectionné. (Essayez viWune chaîne dans VIM.)

De la documentation: <cWORD> is replaced with the WORD under the cursor


Astuce: En utilisant gxen mode visuel , il ouvrira la chaîne sélectionnée visuellement (quelle que soit la configuration ci-dessus).

user569825
la source
Autre comportement étrange: lorsque l'URI se termine par un /, il est d'abord téléchargé (avec curl) puis ouvert. En supprimant la fin /, l'URI est directement ouvert dans le navigateur.
user569825
2
"chemin d'accès" est défini par l' 'isfname'option, qui n'inclut pas ?par défaut un caractère de nom de fichier valide. La modification de cette option nécessite des précautions car elle ne peut pas être définie localement dans le tampon. À moins que NetRW ne modifie cette option, cela explique pourquoi les URL des OP ne fonctionnent pas gx. Peut-être qu'il y a une différence dans les versions de NetRW utilisées, ce qui expliquerait le comportement différent de Carpetsmoker.
jamessan