ब्राउज़र के साथ विम में कर्सर के नीचे खुला यूआरएल


104

मैं पहली बार ट्विटविम का उपयोग कर रहा हूं। वहाँ के सभी URL को देखकर मुझे आश्चर्य हुआ कि क्या आपके पसंदीदा ब्राउज़र में कर्सर के नीचे URL खोलने का कोई तरीका है या कोई निर्दिष्ट है?


पाठ कर्सर या माउस कर्सर के तहत?
ओलेग मिखेव

टेक्स्ट कर्सर ... लेकिन अगर आप माउस कर्सर के तहत करने का एक तरीका जानते हैं जो बहुत अच्छा होगा
मूरो मोरालेस

1
मध्य माउस बटन पर एक लिंक पर क्लिक करें हमेशा मेरे लिए काम किया है, मुझे नहीं पता कि कैसे, हालांकि
ओलेग मिखेव

2
खोलने के लिए मध्य क्लिक टर्मिनल की एक विशेषता है, न कि विम।
लियोनिद शेवत्सोव

जवाबों:


189

अपडेट किया गया: tpope के ट्वीट से आज

प्रेस करें gx। आप ब्राउज़र को कस्टमाइज़ कर सकते हैं। सूक्ति और मैक ओएस एक्स पर यह पहले से ही उपयोग gnome-open/ है open। आम तौर पर आप अपनी g:netrw_browsex_viewerइच्छानुसार कुछ भी सेट कर सकते हैं।


मूल उत्तर:

याद नहीं कि मुझे यह फंक्शन कहाँ से मिला। Url में हैश (#) के साथ एक बग है, लेकिन फ़ंक्शन पर्याप्त रूप से काम करता है कि मैं इसे ठीक करने में परेशान नहीं करूंगा।

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>

ध्यान दें: यदि आप मैक पर नहीं हैं, तो लिनक्स के लिए gnome-open/ xdg-openया विंडोज के लिए 'अपने वेब ब्राउजर के लिए पथ' का उपयोग करें


मुझे लगता है कि मैं आपके समाधान का उपयोग करूंगा :) धन्यवाद ... मैं यह देखना चाहता हूं कि क्या कर्सर के नीचे केवल url प्राप्त करने का कोई तरीका है, लेकिन बहुत अधिक जानकारी नहीं है इसलिए मुझे उस पर काम करना होगा ।
मूरो मोरालेस

14
gxबहुत शक्तिशाली है, धन्यवाद! यह उपयुक्त एप्लिकेशन ™ के साथ फाइलें भी खोलता है।
ब्लिनरी

मुझे लगता है कि यह g: netrw_browsex_viewer (w / o 'r') है
जैक

2
मुझे एक के साथ एक यूआरएल खोलना पसंद है? और इसमें एक #। मुझे लगता है कि netrw अब cWORD के बजाय cfile का उपयोग कर रहा है, इसलिए '?' अब उस विधि का उपयोग करने के लिए खुले नहीं हैं। मैंने यहां आपके समाधान की कोशिश की और url में '#' को वैकल्पिक फ़ाइल नाम से बदल दिया जाएगा। निष्पादित "! खुला" .shellescape (uri, 1) ने समस्या को ठीक कर दिया है।
चाड स्कीटर

4
उपरोक्त ट्वीट यहाँ है: twitter.com/tpope/status/289234166770434048 , अगर किसी को चर्चा में दिलचस्पी है तो बस।
एंटोनी कॉटन

49

यदि आप विम 7.4 या उसके बाद का उपयोग कर रहे हैं, तो सामान्य मोड में, URL के नीचे अपना कर्सर रखें, फिर क्लिक करें gx, URL ब्राउज़र में स्वचालित रूप से खुल जाएगाडेमो संचालित


आप इस उदाहरण में क्रोम होने के लिए ब्राउज़र कैसे सेट कर रहे हैं? (या जो भी ब्राउज़र है)
jm3

@ jm3 कोशिश :h netrw_gx: * विंडोज 32 या 64 के लिए, url और FileProtocolHandler dll का उपयोग किया जाता है। * ग्नोम के लिए (सूक्ति-खुले के साथ): सूक्ति-खुले का उपयोग किया जाता है। * KDE के लिए (kfmclient के साथ): kfmclient का उपयोग Mac OS X के लिए किया जाता है: खुले का उपयोग किया जाता है। * अन्यथा netrwFileHandler प्लगइन का उपयोग किया जाता है।
केबीए

1
थोड़ा विषय बंद करें, लेकिन आप स्क्रीन को जिफ़ में कैसे रिकॉर्ड करते हैं? इसे प्यार करना!
बजे पीटर पेर्क

@ jm3 जो सिस्टम के डिफॉल्ट वेब ब्राउजर का उपयोग करता है
jsvisa

3
@ PeterPerháč मैं github.com/keycastr/keycastr को कीबोर्ड इनपुट, कॉकोस.com / licecap रिकॉर्ड करने के लिए gif के रूप में रिकॉर्ड करने के लिए उपयोग कर रहा हूं
jsvisa

9

मैं इस स्क्रिप्ट का उपयोग keywordकर्सर के लिए 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

आपको कर्सर के नीचे url निकालने getline('.')और उपयोग करना चाहिए matchstr()। बाकी वही है।


मुझे लगता है कि यह मुझे उस समाधान की ओर इशारा करेगा जो मैं अंततः ढूंढ रहा हूं ... साथ ही यह फ़ंक्शन बहुत उपयोगी हो जाएगा। धन्यवाद!
मूरो मोरालेस

2

निम्न लाइन को .vimrc फ़ाइल में जोड़ें:

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

तो सामान्य मोड में इसे दबाने पर यह चालू शब्द का चयन करता है और इसे वेब ब्राउज़र में पते के रूप में खोलता है।

डिफ़ॉल्ट रूप से लीडर \ _ है (लेकिन मैंने इसे मैप किया है, इसके साथ let mapleader = ",")। इसी तरह, इमैप का उपयोग करके आप कुछ महत्वपूर्ण अनुक्रम को इन्सर्ट मोड में मैप कर सकते हैं (लेकिन फिर, यदि यह 2 मुख्य अनुक्रम हैं, तो यह संभवतः कुछ डिफ़ॉल्ट व्यवहार को ओवरराइड कर देगा)।


1

ठीक है, इसलिए @tungd और @kev के उत्तर का उपयोग करते हुए और एक छोटे से शोध को मैंने इस स्क्रिप्ट के साथ समाप्त किया, जो कि जिस तरह से आपकी जरूरत है उसी तरह काम करता है। जैसे @tungd ने कहा कि # एक समस्या दे सकता है अगर एक url के अंदर लेकिन मैं इसके साथ अच्छा हूं, अगर किसी के पास url के लिए बेहतर अभिव्यक्ति है तो उसका स्वागत किया जाएगा।

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

मुझे इस पार्टी के लिए बहुत देर हो चुकी है, लेकिन यहां ऐसा करने का एक और तरीका है जो विशेष रूप से विंडोज 7 पर काम करता है।

  1. दोनों को स्थापित करें vim-खोल और vim-विविध vim में मैं कभी भयानक के माध्यम से ऐसा करने की सलाह देते हैं पैथोजन बस प्लगइन और फिर cd ~/vimfiles/bundle & git clone git@github.com:xolox/vim-misc.git & git clone git@github.com:xolox/vim-shell.gitmsysgit से। ( ये दोनों प्लगइन्स आमतौर पर विंडोज़ में किसी भी अतिरिक्त कमांड प्रॉम्प्ट या अन्य मूर्खतापूर्ण बकवास बनाने के बिना आपके डिफ़ॉल्ट ब्राउज़र में यूआरएल खोलते हैं। आप इस तरह से विम में यूआरएल खोल सकते हैं: :Open http://duckduckgo.comइसे आज़माएं। आप इसे पसंद करेंगे। )

  2. कुछ विम मैपिंग बनाएं ताकि आप ब्राउज़र में कर्सर के नीचे की रेखा को जल्दी से प्राप्त कर सकें। मैं इसे आपके लिए मैप करूंगा (मेरे लिए, यह ,uसामान्य मोड से है)। ऐसे:

    nnoremap u: "ओपन" .getline ("" पर अमल करें)

इस मैपिंग का उपयोग करने के लिए, सामान्य मोड + u से अपनी लीडर कुंजी टाइप करें। इसे आपके कर्सर के नीचे की रेखा को पढ़ना चाहिए और इसे अपने डिफ़ॉल्ट ब्राउज़र में खोलना चाहिए।


1

यह स्क्रिप्ट का बेहतर संस्करण है जो मूल रूप से @tungd द्वारा यहां https://stackoverflow.com/a/9459366/7631731 द्वारा प्रस्तावित किया गया है । Vim संदर्भ रखता है और "#" युक्त URLS को सही ढंग से संभालता है।

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

0

आपको इस विम प्लगइन पर एक त्वरित नज़र डालनी चाहिए

हेनरिक / vim-खुले यूआरएल

यह मूल रूप से कुछ अन्य प्रतिक्रियाओं में समझाया गया है, लेकिन यदि आप एक प्लगइन प्रबंधक का उपयोग करते हैं तो विशिष्ट कॉन्फ़िगरेशन की आवश्यकता है :)


0

जैसा कि @kev द्वारा ऊपर वर्णित है , लिनक्स वातावरण के लिए संशोधित।

एक तरफ: जब मेरे टर्मिनल में इस फ़ंक्शन (Vim 8.1) को निष्पादित किया गया था, तो Vim स्क्रीन को बाधित किया गया था (ज्यादातर "खाली"; यानी, पाठ वहां था लेकिन दिखाई नहीं दिया)। :redraw!आदेश (देखें https://stackoverflow.com/a/1117742/1904943 ) स्क्रीन redraws।

इसमें जोड़ें ~/.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

यह सरल है, बस जो कुछ भी आपके ओएस का उपयोग करता है उसके साथ "प्रारंभ" को बदलें

गुजरात के लिए उर जाओ!

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

0

अनलोड किए गए लोगों के लिए समाधान netrw

यह उन लोगों के लिए एक समाधान है जो हटाए गए netrw( :help netrw-noload) vim / neovim में हैं। उदाहरण के लिए, वे एक अलग फ़ाइल प्रबंधक का उपयोग करते हैंvim-dirvish

TLDR:

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

या नक्शा gx:

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


तो बस थोड़ा सा पृष्ठभूमि:

मैं इस समस्या के समाधान के लिए भी खोज कर रहा था क्योंकि मैंने वास्तव में netrw को पूरी तरह से विम में लोड होने से हटा दिया और इसे बदल दिया vim-dirvish। इस प्लग के आसपास है 500 ~ एलओसी की तुलना में, netrwके (11,000+ एलओसी)

मैं रिमोट एडिटिंग का उपयोग नहीं करता हूं इसलिए vim-dirvishयह मेरे वर्कफ़्लो को प्रबंधित करने के लिए पर्याप्त शक्तिशाली है (यह वास्तव में netrw~ से अधिक का दावा है लेखक 2x, मुझे लगता है कि यह उससे तेज है - यह वास्तव में तात्कालिक ⚡ है) बड़े कोडबेस / रिपॉजिटरी पर बहुत उपयोगी है। मैं भी एक 10k फ़ाइल रेपो में यह कोशिश की, -अभी भी त्वरित के माध्यम से फ़ाइलों की सूची ! किसी के vim-dirvishखिलाफ परीक्षण किया गयाNerdtree , आप अंतर देख सकते हैं।

मैं गिरा vim-vinegarभी vim-dirvish है क्योंकि -बाध्यकारी वैसे भी, और के विन्यास के सबसे vim-vinegarहै netrwबारीकियों। यह सिर्फ इसकी जरूरत नहीं है एक पत्थर में दो पक्षी!

इस प्लगइन की सुंदरता यह VINE (विम नहीं Emacs है) के दर्शन को गले लगाती है। जहां यह फ़ाइल में हेरफेर करने के लिए टर्मिनल में अन्य कार्यक्रमों की शक्ति का लाभ उठाता है, बजाय इसके कि सब कुछ स्वयं करने की कोशिश कर रहा है। महत्वपूर्ण हिस्सा यह है कि ये बाहरी कार्यक्रम विम के साथ कैसे बातचीत करते हैं। और इससे हासिल होता है :Shdo, और इसमें एक सुविधाजनक कुंजी है .(डॉट कमांड , जो रिपीट कमांड के लिए महामारी है), यह चयन या vim-dirvishबफर पर वास्तविक लाइन दोनों पर करें । और !rmहटाने के लिए टाइप करें , !mvनाम बदलने के लिए।

चूंकि मैंने netrw को अक्षम कर दिया है, ( :help netrw-noload) मैंने खुद gxको समय-समय पर पहुंचने के लिए पाया । मैं gxकार्यक्षमता वापस पाने के लिए एक प्लगइन लोड नहीं करना चाहता था ।


अब समाधान के लिए, वहाँ एक आदेश मोड में बाध्यकारी है, ctrl-rतो ctrl-a( :help c_CTRL-R_CTRL-A,) चिपकाने के लिए जो कुछ भी आप कमांड लाइन के लिए अपने कर्सर में है, इसलिए यदि आपको लगता है कि के साथ गठबंधन :!xdg-open/ :!open(मैक के लिए), तो आपको काफी सेट।

वहाँ एक कारण क्यों :wसामान्य बाइंडिंग नहीं है। मैं हैरान हूँ सबसे समाधान नहीं लाभ उठाने आदेश कार्यप्रवाह, मैं पूर्व आदेश का उपयोग करता है एक बहुत, :s, :g, :v, :argdo, :cdo, और दोस्तों। इसे अलग-अलग मोड्स के साथ जोड़कर, विम की पूरी शक्ति को टैप करता है। तो बस एक मोड में न रहें, विम की पूरी शक्ति का लाभ उठाने की कोशिश करें।

तो पूर्ण कार्यप्रवाह। जबकि आपके पास url के ऊपर अपना कर्सर है, बस एक ही कदम है: on

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

ध्यान दें, !जो विम के बाहर बाहरी कार्यक्रमों की शक्ति का संकेत देता है। VINE !

यदि आप gxकार्यक्षमता वापस चाहते हैं , तो आप उसी कमांड का उपयोग करके मैप कर सकते हैं:

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

मुझे अपने बाइंडिंग को चुप करना पसंद है, इसलिए जोड़ना <silent>और :silचाल करना होगा ( :help :map-silent)

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

Url खोलने के लिए प्लेटफ़ॉर्म-विशिष्ट कार्यक्रमों पर ध्यान दें:

  1. मैक है :!open
  2. लिनक्स के पास है :!xdg-open
  3. विंडोज (WSL2) में है :!wslview

मैं सभी तीन प्लेटफार्मों का उपयोग करता हूं और वे शानदार काम करते हैं। आप बस अपने विम बाइंडिंग के लिए उनमें से एक का उपयोग कर सकते हैं, जैसे। :!openऔर अपने में सिर्फ उर्फ करने के लिए आदेश है जो कुछ भी प्लेटफ़ॉर्म-विशिष्ट कार्यक्रम आप की है।bashrc/zshrc/fish configopen

जैसे। alias open = wslview

इस तरह, मेरा vimrcमंच-अज्ञेयवादी बना हुआ है, और मैं सिर्फ विसंगतियों से निपटूंगा bashrc/zshrc/fish config

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.