Abrir URL debajo del cursor en Vim con el navegador
104
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?
cursor de texto ... pero si conoce una forma de hacerlo con el cursor del mouse, también sería genial
Mauro Morales
1
Hacer clic con el botón central del mouse en un enlace en vim siempre me ha funcionado, aunque no sé cómo
Oleg Mikheev
2
es probable que el clic central para abrir sea una característica del terminal, no vim.
Leonid Shevtsov
Respuestas:
189
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
Creo que usaré su solución :) gracias ... Me gustaría ver si hay una manera de obtener solo la URL debajo del cursor, pero no sé mucho de vimscript, así que tendré que trabajar en eso .
Mauro Morales
14
gxes tan poderoso, gracias! También abre archivos con las aplicaciones apropiadas ™.
blinry
Creo que es g: netrw_browsex_viewer (w / o 'r')
Jack
2
Me gusta abrir una URL con un? y un # en él. Creo que netrw está usando cfile en lugar de cWORD ahora, entonces urls con '?' ya no se pueden abrir con ese método. Probé su solución aquí y '#' en la URL sería reemplazado por el nombre de archivo alternativo. exec "! open" .shellescape (uri, 1) parece haber solucionado el problema.
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
¿Cómo configura el navegador para que sea Chrome en este ejemplo? (o cualquier navegador que sea)
jm3
@ jm3 Intente :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.
kba está con Monica
1
fuera de tema un poco, pero ¿cómo se graba la pantalla en un gif? ¡quiéralo!
Peter Perháč
@ jm3 que usa el navegador web predeterminado del sistema
Creo que esto me indicará la solución que estoy buscando eventualmente ... además, esta función será muy útil. ¡Gracias!
Mauro Morales
2
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 [email protected]:xolox/vim-misc.git & git clone [email protected]: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>¬
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 :)
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.
Esta 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
TLDR:
👉 :!open <c-r><c-a>
o mapa gx:
👉 nmap gx :!open <c-r><c-a>
Así que solo un poco de trasfondo:
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.
Entonces, el flujo de trabajo completo. Mientras tiene el cursor en la parte superior de la URL, es solo un paso: 😊
👉 :!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>
Nota sobre los programas específicos de la plataforma para abrir una URL:
Mac tiene :!open
Linux tiene :!xdg-open
Windows (WSL2) tiene :!wslview
Utilizo 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.
Respuestas:
Actualizado: del tweet de tpope de hoy
Presione
gx
. Puede personalizar el navegador. En Gnome y Mac OS X ya se usagnome-open
/open
. Por lo general, puede configurarg:netrw_browsex_viewer
lo 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.
Nota: Si no está en Mac, use
gnome-open
/xdg-open
para Linux, o 'ruta a su navegador web' para Windowsfuente
gx
es 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áticamentefuente
: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
keyword
debajo del cursor:Debe usar
getline('.')
ymatchstr()
para extraer la URL debajo del cursor. El resto es igual.fuente
Agregue la siguiente línea al archivo .vimrc:
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).fuente
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.
fuente
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 [email protected]:xolox/vim-misc.git & git clone [email protected]:xolox/vim-shell.git
desde 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.com
Prué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
,u
desde 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.
fuente
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 "#".
fuente
Deberías echar un vistazo rápido a este complemento de vim
henrik / vim-open-url
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 :)
fuente
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
:fuente
Esto es simple, simplemente reemplace "start" con cualquier sistema operativo que use
GU para ir url!
fuente
Solución para personas que descargaron
netrw
Esta 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
TLDR:
👉
:!open <c-r><c-a>
o mapa
gx
:👉
nmap gx :!open <c-r><c-a>
Así que solo un poco de trasfondo:
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 connetrw
's (11.000+ LOC) .No uso mucho la edición remota, por lo que
vim-dirvish
es lo suficientemente potente como para administrar mi flujo de trabajo (en realidad es más rápido quenetrw
~ 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 probadovim-dirvish
contraNerdtree
, puede ver la diferencia.También lo dejé
vim-vinegar
porque vim-dirvish tiene el-
enlace de todos modos, y la mayor parte de la configuración devim-vinegar
esnetrw
especí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 unvim-dirvish
búfer. Y escriba!rm
para eliminar,!mv
para cambiar el nombre.Desde que desactivo netrw, (
:help netrw-noload
) me encontrégx
buscando de vez en cuando. No quería cargar un complemento para recuperar lagx
funcionalidad.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
:w
que 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.Entonces, el flujo de trabajo completo. Mientras tiene el cursor en la parte superior de la URL, es solo un paso: 😊
👉
:!open <c-r><c-a>
Observe el
!
que indica aprovechar el poder de los programas externos fuera de vim. VINE !Si desea
gx
recuperar 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:sil
hará el truco (:help :map-silent
)👉
nmap <silent>gx :sil !open <c-r><c-a><cr>
Nota sobre los programas específicos de la plataforma para abrir una URL:
:!open
:!xdg-open
:!wslview
Utilizo las tres plataformas y funcionan muy bien. Puede usar uno de ellos para sus enlaces vim, por ejemplo.
:!open
y sólo en su aliasbashrc/zshrc/fish config
delopen
comando para cualquier programa específico de la plataforma que tienen.p.ej.
alias open = wslview
De esa manera, mi
vimrc
plataforma permanece independiente de la plataforma, y solo lidiaré con las inconsistencias a través debashrc/zshrc/fish config
.fuente