Estou usando o Twitvim pela primeira vez. Ver todos os URLs lá me fez pensar, há alguma maneira de abrir o URL sob o cursor em seu navegador favorito ou em um especificado?
cursor de texto ... mas se você souber uma maneira de fazer sob o cursor do mouse, isso seria legal também
Mauro Morales
1
clicar com o botão do meio do mouse em um link no vim sempre funcionou para mim, mas não sei como
Oleg Mikheev
2
clique com o botão do meio para abrir é provavelmente um recurso do terminal, não do vim.
Leonid Shevtsov
Respostas:
189
Atualizado: do tweet de tpope hoje
Pressione gx. Você pode personalizar o navegador. No Gnome e no Mac OS X ele já usa gnome-open/ open. Geralmente você pode definirg:netrw_browsex_viewer que quiser.
Resposta original:
Não me lembro de onde obtive essa função. Há um bug com hash (#) na url, mas a função funciona bem o suficiente para que não me preocupe em corrigi-la.
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: Se você não estiver no Mac, use gnome-open/ xdg-openpara Linux ou 'caminho para seu navegador da web' para Windows
Acho que vou usar sua solução :) obrigado ... Gostaria de ver se há uma maneira de colocar apenas o url sob o cursor, mas não conheço muito vimscript, então terei que trabalhar nisso .
Mauro Morales
14
gxé tão poderoso, obrigado! Ele também abre arquivos com os aplicativos apropriados ™.
blinry
Eu acho que é g: netrw_browsex_viewer (sem 'r')
Jack
2
Gosto de abrir um url com um? e um # nele. Eu acho que netrw está usando cfile em vez de cWORD agora, então urls com '?' não podem mais ser abertos usando esse método. Tentei sua solução aqui e '#' no url seria substituído pelo nome de arquivo alternativo. exec "! open" .shellescape (uri, 1) parece ter corrigido o problema.
Se você estiver usando o Vim 7.4 ou posterior, no modo normal, coloque o cursor abaixo da URL e clique em gx, a URL será aberta no navegador automático
como você está configurando o navegador para ser Chrome neste exemplo? (ou qualquer navegador que seja)
jm3
@ jm3 Experimente :h netrw_gx: * para Windows 32 ou 64, o url e as DLLs de FileProtocolHandler são usados. * para Gnome (com gnome-open): gnome-open é usado. * para KDE (com kfmclient): kfmclient é usado * para Mac OS X: aberto é usado. * caso contrário, o plug-in netrwFileHandler é usado.
kba está com Monica
1
um pouco fora do assunto, mas como gravar a tela em um GIF? adoro!
Peter Perháč de
@ jm3 Que usando o navegador da web padrão do sistema
Acho que isso vai me apontar para a solução que estou procurando ... além disso, essa função se tornará muito útil. Obrigado!
Mauro Morales
2
Adicione a seguinte linha ao arquivo .vimrc:
nmap <leader><space> yiW:!xdg-open <c-r>" &<cr>
Então, no modo normal, pressione \ para selecionar a palavra atual e abri-la como endereço no navegador da web.
O líder por padrão é \ (mas eu mapeei para, com let mapleader = ","). Da mesma forma, usando o imap, você pode mapear algumas sequências de teclas no modo de inserção (mas, se for uma sequência de 2 teclas, provavelmente substituirá algum comportamento padrão).
Ok, então, usando as respostas de @tungd e @kev e um pouco de pesquisa, acabei com este script, que funciona do jeito que eu preciso. Como @tungd disse o # pode dar um problema se estiver dentro de uma url mas estou bem com isso, se alguém tiver uma expressão melhor para a url será bem-vindo.
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>
Estou muito atrasado para esta festa, mas aqui está outra maneira de fazer isso que funciona especialmente bem no Windows 7.
Instale o vim-shell e o vim-misc no vim . Recomendo fazer isso por meio do incrível plugin Pathogen e simplesmente a cd ~/vimfiles/bundle & git clone [email protected]:xolox/vim-misc.git & git clone [email protected]:xolox/vim-shell.gitpartir do msysgit. ( Esses dois plug-ins abrem urls em seu navegador padrão sem criar qualquer prompt de comando extra ou outras bobagens absurdas geralmente exigidas no Windows. Você pode abrir urls no Vim assim:. :Open http://duckduckgo.comExperimente. Você vai gostar. )
Crie alguns mapeamentos de vim para que você possa colocar rapidamente a linha sob o cursor no navegador. Eu mapearia isso para u (para mim, isso é ,udo modo normal). Veja como:
nnoremap u: exec "Abrir" .getline (".")
Para usar este mapeamento, digite sua chave Leader no modo normal + u. Ele deve ler a linha sob o cursor e abri-lo no navegador padrão.
Esta é uma espécie de versão aprimorada do script originalmente proposto por @tungd aqui https://stackoverflow.com/a/9459366/7631731 . Mantém o contexto do vim e lida corretamente com URLs contendo "#".
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>¬
À parte: quando esta função foi executada (Vim 8.1) no meu terminal, a tela do Vim foi ofuscada (principalmente "em branco;" ou seja, o texto estava lá, mas não visível). O :redraw!comando (consulte https://stackoverflow.com/a/1117742/1904943 ) redesenha a tela.
Esta é uma solução para pessoas que removeram netrw( :help netrw-noload) no vim / neovim. Por exemplo, eles usam um gerenciador de arquivos diferente, comovim-dirvish
TLDR:
👉 :!open <c-r><c-a>
ou mapa gx:
👉 nmap gx :!open <c-r><c-a>
Então, apenas um pouco de contexto:
Eu também estava procurando por uma solução para este problema, já que removi completamente o netrw de ser carregado no vim e o substituí por vim-dirvish. Este plugin tem cerca de 500 ~ LOC , em comparação com netrwo de (11.000+ LOC) .
Eu não uso muito a edição remota, então vim-dirvishé poderosa o suficiente para gerenciar meu fluxo de trabalho (é realmente mais rápido do que netrw~ o autor afirma 2x, eu sinto que é mais rápido do que isso - é realmente instantâneo ⚡) muito útil em grandes bases de código / repositórios. Eu até tentei em um repositório de arquivos de 10K, listando arquivos via -still instantâneo! Alguém testado vim-dirvishcontraNerdtree , você pode ver a diferença.
Eu abandonei vim-vinegartambém porque vim-dirvish tem a -ligação de qualquer maneira, e a maior parte da configuração de vim-vinegarénetrw específica. Simplesmente não precisa disso. Dois pássaros na mesma pedra!
A beleza deste plugin é que ele abraça a filosofia do VINE (Vim não é Emacs). Onde ele aproveita o poder de outros programas no terminal para fazer manipulações de arquivos, em vez de tentar fazer tudo sozinho. A parte importante é quão natural esses programas externos interagem com o vim. E isso é conseguido por :Shdo, e tem uma tecla conveniente de .(comando ponto , que é mnemônico para o comando de repetição), faça isso na seleção ou na linha real em um vim-dirvishbuffer. E digite !rmpara remover, !mvpara renomear.
Já que desabilitei o netrw, ( :help netrw-noload) me peguei tentando acessar gxde vez em quando. Eu não queria carregar um plugin para obter a gxfuncionalidade de volta.
Agora, para a solução, há um vínculo no modo de comando, ctrl-rentão ctrl-a( :help c_CTRL-R_CTRL-A), para colar o que quer que você tenha em seu cursor na linha de comando, então se você combinar isso com :!xdg-open/:!open (para mac), você praticamente define.
Há uma razão pela qual :wnão tem ligações normais. Eu estou surpreendido mais solução não fluxo de trabalho de comando alavancagem, eu uso o ex-comando muito, :s, :g, :v, :argdo,:cdo , e amigos. Combinando isso com diferentes modos, aproveita todo o poder do vim. Portanto, não fique apenas em um modo, tente aproveitar todo o poder do vim.
Portanto, todo o fluxo de trabalho. Enquanto você posiciona o cursor no topo da url, é apenas uma etapa:
👉 :!open <c-r><c-a>
Observe o !que indica o aproveitamento do poder de programas externos fora do vim. VIDEIRA !
Se você quiser a gxfuncionalidade de volta, basta mapear usando o mesmo comando:
nmap gx :!open <c-r><c-a>
Gosto de silenciar minhas ligações, então adicionar <silent>e :silresolverá ( :help :map-silent)
👉 nmap <silent>gx :sil !open <c-r><c-a><cr>
Observação sobre programas específicos de plataforma para abrir um url:
Mac tem :!open
Linux tem :!xdg-open
Windows (WSL2) tem :!wslview
Eu uso as três plataformas e elas funcionam muito bem. Você pode apenas usar um deles para suas ligações vim, por exemplo. :!opene apenas alias no seu bashrc/zshrc/fish configo opencomando para qualquer programa específico da plataforma que você tem.
por exemplo. alias open = wslview
Dessa forma, meu vimrcpermanece agnóstico em relação à plataforma, e irei apenas lidar com as inconsistências via bashrc/zshrc/fish config.
Respostas:
Atualizado: do tweet de tpope hoje
Pressione
gx
. Você pode personalizar o navegador. No Gnome e no Mac OS X ele já usagnome-open
/open
. Geralmente você pode definirg:netrw_browsex_viewer
que quiser.Resposta original:
Não me lembro de onde obtive essa função. Há um bug com hash (#) na url, mas a função funciona bem o suficiente para que não me preocupe em corrigi-la.
Nota: Se você não estiver no Mac, use
gnome-open
/xdg-open
para Linux ou 'caminho para seu navegador da web' para Windowsfonte
gx
é tão poderoso, obrigado! Ele também abre arquivos com os aplicativos apropriados ™.Se você estiver usando o Vim 7.4 ou posterior, no modo normal, coloque o cursor abaixo da URL e clique em
gx
, a URL será aberta no navegador automáticofonte
:h netrw_gx
: * para Windows 32 ou 64, o url e as DLLs de FileProtocolHandler são usados. * para Gnome (com gnome-open): gnome-open é usado. * para KDE (com kfmclient): kfmclient é usado * para Mac OS X: aberto é usado. * caso contrário, o plug-in netrwFileHandler é usado.Eu uso este script para pesquisar
keyword
sob o cursor no Gooogle :Você deve usar
getline('.')
ematchstr()
para extrair url sob o cursor. O resto é o mesmo.fonte
Adicione a seguinte linha ao arquivo .vimrc:
Então, no modo normal, pressione \ para selecionar a palavra atual e abri-la como endereço no navegador da web.
O líder por padrão é \ (mas eu mapeei para, com
let mapleader = ","
). Da mesma forma, usando o imap, você pode mapear algumas sequências de teclas no modo de inserção (mas, se for uma sequência de 2 teclas, provavelmente substituirá algum comportamento padrão).fonte
Ok, então, usando as respostas de @tungd e @kev e um pouco de pesquisa, acabei com este script, que funciona do jeito que eu preciso. Como @tungd disse o # pode dar um problema se estiver dentro de uma url mas estou bem com isso, se alguém tiver uma expressão melhor para a url será bem-vindo.
fonte
Estou muito atrasado para esta festa, mas aqui está outra maneira de fazer isso que funciona especialmente bem no Windows 7.
Instale o vim-shell e o vim-misc no vim . Recomendo fazer isso por meio do incrível plugin Pathogen e simplesmente a
cd ~/vimfiles/bundle & git clone [email protected]:xolox/vim-misc.git & git clone [email protected]:xolox/vim-shell.git
partir do msysgit. ( Esses dois plug-ins abrem urls em seu navegador padrão sem criar qualquer prompt de comando extra ou outras bobagens absurdas geralmente exigidas no Windows. Você pode abrir urls no Vim assim:.:Open http://duckduckgo.com
Experimente. Você vai gostar. )Crie alguns mapeamentos de vim para que você possa colocar rapidamente a linha sob o cursor no navegador. Eu mapearia isso para u (para mim, isso é
,u
do modo normal). Veja como:nnoremap u: exec "Abrir" .getline (".")
Para usar este mapeamento, digite sua chave Leader no modo normal + u. Ele deve ler a linha sob o cursor e abri-lo no navegador padrão.
fonte
Esta é uma espécie de versão aprimorada do script originalmente proposto por @tungd aqui https://stackoverflow.com/a/9459366/7631731 . Mantém o contexto do vim e lida corretamente com URLs contendo "#".
fonte
Você deve dar uma olhada rápida neste plugin vim
henrik / vim-open-url
É basicamente o que foi explicado em algumas outras respostas, mas é necessária uma configuração específica se você usar um gerenciador de plug-ins :)
fonte
Conforme descrito acima por @kev , modificado para ambientes Linux.
À parte: quando esta função foi executada (Vim 8.1) no meu terminal, a tela do Vim foi ofuscada (principalmente "em branco;" ou seja, o texto estava lá, mas não visível). O
:redraw!
comando (consulte https://stackoverflow.com/a/1117742/1904943 ) redesenha a tela.Adicionar a
~/.vimrc
:fonte
Isso é simples, basta substituir "start" por qualquer que seja o seu sistema operacional
GU para ir url!
fonte
Solução para pessoas que descarregaram
netrw
Esta é uma solução para pessoas que removeram
netrw
(:help netrw-noload
) no vim / neovim. Por exemplo, eles usam um gerenciador de arquivos diferente, comovim-dirvish
TLDR:
👉
:!open <c-r><c-a>
ou mapa
gx
:👉
nmap gx :!open <c-r><c-a>
Então, apenas um pouco de contexto:
Eu também estava procurando por uma solução para este problema, já que removi completamente o netrw de ser carregado no vim e o substituí por
vim-dirvish
. Este plugin tem cerca de 500 ~ LOC , em comparação comnetrw
o de (11.000+ LOC) .Eu não uso muito a edição remota, então
vim-dirvish
é poderosa o suficiente para gerenciar meu fluxo de trabalho (é realmente mais rápido do quenetrw
~ o autor afirma 2x, eu sinto que é mais rápido do que isso - é realmente instantâneo ⚡) muito útil em grandes bases de código / repositórios. Eu até tentei em um repositório de arquivos de 10K, listando arquivos via-
still instantâneo! Alguém testadovim-dirvish
contraNerdtree
, você pode ver a diferença.Eu abandonei
vim-vinegar
também porque vim-dirvish tem a-
ligação de qualquer maneira, e a maior parte da configuração devim-vinegar
énetrw
específica. Simplesmente não precisa disso. Dois pássaros na mesma pedra!A beleza deste plugin é que ele abraça a filosofia do VINE (Vim não é Emacs). Onde ele aproveita o poder de outros programas no terminal para fazer manipulações de arquivos, em vez de tentar fazer tudo sozinho. A parte importante é quão natural esses programas externos interagem com o vim. E isso é conseguido por
:Shdo
, e tem uma tecla conveniente de.
(comando ponto , que é mnemônico para o comando de repetição), faça isso na seleção ou na linha real em umvim-dirvish
buffer. E digite!rm
para remover,!mv
para renomear.Já que desabilitei o netrw, (
:help netrw-noload
) me peguei tentando acessargx
de vez em quando. Eu não queria carregar um plugin para obter agx
funcionalidade de volta.Agora, para a solução, há um vínculo no modo de comando, ctrl-rentão ctrl-a(
:help c_CTRL-R_CTRL-A
), para colar o que quer que você tenha em seu cursor na linha de comando, então se você combinar isso com:!xdg-open
/:!open
(para mac), você praticamente define.Há uma razão pela qual
:w
não tem ligações normais. Eu estou surpreendido mais solução não fluxo de trabalho de comando alavancagem, eu uso o ex-comando muito,:s
,:g
,:v
,:argdo
,:cdo
, e amigos. Combinando isso com diferentes modos, aproveita todo o poder do vim. Portanto, não fique apenas em um modo, tente aproveitar todo o poder do vim.Portanto, todo o fluxo de trabalho. Enquanto você posiciona o cursor no topo da url, é apenas uma etapa:
👉
:!open <c-r><c-a>
Observe o
!
que indica o aproveitamento do poder de programas externos fora do vim. VIDEIRA !Se você quiser a
gx
funcionalidade de volta, basta mapear usando o mesmo comando:nmap gx :!open <c-r><c-a>
Gosto de silenciar minhas ligações, então adicionar
<silent>
e:sil
resolverá (:help :map-silent
)👉
nmap <silent>gx :sil !open <c-r><c-a><cr>
Observação sobre programas específicos de plataforma para abrir um url:
:!open
:!xdg-open
:!wslview
Eu uso as três plataformas e elas funcionam muito bem. Você pode apenas usar um deles para suas ligações vim, por exemplo.
:!open
e apenas alias no seubashrc/zshrc/fish config
oopen
comando para qualquer programa específico da plataforma que você tem.por exemplo.
alias open = wslview
Dessa forma, meu
vimrc
permanece agnóstico em relação à plataforma, e irei apenas lidar com as inconsistências viabashrc/zshrc/fish config
.fonte