124 votes

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

J'utilise Twitvim pour la première fois. En voyant toutes les URL, je me suis demandé s'il y avait un moyen d'ouvrir l'URL sous le curseur dans votre navigateur préféré ou dans un navigateur spécifique.

0 votes

Sous le curseur de texte ou le curseur de la souris ?

0 votes

Le curseur de texte ... mais si vous connaissez un moyen de le faire sous le curseur de la souris, ce serait également cool.

1 votes

Le clic du bouton central de la souris sur un lien dans vim a toujours fonctionné pour moi, je ne sais pas comment, cependant

230voto

tungd Points 3587

Mise à jour : d'après le tweet de tpope aujourd'hui

Appuyez sur gx . Vous pouvez personnaliser le navigateur. Sur Gnome et Mac OS X, il est déjà utilisé. gnome-open / open . En général, vous pouvez régler g:netrw_browsex_viewer à tout ce que vous voulez.


Réponse originale :

Je ne me souviens pas où j'ai obtenu cette fonction. Il y a un bug avec le dièse (#) dans l'url, mais la fonction fonctionne suffisamment bien pour que je ne prenne pas la peine de le corriger.

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>

Note : Si vous n'êtes pas sur le Mac, utilisez la fonction gnome-open / xdg-open pour Linux, ou "chemin d'accès à votre navigateur web" pour Windows.

0 votes

Je pense que je vais utiliser votre solution :) merci ... Je voudrais voir s'il y a un moyen d'obtenir seulement l'url sous le curseur, mais je ne connais pas beaucoup vimscript donc je vais devoir travailler là-dessus.

21 votes

gx est si puissant, merci ! Il ouvre également les fichiers avec les applications appropriées™.

0 votes

Je pense que c'est g:netrw_browsex_viewer (sans 'r').

66voto

jsvisa Points 171

Si vous utilisez Vim 7.4 ou une version ultérieure, en mode normal, placez votre curseur sous l'URL, puis cliquez sur gx l'URL s'ouvrira automatiquement dans le navigateur demo operate

0 votes

Comment définissez-vous le navigateur comme étant Chrome dans cet exemple ? (ou tout autre navigateur)

1 votes

@jm3 Try :h netrw_gx : * pour Windows 32 ou 64, les dlls url et FileProtocolHandler sont utilisées. * pour Gnome (avec gnome-open) : gnome-open est utilisé. * pour KDE (avec kfmclient) : kfmclient est utilisé * pour Mac OS X : open est utilisé. * sinon le plugin netrwFileHandler est utilisé.

1 votes

Un peu hors sujet, mais comment enregistrer l'écran dans un gif ? j'adore ça !

15voto

chriz Points 307

Solution pour les personnes qui ont déchargé netrw

C'est une solution pour les personnes qui ont supprimé netrw ( :help netrw-noload ) dans vim/neovim. Par exemple, ils utilisent un gestionnaire de fichiers différent comme vim-dirvish

TLDR :

:!open <c-r><c-a>

ou carte gx :

nmap gx :!open <c-r><c-a>


Donc, juste un peu de contexte :

Je cherchais aussi une solution à ce problème car j'ai supprimé complètement netrw du chargement de vim et je l'ai remplacé par vim-dirvish . Ce plugin a environ 500~ LOC par rapport à netrw 's (11 000+ LOC) .

Je n'utilise pas beaucoup l'édition à distance donc vim-dirvish est assez puissant pour gérer mon flux de travail (il est en fait plus rapide que netrw ~ l'auteur prétend que c'est 2x, je pense que c'est plus rapide que ça - c'est vraiment instantané ) très utile sur les grosses bases de code/référentiels. Je l'ai même essayé dans un repo de 10K fichiers, en listant les fichiers par l'intermédiaire de - toujours instantané ! Quelqu'un a testé vim-dirvish contre Nerdtree vous pouvez voir la différence.

J'ai laissé tomber vim-vinegar aussi parce que vim-dirvish ont le - de toute façon, et la plupart de la configuration de vim-vinegar es netrw spécifiques. C'est juste qu'il n'en a pas besoin. Deux oiseaux dans une seule pierre !

La beauté de ce plugin est qu'il embrasse la philosophie de VIGNE (Vim n'est pas Emacs). Il exploite la puissance d'autres programmes dans le terminal pour effectuer des manipulations de fichiers, au lieu d'essayer de tout faire par lui-même. La partie importante est de savoir comment ces programmes externes interagissent naturellement avec vim. Et cela est obtenu par :Shdo et il a une clé pratique de . (commande par points qui est un moyen mnémotechnique pour la commande de répétition), faites-le sur les deux sélections ou sur la ligne en cours sur une carte de crédit. vim-dirvish tampon. Et le type !rm pour enlever, !mv pour le renommage.

Depuis que j'ai désactivé netrw, ( :help netrw-noload ) Je me suis retrouvé à atteindre gx de temps en temps. Je ne voulais pas charger un plugin pour obtenir la gx retour de fonctionnalité.


Maintenant pour la solution, il y a une liaison en mode commande, ctrl-r puis ctrl-a ( :help c_CTRL-R_CTRL-A ), pour coller ce que vous avez dans votre curseur sur la ligne de commande, donc si vous combinez cela avec :!xdg-open / :!open (pour Mac), vous êtes pratiquement prêt.

Il y a une raison pour laquelle :w n'a pas de fixations normales. Je suis surpris que la plupart des solutions n'exploitent pas le flux de travail des commandes, j'utilise beaucoup ex-command, :s , :g , :v , :argdo , :cdo et ses amis. En combinant cela avec différents modes, vous exploitez toute la puissance de vim. Ne restez donc pas dans un seul mode, essayez d'exploiter toute la puissance de vim.

Donc, le flux de travail complet. Pendant que vous avez votre curseur au dessus de l'url, c'est juste une seule étape :

:!open <c-r><c-a>

Remarquez le ! ce qui indique qu'il faut tirer parti de la puissance des programmes externes à vim. VIGNE !

Si vous voulez le gx fonctionnalité de retour, vous pouvez simplement cartographier en utilisant la même commande :

  • nmap gx :!open <c-r><c-a>

J'aime rendre mes fixations silencieuses, donc ajouter des <silent> y :sil fera l'affaire ( :help :map-silent )

nmap <silent>gx :sil !open <c-r><c-a><cr>

Note sur les programmes spécifiques à la plate-forme pour ouvrir une url :

  1. Mac a :!open
  2. Linux a :!xdg-open
  3. Windows (WSL2) a :!wslview

J'utilise les trois plateformes et elles fonctionnent très bien. Vous pouvez simplement utiliser l'une d'entre elles pour vos liaisons vim, par exemple. :!open et alias dans votre bashrc/zshrc/fish config le site open à n'importe quel programme spécifique à la plateforme que vous avez.

eg. alias open = wslview

De cette façon, mon vimrc reste agnostique par rapport à la plate-forme, et je m'occuperai des incohérences par l'intermédiaire de bashrc/zshrc/fish config .

10voto

kev Points 41855

J'utilise ce script pour rechercher sur Google les éléments suivants 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('.') y matchstr() pour extraire l'url sous le curseur. Le reste est identique.

0 votes

Je pense que cela me mènera à la solution que je recherche... et que cette fonction deviendra très pratique. Merci.

0 votes

Merci pour ce partage génial. Je vais l'utiliser pour faire une traduction dans google translate.

3voto

Valdis Points 11

Ajoutez la ligne suivante au fichier .vimrc :

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

Ainsi, en mode normal, en appuyant sur \, il sélectionne le mot courant et l'ouvre comme adresse dans le navigateur web.

Le leader par défaut est \ (mais je l'ai fait correspondre à , avec let mapleader = "," ). De la même manière, en utilisant imap, vous pouvez mapper une séquence de touches en mode insertion (mais alors, s'il s'agit d'une séquence de 2 touches, cela annulera probablement certains comportements par défaut).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X