web-dev-qa-db-fra.com

Ouvrir l'URL sous le curseur dans Vim avec le navigateur

J'utilise Twitvim pour la première fois. Voir toutes les URL qui y figurent m'a fait me demander s'il existe un moyen d'ouvrir l'URL sous le curseur dans votre navigateur préféré ou dans un navigateur spécifié

79
Mauro Morales

Mise à jour: à partir du tweet de tpope aujourd'hui

Appuyez sur gx. Vous pouvez personnaliser le navigateur. Sur Gnome et Mac OS X, il utilise déjà gnome-open/open. Généralement, vous pouvez définir g:netrw_browsex_viewer comme bon vous semble.


Réponse originale:

Ne me souviens pas où j'ai cette fonction. Il y a un bug avec hash (#) dans l'URL, mais la fonction fonctionne assez bien pour que je ne me dérange pas pour le réparer.

function! HandleURL()
  let s:uri = matchstr(getline("."), '[a-z]*:\/\/[^ >,;]*')
  echo s:uri
  if s:uri != ""
    silent exec "!open '".s:uri."'"
  else
    echo "No URI found in line."
  endif
endfunction
map <leader>u :call HandleURL()<cr>

Remarque: Si vous n’êtes pas sur Mac, utilisez gnome-open/xdg-open pour Linux ou "chemin de votre navigateur Web" pour Windows.

139
tungd

Si vous utilisez Vim 7.4 ou version ultérieure, en mode normal, placez votre curseur sous l'URL, puis cliquez sur gx. L'URL sera ouverte dans le navigateur automatique. demo operate

40
jsvisa

J'utilise ce script pour rechercher sur Google keyword sous le curseur:

nmap <leader>g :call Google()<CR>
fun! Google()
    let keyword = expand("<cword>")
    let url = "http://www.google.com/search?q=" . keyword
    let path = "C:/Program Files/Mozilla Firefox/"
    exec 'silent !"' . path . 'firefox.exe" ' . url
endfun

Vous devez utiliser getline('.') et matchstr() pour extraire l’URL sous le curseur. Le reste est le même.

7
kev

Je suis assez en retard pour cette soirée, mais voici une autre façon de faire qui fonctionne particulièrement bien sous Windows 7.

  1. Installez les deux vim-Shell et vim-misc dans vim Je vous recommande de le faire via ever-awesome Pathogen plugin, puis simplement cd ~/vimfiles/bundle & git clone [email protected]:xolox/vim-misc.git & git clone [email protected]:xolox/vim-Shell.git à partir de msysgit. (Ces deux plugins ouvrent des urls dans votre navigateur par défaut sans créer d'invites de commande supplémentaires ni d'autres absurdités idiotes habituellement nécessaires dans Windows. Vous pouvez ouvrir les urls dans Vim comme ceci: :Open http://duckduckgo.com. Essayez-le. Vous allez l'aimer.)

  2. Créez des mappages vim afin que vous puissiez rapidement obtenir la ligne sous le curseur dans le navigateur. Je mapperais ceci sur u (pour moi, c'est ,u du mode normal). Voici comment:

    nnoremap u: exec "Open" .getline (".")

Pour utiliser ce mappage, tapez votre clé Leader en mode normal + u. Il devrait lire la ligne sous votre curseur et l'ouvrir dans votre navigateur par défaut.

1
Rustavore

Ajoutez la ligne suivante au fichier .vimrc:

nmap <leader><space> yiW:!xdg-open <c-r>" &<cr>

Donc, en mode normal, appuyer sur\sélectionne Word actuel et l’ouvre comme adresse dans le navigateur Web.

Leader par défaut est\(mais je l'ai mappé sur, avec let mapleader = ","). De même, en utilisant imap, vous pouvez mapper une séquence de touches en mode insertion (mais s'il s'agit d'une séquence de 2 touches, elle remplacera probablement un comportement par défaut).

1
Valdis

Ok, donc en utilisant les réponses de @tungd et @kev et un peu de recherche, je me suis retrouvé avec ce script, qui fonctionne exactement comme je le devais. Comme @tungd a dit le # peut donner un problème si à l'intérieur d'une URL, mais je suis cool avec ça, si quelqu'un a une meilleure expression pour l'URL alors il sera bien accueilli. 

function! OpenUrlUnderCursor()
    let path="/Applications/Safari.app"
    execute "normal BvEy"
    let url=matchstr(@0, '[a-z]*:\/\/[^ >,;]*')
    if url != ""
        silent exec "!open -a ".path." '".url."'" | redraw! 
        echo "opened ".url
    else
        echo "No URL under cursor."
    endif
endfunction
nmap <leader>o :call OpenUrlUnderCursor()<CR>
1
Mauro Morales

Comme décrit ci-dessus par @ kev , modifié pour les environnements Linux.

De plus: lorsque cette fonction a été exécutée (Vim 8.1) dans mon terminal, l'écran Vim était obscurci (la plupart du temps "masqué;" c'est-à-dire que le texte était là mais pas visible). La commande :redraw! (voir https://stackoverflow.com/a/1117742/190494 ) redessine l'écran.

Ajouter à ~/.vimrc:

nmap <leader>g :call Google()<CR>:redraw!<CR>
fun! Google()
  let keyword = expand("<cword>")
  let url = "http://www.google.com/search?q=" . keyword
  let path = "/usr/bin/"
  exec 'silent !"' . path . 'firefox" ' . url
endfun

0
Victoria Stuart

Vous devriez jeter un coup d'œil à ce plugin vim

henrik/vim-open-url

C'est en gros ce qui a été expliqué dans d'autres réponses, mais une configuration spécifique est nécessaire si vous utilisez un gestionnaire de plugins :)

0
MoOx

Ceci est une sorte de version améliorée du script initialement proposé par @tungd ici https://stackoverflow.com/a/9459366/7631731 . Conserve le contexte vim et gère correctement les URL contenant "#".

function! HandleURL()
  let s:uri = matchstr(getline("."), '[a-z]*:\/\/[^ >,;()]*')
  let s:uri = shellescape(s:uri, 1)
  echom s:uri
  if s:uri != ""
    silent exec "!open '".s:uri."'"
    :redraw!
  else
    echo "No URI found in line."
  endif
endfunction

nnoremap <leader>w :call HandleURL()<CR>¬
0
pappix