Estoy usando Twitvim por primera vez. Ver todas las URL allí me hizo preguntarme, ¿hay alguna forma de abrir la URL debajo del cursor en su navegador favorito o en uno específico?
Estoy usando Twitvim por primera vez. Ver todas las URL allí me hizo preguntarme, ¿hay alguna forma de abrir la URL debajo del cursor en su navegador favorito o en uno específico?
Respuestas:
Actualizado: del tweet de tpope de hoy
Presione gx. Puede personalizar el navegador. En Gnome y Mac OS X ya se usa gnome-open/ open. Por lo general, puede configurar g:netrw_browsex_viewerlo que desee.
Respuesta original:
No recuerdo de dónde obtengo esta función. Hay un error con el hash (#) en la URL, pero la función funciona lo suficientemente bien como para que no me moleste en arreglarlo.
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>
Nota: Si no está en Mac, use gnome-open/ xdg-openpara Linux, o 'ruta a su navegador web' para Windows
gxes tan poderoso, gracias! También abre archivos con las aplicaciones apropiadas ™.
Si está utilizando Vim 7.4 o posterior, en modo normal, coloque el cursor debajo de la URL, luego haga clic gx, la URL se abrirá en el navegador automáticamente
:h netrw_gx: * para Windows 32 o 64, se utilizan las DLL de URL y FileProtocolHandler. * para Gnome (con gnome-open): se usa gnome-open. * para KDE (con kfmclient): se usa kfmclient * para Mac OS X: se usa open. * de lo contrario, se utiliza el complemento netrwFileHandler.
Utilizo este script para buscar en gooogle keyworddebajo del cursor:
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
Debe usar getline('.')y matchstr()para extraer la URL debajo del cursor. El resto es igual.
Agregue la siguiente línea al archivo .vimrc:
nmap <leader><space> yiW:!xdg-open <c-r>" &<cr>
Entonces, en modo normal, presionando \ selecciona la palabra actual y la abre como dirección en el navegador web.
El líder predeterminado es \ (pero lo he asignado a, con let mapleader = ","). De manera similar, usando imap puede mapear alguna secuencia de teclas en el modo de inserción (pero luego, si es una secuencia de 2 teclas, probablemente anulará algún comportamiento predeterminado).
Ok, usando las respuestas de @tungd y @kev y un poco de investigación, terminé con este script, que funciona de la manera que necesito. Como dijo @tungd, el # puede dar un problema si está dentro de una URL, pero estoy de acuerdo con eso, si alguien tiene una mejor expresión para la URL, será bienvenido.
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>
Llego bastante tarde a esta fiesta, pero aquí hay otra forma de hacerlo que funciona especialmente bien en Windows 7.
Instale vim-shell y vim-misc en vim . Recomiendo hacerlo a través del siempre asombroso plugin Pathogen y luego simplemente cd ~/vimfiles/bundle & git clone git@github.com:xolox/vim-misc.git & git clone git@github.com:xolox/vim-shell.gitdesde msysgit. ( Estos dos complementos abren direcciones URL en su navegador predeterminado sin crear ninguna solicitud de comando adicional u otras tonterías tontas que normalmente se requieren en Windows. Puede abrir direcciones URL en Vim de esta manera:. :Open http://duckduckgo.comPruébelo. Le gustará ) .
Cree algunas asignaciones de vim para que pueda obtener rápidamente la línea debajo del cursor en el navegador. Te asignaría esto a ti (para mí, eso es ,udesde el modo normal). Así es cómo:
nnoremap u: exec "Abrir" .getline (".")
Para usar este mapeo, escriba su clave de líder desde el modo normal + u. Debería leer la línea debajo del cursor y abrirla en su navegador predeterminado.
Esta es una especie de versión mejorada del script propuesto originalmente por @tungd aquí https://stackoverflow.com/a/9459366/7631731 . Mantiene el contexto de vim y maneja correctamente las URL que contienen "#".
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>¬
Deberías echar un vistazo rápido a este complemento de vim
Es básicamente lo que se ha explicado en algunas otras respuestas, pero se necesita una configuración específica si usa un administrador de complementos :)
Como se describe anteriormente por @kev , modificado para entornos Linux.
Aparte: cuando se ejecutó esta función (Vim 8.1) en mi terminal, la pantalla de Vim estaba ofuscada (en su mayoría "en blanco", es decir, el texto estaba allí pero no visible). El :redraw!comando (consulte https://stackoverflow.com/a/1117742/1904943 ) vuelve a dibujar la pantalla.
Agregar a ~/.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
netrwEsta es una solución para las personas que eliminaron netrw( :help netrw-noload) en vim / neovim. Por ejemplo, usan un administrador de archivos diferente comovim-dirvish
👉 :!open <c-r><c-a>
o mapa gx:
👉 nmap gx :!open <c-r><c-a>
También estaba buscando una solución a este problema, ya que en realidad eliminé netrw de cargarse en vim por completo y lo reemplacé con vim-dirvish. Este complemento tiene alrededor de 500 ~ LOC , en comparación con netrw's (11.000+ LOC) .
No uso mucho la edición remota, por lo que vim-dirvishes lo suficientemente potente como para administrar mi flujo de trabajo (en realidad es más rápido que netrw~ el autor afirma 2 veces, siento que es más rápido que eso, es realmente instantáneo ⚡) muy útil en grandes bases de código / repositorios. Incluso lo probé en un repositorio de archivos de 10K, ¡enumerando archivos de forma -instantánea! Alguien probado vim-dirvishcontraNerdtree , puede ver la diferencia.
También lo dejé vim-vinegarporque vim-dirvish tiene el -enlace de todos modos, y la mayor parte de la configuración de vim-vinegares netrwespecífica. Simplemente no lo necesita. ¡Dos pájaros de un tiro!
La belleza de este complemento es que adopta la filosofía de VINE (Vim no es Emacs). Donde aprovecha el poder de otros programas en la terminal para realizar manipulaciones de archivos, en lugar de intentar hacerlo todo por sí mismo. La parte importante es qué tan natural estos programas externos interactúan con vim. Y eso se logra mediante :Shdo, y tiene una tecla conveniente de .(comando de punto , que es mnemónico para el comando de repetición), haz eso tanto en la selección como en la línea real en un vim-dirvishbúfer. Y escriba !rmpara eliminar, !mvpara cambiar el nombre.
Desde que desactivo netrw, ( :help netrw-noload) me encontré gxbuscando de vez en cuando. No quería cargar un complemento para recuperar la gxfuncionalidad.
Ahora, para la solución, hay un enlace en el modo de comando, ctrl-rluego ctrl-a( :help c_CTRL-R_CTRL-A), para pegar lo que tenga en el cursor en la línea de comando, así que si lo combina con :!xdg-open/ :!open(para mac), prácticamente lo establece.
Hay una razón por la :wque no tiene enlaces normales. Me sorprende más la solución no aprovecha el flujo de trabajo del sistema, lo uso ex comandos mucho, :s, :g, :v, :argdo, :cdo, y amigos. Combinando esto con diferentes modos, aprovecha todo el poder de vim. Así que no se quede en un solo modo, intente aprovechar todo el poder de vim.
👉 :!open <c-r><c-a>
Observe el !que indica aprovechar el poder de los programas externos fuera de vim. VINE !
Si desea gxrecuperar la funcionalidad, puede mapear usando el mismo comando:
nmap gx :!open <c-r><c-a>Me gusta silenciar mis ataduras, así que agregar <silent>y :silhará el truco ( :help :map-silent)
👉 nmap <silent>gx :sil !open <c-r><c-a><cr>
:!open:!xdg-open:!wslviewUtilizo las tres plataformas y funcionan muy bien. Puede usar uno de ellos para sus enlaces vim, por ejemplo. :!openy sólo en su alias bashrc/zshrc/fish configdel opencomando para cualquier programa específico de la plataforma que tienen.
p.ej. alias open = wslview
De esa manera, mi vimrcplataforma permanece independiente de la plataforma, y solo lidiaré con las inconsistencias a través de bashrc/zshrc/fish config.