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?
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?
Respostas:
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
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ático
: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 keywordsob o cursor no Gooogle :
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
Você deve usar getline('.')e matchstr()para extrair url sob o cursor. O resto é o mesmo.
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 git@github.com:xolox/vim-misc.git & git clone git@github.com: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>¬
Você deve dar uma olhada rápida neste plugin vim
É 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 :)
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:
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 é 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
👉 :!open <c-r><c-a>
ou mapa gx:
👉 nmap gx :!open <c-r><c-a>
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.
👉 :!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>
:!open:!xdg-open:!wslviewEu 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.