Tarayıcı ile Vim'de imlecin altındaki URL'yi aç


104

Twitvim'i ilk kez kullanıyorum. Buradaki tüm URL'leri görmek beni meraklandırdı, imlecin altındaki URL'yi favori tarayıcınızda veya belirli bir tarayıcıda açmanın bir yolu var mı?


metin imleci veya fare imleci altında?
Oleg Mikheev

metin imleci ... ancak fare imlecinin altında yapmanın bir yolunu biliyorsanız, bu da harika olurdu
Mauro Morales

1
farenin orta düğmesi vim'deki bir bağlantıya tıklamak benim için her zaman işe yaradı, nasıl olduğunu bilmiyorum
Oleg Mikheev

2
açmak için orta tıklama muhtemelen terminalin bir özelliğidir, vim değil.
Leonid Shevtsov

Yanıtlar:


189

Güncellenmiş: tpope'un tweet'inden bugün

Tuşuna basın gx. Tarayıcıyı özelleştirebilirsiniz. Gnome ve Mac OS X'te zaten gnome-open/ kullanıyor open. Genelde istediğiniz g:netrw_browsex_viewerherhangi bir şeye ayarlayabilirsiniz .


Orijinal cevap:

Bu işlevi nereden aldığımı hatırlamıyorum. URL'de hash (#) ile ilgili bir hata var, ancak işlev yeterince iyi çalışıyor ve ben onu düzeltmekle uğraşmayacağım.

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>

Not: Mac'te değilseniz, Linux için gnome-open/ xdg-openveya Windows için 'web tarayıcınızın yolunu' kullanın


Sanırım çözümünüzü kullanacağım :) teşekkürler ... Sadece imlecin altındaki url'yi almanın bir yolu olup olmadığını görmek istiyorum, ancak çok fazla vimscript bilmiyorum, bu yüzden bunun üzerinde çalışmam gerekecek .
Mauro Morales

14
gxçok güçlü, teşekkürler! Ayrıca dosyaları uygun uygulamalarla açar ™.
blinry

Sanırım g: netrw_browsex_viewer (w / o 'r')
Jack

2
İle bir url açmayı seviyorum? ve içindeki bir #. Netrw'nin şu anda cWORD yerine cfile kullandığını düşünüyorum, bu nedenle '?' artık bu yöntem kullanılarak açılamaz. Çözümünüzü burada denedim ve url'deki '#' alternatif dosya adıyla değiştirilecek. exec "! open" .shellescape (uri, 1) sorunu çözmüş görünüyor.
Chad Skeeters

4
Yukarıda bahsedilen tweet burada: twitter.com/tpope/status/289234166770434048 , sadece tartışmayla ilgilenen biri olması durumunda.
Antoine Cotten

49

Vim 7.4 veya sonraki bir sürümünü kullanıyorsanız, normal modda, imlecinizi URL'nin altına getirin, ardından tıklayın gx, URL tarayıcıda otomatik olarak açılacaktır.demo çalışması


bu örnekte tarayıcıyı Chrome olacak şekilde nasıl ayarlıyorsunuz? (veya tarayıcı her ne ise)
jm3

@ jm3 Deneyin :h netrw_gx: * Windows 32 veya 64 için url ve FileProtocolHandler dll'leri kullanılır. * Gnome için (gnome-open ile): gnome-open kullanılır. * KDE için (kfmclient ile): kfmclient kullanılır * Mac OS X için: open kullanılır. * aksi takdirde netrwFileHandler eklentisi kullanılır.
kba, Monica ile

1
biraz konu dışı, ama ekranı bir gif'e nasıl kaydedersiniz? Sevdim!
Peter Perháč

@ jm3 Sistemin varsayılan web tarayıcısını kullanan
jsvisa

3
PeterPerháč @ kullanıyorum github.com/keycastr/keycastr rekor Klavye girişi için cockos.com/licecap gif olarak kayıt ekranına
jsvisa

9

Bu komut dosyasını, gooogle’da keywordimleç altında aramak için kullanıyorum :

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

İmlecin altındaki url'yi çıkarmak için getline('.')ve kullanmalısınız matchstr(). Gerisi aynı.


Sanırım bu beni sonunda aradığım çözüme işaret edecek ... ayrıca bu fonksiyon çok kullanışlı olacak. Teşekkürler!
Mauro Morales

2

.Vimrc dosyasına aşağıdaki satırı ekleyin:

nmap <leader><space> yiW:!xdg-open <c-r>" &<cr>

Yani normal modda \ tuşuna basmak o anki kelimeyi seçer ve web tarayıcısında adres olarak açar.

Lider varsayılan olarak \ (ancak onu ile eşledim let mapleader = ","). Benzer şekilde, imap kullanarak ekleme kipinde bazı tuş dizilerini eşleyebilirsiniz (ancak daha sonra, eğer bu 2 tuş dizisi ise, muhtemelen bazı varsayılan davranışları geçersiz kılacaktır).


2

Bu, başlangıçta @tungd tarafından https://stackoverflow.com/a/9459366/7631731 tarafından önerilen betiğin geliştirilmiş bir sürümüdür . Vim bağlamını korur ve "#" içeren URL'leri doğru şekilde işler.

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>¬

1

Tamam, @tungd ve @kev'den gelen cevapları ve küçük bir araştırmayı kullanarak bu senaryoyu tamamladım, tam da ihtiyacım olan şekilde çalışıyor. @Tungd'un dediği gibi # bir url'nin içindeyken sorun yaratabilir ama bunda sorun yok, eğer herhangi biri url için daha iyi bir ifadeye sahipse o zaman memnuniyetle karşılanacaktır.

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>

1

Bu partiye oldukça geç kaldım, ama işte bunu yapmanın özellikle Windows 7'de işe yarayan başka bir yolu.

  1. Her iki yükleme vim-kabuk ve vim-misc vim şimdiye-korku yoluyla bunu tavsiye Patojen sadece o eklenti ve cd ~/vimfiles/bundle & git clone git@github.com:xolox/vim-misc.git & git clone git@github.com:xolox/vim-shell.gitmsysgit dan. ( Bu iki eklenti, ekstra komut istemleri veya genellikle pencerelerde gerekli olan diğer saçma saçmalıklar oluşturmadan varsayılan tarayıcınızda url'leri açar. URL'leri Vim'de şu şekilde açabilirsiniz:. :Open http://duckduckgo.comDeneyin. Beğeneceksiniz . )

  2. İmlecin altındaki satırı hızlı bir şekilde tarayıcıya alabilmeniz için bazı vim eşlemeleri oluşturun . Bunu u'ya eşlerim (benim için bu ,unormal moddan). Bunu nasıl yapacağınız aşağıda açıklanmıştır:

    nnoremap u: exec "Aç" .getline (".")

Bu eşlemeyi kullanmak için, Lider anahtarınızı normal moddan + u yazın. İmlecinizin altındaki satırı okumalı ve varsayılan tarayıcınızda açmalıdır.


0

Bu vim eklentisine hızlıca bakmalısınız

henrik / vim-open-url

Temelde diğer bazı yanıtlarda açıklanan şeydir, ancak bir eklenti yöneticisi kullanıyorsanız özel yapılandırma gerekir :)


0

Yukarıda @kev tarafından açıklandığı gibi , Linux ortamları için değiştirilmiştir.

Bir kenara: bu işlev terminalimde çalıştırıldığında (Vim 8.1), Vim ekranı karartılmıştı (çoğunlukla "karartılmış;" yani metin oradaydı ancak görünmüyordu). :redraw!Komutu (bkz https://stackoverflow.com/a/1117742/1904943 ) ekranını yeniden çizer.

Ekle ~/.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


0

Bu basit, sadece "start" kısmını işletim sisteminizin kullandığı şeyle değiştirin

Url için GU !

" Open url
if (has('win32') || has('win64'))
   nmap gu :exec "!start <cWORD>"<cr> 
else
   nmap gu :exec "!open <cWORD>"<cr> 
endif

0

Yükünü boşaltan insanlar için çözüm netrw

Bu, vim / neovim'de netrw( :help netrw-noload) öğesini kaldıran kişiler için bir çözümdür . Örneğin, farklı bir dosya yöneticisi kullanıyorlar.vim-dirvish

TLDR:

👉 :!open <c-r><c-a>

veya harita gx:

👉 nmap gx :!open <c-r><c-a>


Yani biraz arka plan:

Bu soruna da bir çözüm arıyordum çünkü netrw'yi vim'e tamamen yüklenmekten çıkardım ve yerine koydum vim-dirvish. Bu eklenti çevresinde yer alır , 500 ~ LOC göre, netrwbireyin (11,000+ KO) .

Uzaktan düzenlemeyi çok fazla kullanmıyorum vim-dirvish, bu yüzden iş akışımı yönetmek için yeterince güçlü (Aslında netrw~ yazar 2 kattan daha hızlı, bundan daha hızlı olduğunu hissediyorum - gerçekten anlık ⚡) büyük kod tabanları / havuzlar için çok yararlı. Hatta onu bir 10K dosya deposunda denedim, dosyaları -hala anında listeliyorum ! Birisine vim-dirvishkarşı testNerdtree edildiğinde farkı görebilirsiniz.

Ben düştü vim-vinegarvim-dirvish çünkü çok -zaten bağlayıcı ve yapılandırması çoğu vim-vinegarise netrwayrıntıları. Sadece buna ihtiyacı yok. Bir taşta iki kuş!

Bu eklentinin güzelliği, VINE felsefesini benimsemesidir (Vim, Emacs değildir). Her şeyi kendi başına yapmaya çalışmak yerine dosya manipülasyonları yapmak için terminaldeki diğer programların gücünden yararlandığı yerde. Önemli olan, bu harici programların vim ile ne kadar doğal etkileşimde olduğudur. Ve bu, ( tekrarlama komutu için anımsatıcı olan nokta komutu):Shdo uygun bir anahtarına sahiptir , bunu hem seçimde hem de arabellekteki gerçek satırda yapın . Yeniden adlandırmak için kaldırmak için yazın ..vim-dirvish!rm!mv

Netrw'yi devre dışı bıraktığım için, ( :help netrw-noload) kendimi gxzaman zaman ulaşırken buldum . gxİşlevselliği geri almak için bir eklenti yüklemek istemedim .


Şimdi çözüm için, komut modunda bir bağlama var, ctrl-rsonra imlecinizdeki her şeyi komut satırına yapıştırmak için ctrl-a( :help c_CTRL-R_CTRL-A), yani bunu :!xdg-open/ :!open(mac için) ile birleştirirseniz , hemen hemen ayarlamış olursunuz.

:wNormal bağlamaların olmamasının bir nedeni var. Ben şaşırdım çoğu değil kaldıraç komut iş akışı, Ben eski komutunu kullanın does çözüm bir çok :s, :g, :v, :argdo, :cdo, ve arkadaşları. Bunu farklı modlarla birleştirmek, vim'in tüm gücüne dokunur. Öyleyse sadece tek bir modda kalmayın, vim'in tüm gücünden yararlanmaya çalışın.

Yani tam iş akışı. İmleciniz url'nin üstünde varken, sadece tek bir adım: 😊

👉 :!open <c-r><c-a>

Uyarı !dışında vim dış programların gücünden yararlanarak gösterir ki. VINE !

İsterseniz gxişlevselliği geri, sadece aynı komutunu kullanarak bağlanabilirler:

  • nmap gx :!open <c-r><c-a>

Bağlamalarımı susturmayı seviyorum, bu yüzden eklemek <silent>ve :silhile yapacak ( :help :map-silent)

👉 nmap <silent>gx :sil !open <c-r><c-a><cr>

Bir url açmak için platforma özel programlarla ilgili not:

  1. Mac'te :!open
  2. Linux vardır :!xdg-open
  3. Windows (WSL2), :!wslview

Üç platformu da kullanıyorum ve harika çalışıyorlar. Vim bağlamalarınız için bunlardan birini kullanabilirsiniz, örn. :!openve sadece takma komuta ne olursa olsun platforma özel programı var.bashrc/zshrc/fish configopen

Örneğin. alias open = wslview

Bu şekilde, vimrcplatformdan bağımsız kalıyor ve tutarsızlıklarla başa çıkacağım bashrc/zshrc/fish config.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.