J'utilise Twitvim pour la première fois. Voir toutes les URL là-dedans m'a fait me demander, y a-t-il un moyen d'ouvrir l'URL sous le curseur dans votre navigateur préféré ou dans celui spécifié?
J'utilise Twitvim pour la première fois. Voir toutes les URL là-dedans m'a fait me demander, y a-t-il un moyen d'ouvrir l'URL sous le curseur dans votre navigateur préféré ou dans celui spécifié?
Réponses:
Mise à jour: 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
. En règle générale, vous pouvez régler g:netrw_browsex_viewer
ce que vous voulez.
Réponse originale:
Je ne me souviens pas d'où j'obtiens cette fonction. Il y a un bogue avec hash (#) dans l'url, mais la fonction fonctionne assez bien pour que je ne prenne pas la peine de 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 d'accès à votre navigateur Web' pour Windows
gx
est si puissant, merci! Il ouvre également les fichiers avec les applications appropriées ™.
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 automatiquement
:h netrw_gx
: * pour Windows 32 ou 64, les dll 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é.
J'utilise ce script pour rechercher gooogle 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.
Ajoutez la ligne suivante au fichier .vimrc:
nmap <leader><space> yiW:!xdg-open <c-r>" &<cr>
Donc, en mode normal, appuyez sur \ pour sélectionner le mot actuel et l'ouvrir comme adresse dans le navigateur Web.
Le leader par défaut est \ (mais je l'ai mappé à, avec let mapleader = ","
). De même, en utilisant imap, vous pouvez mapper une séquence de touches en mode insertion (mais dans ce cas, s'il s'agit d'une séquence de 2 touches, elle remplacera probablement un comportement par défaut).
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 souhaite. Comme @tungd l'a dit, le # peut poser un problème s'il se trouve dans une URL, mais cela me convient, si quelqu'un a une meilleure expression pour l'URL, alors elle sera la bienvenue.
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>
Je suis assez en retard à cette fête, mais voici une autre façon de faire qui fonctionne particulièrement bien sur Windows 7.
Installez à la fois vim-shell et vim-misc dans vim.Je recommande de le faire via le plugin Pathogen toujours génial , puis simplement à cd ~/vimfiles/bundle & git clone git@github.com:xolox/vim-misc.git & git clone git@github.com:xolox/vim-shell.git
partir de msysgit. ( Ces deux plugins ouvrent les URL dans votre navigateur par défaut sans créer aucune invite de commande supplémentaire ou autre absurdité généralement requise dans Windows. Vous pouvez ouvrir des URL dans Vim comme ceci:. :Open http://duckduckgo.com
Essayez-le. Vous l'aimerez. )
Créez des mappages vim afin que vous puissiez rapidement obtenir la ligne sous le curseur dans le navigateur. Je mapperais cela à vous (pour moi, c'est du ,u
mode normal). Voici comment:
nnoremap u: exec "Ouvrir" .getline (".")
Pour utiliser ce mappage, saisissez votre touche Leader à partir du mode normal + u. Il devrait lire la ligne sous votre curseur et l'ouvrir dans votre navigateur par défaut.
Il s'agit d'une sorte de version améliorée du script initialement proposé par @tungd ici https://stackoverflow.com/a/9459366/7631731 . Conserve le contexte de 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>¬
Vous devriez jeter un coup d'œil à ce plugin vim
C'est essentiellement 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 :)
Comme décrit ci - dessus par @kev , modifié pour les environnements Linux.
A part: lorsque cette fonction a été exécutée (Vim 8.1) dans mon terminal, l'écran de Vim était obscurci (principalement «masqué»; c'est-à-dire que le texte était là mais pas visible). La :redraw!
commande (voir https://stackoverflow.com/a/1117742/1904943 ) 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
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 commevim-dirvish
👉 :!open <c-r><c-a>
ou carte gx
:
👉 nmap gx :!open <c-r><c-a>
Je cherchais également une solution à ce problème car j'ai en fait supprimé netrw du chargement dans vim complètement et le remplacer par vim-dirvish
. Ce plugin a environ 500 ~ LOC , comparé à celui netrw
de (11 000+ LOC) .
Je n'utilise pas beaucoup l'édition à distance, donc vim-dirvish
c'est assez puissant pour gérer mon flux de travail (c'est en fait plus rapide que netrw
~ l'auteur le prétend 2x, je pense que c'est plus rapide que ça - c'est vraiment instantané ⚡) très utile sur de grandes bases de code / référentiels. Je l'ai même essayé dans un repo de fichiers 10K, listant les fichiers via -
toujours instantané! Quelqu'un testé vim-dirvish
contreNerdtree
, vous pouvez voir la différence.
J'ai abandonné vim-vinegar
aussi parce que vim-dirvish a de -
toute façon la liaison, et la plupart de la configuration de vim-vinegar
est netrw
spécifique. Il n'en a tout simplement pas besoin. Deux oiseaux en une pierre!
La beauté de ce plugin est qu'il embrasse la philosophie de VINE (Vim n'est pas Emacs). Où il exploite la puissance d'autres programmes du terminal pour faire des manipulations de fichiers, au lieu d'essayer de tout faire par lui-même. La partie importante est la façon dont ces programmes externes interagissent naturellement avec vim. Et cela est réalisé par :Shdo
, et il a une touche pratique de .
(commande point , qui est mnémonique pour la commande de répétition), faites cela à la fois sur la sélection ou sur la ligne réelle sur un vim-dirvish
tampon. Et tapez !rm
pour supprimer, !mv
pour renommer.
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 récupérer la gx
fonctionnalité.
Maintenant, pour la solution, il y a une liaison en mode commande, ctrl-rpuis 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 définissez à peu près.
Il y a une raison pour laquelle il :w
n'y a pas de liaisons normales. Je suis surpris la solution la plus ne fait pas un effet de levier flux de travail de commande, j'utiliser ex-commande beaucoup, :s
, :g
, :v
, :argdo
, :cdo
, et amis. En combinant cela avec différents modes, exploite toute la puissance de vim. Alors ne restez pas dans un seul mode, essayez d'exploiter toute la puissance de vim.
👉 :!open <c-r><c-a>
Notez le !
qui indique l'exploitation de la puissance des programmes externes en dehors de vim. LA VIGNE !
Si vous souhaitez gx
récupérer la fonctionnalité, vous pouvez simplement mapper en utilisant la même commande:
nmap gx :!open <c-r><c-a>
J'aime faire taire mes liaisons, donc ajouter <silent>
et :sil
fera l'affaire ( :help :map-silent
)
👉 nmap <silent>gx :sil !open <c-r><c-a><cr>
:!open
:!xdg-open
:!wslview
J'utilise les trois plates-formes et elles fonctionnent très bien. Vous pouvez simplement utiliser l'un d'entre eux pour vos liaisons vim, par exemple. :!open
et alias seulement dans votre bashrc/zshrc/fish config
la open
commande à tout programme spécifique à la plate - forme que vous avez.
par exemple. alias open = wslview
De cette façon, je vimrc
reste indépendant de la plate-forme et je traiterai simplement les incohérences via bashrc/zshrc/fish config
.