ব্রাউজারের সাথে ভিমে কার্সারের অধীনে URL খুলুন


107

আমি প্রথমবার টুইটভিম ব্যবহার করছি। সেখানকার সমস্ত ইউআরএল দেখে আমার অবাক করে দিয়েছিল, আপনার পছন্দসই ব্রাউজারে বা নির্দিষ্ট একটির মধ্যে কার্সারের নিচে URL খোলার কোনও উপায় আছে কি?


পাঠ্য কার্সার বা মাউস কার্সারের অধীনে?
ওলেগ মিখিভ

পাঠ্য কার্সার ... তবে আপনি যদি মাউস কার্সারের নীচে এমন কোনও উপায় জানেন যা খুব শীতল হবে
মুরো মোরালেস

4
মাঝের মাউস বোতামটি ভিএম-এর একটি লিঙ্কে ক্লিক করে সর্বদা আমার জন্য কাজ করে, আমি জানি না কীভাবে
ওলেগ মিখিভ

4
মাঝখানে ক্লিক করতে খোলার সম্ভাবনা সম্ভবত টার্মিনালের একটি বৈশিষ্ট্য, ভিম নয়।
লিওনিড শেভতসভ

উত্তর:


192

আপডেট হয়েছে: আজ টপপের টুইট থেকে

টিপুন gx। আপনি ব্রাউজারটি কাস্টমাইজ করতে পারেন। জিনোম এবং ম্যাক ওএস এক্সে এটি ইতিমধ্যে gnome-open/ ব্যবহার করে open। সাধারণত আপনি g:netrw_browsex_viewerযা চান সেট করতে পারেন।


আসল উত্তর:

আমি এই ফাংশনটি কোথায় পেয়েছি তা মনে রাখবেন না। ইউআরএলটিতে হ্যাশ (#) সহ একটি বাগ রয়েছে, তবে ফাংশনটি যথেষ্ট ভালভাবে কাজ করে যা আমি এটি ঠিক করতে বিরক্ত করব না।

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এত শক্তিশালী, ধন্যবাদ! এটি উপযুক্ত অ্যাপ্লিকেশন সহ ফাইলগুলিও খোলায় ™
blinry

আমি মনে করি এটি জি: নেটর_ব্রোসেক্স_উইউভার (ডাব্লু / ও 'আর')
জ্যাক

4
আমি একটি দিয়ে একটি url খুলতে চান? এবং এটিতে একটি # আমার মনে হয় নেটার এখন সিডব্লর্ডের পরিবর্তে সিফিল ব্যবহার করছে, তাই ইউআরএল দিয়ে? ' এই পদ্ধতিটি ব্যবহার করে আর খোলা যায় না। আমি এখানে আপনার সমাধানটি চেষ্টা করেছি এবং url এ '#' বিকল্প ফাইলের নাম দ্বারা প্রতিস্থাপন করা হবে। এক্সেক "! ওপেন"। শেলসকেপ (ইউরি, 1) সমস্যাটি স্থির করেছে বলে মনে হচ্ছে।
চাদ সিকিটার

4
পূর্বোক্ত টুইটগুলি এখানে: twitter.com/tpope/status/289234166770434048 , যদি কেউ আলোচনায় আগ্রহী হন তবেই।
এন্টোইন কোটেন

51

আপনি যদি ভিম 7.৪ বা তার পরে ব্যবহার করছেন তবে সাধারণ মোডে আপনার কার্সরটি ইউআরএল এর নীচে রাখুন, তারপরে ক্লিক করুন gx, ইউআরএল স্বয়ংক্রিয়ভাবে ব্রাউজারে খোলা হবেডেমো অপারেটিং


এই উদাহরণটিতে আপনি কীভাবে ব্রাউজারটিকে Chrome হতে সেট করছেন? (বা যাই হোক না কেন ব্রাউজার)
jm3

@ jm3 চেষ্টা করুন :h netrw_gx: * উইন্ডোজ 32 বা 64 এর জন্য, ইউআরএল এবং ফাইলপ্রোটোকলহ্যান্ডলার dlls ব্যবহার করা হয়। জিনোমের জন্য (জিনোম-ওপেন সহ): জিনোম-ওপেন ব্যবহৃত হয়। * কেডিএর জন্য (কেএফএমসিলেট সহ): কেএফএমসিলেট ব্যবহার করা হয় * ম্যাক ওএস এক্স এর জন্য: ওপেন ব্যবহৃত হয়। * অন্যথায় নেটরফিলহ্যান্ডলার প্লাগইন ব্যবহৃত হয়।
কেবি

4
সামান্য বিষয় বন্ধ করুন, তবে আপনি কীভাবে স্ক্রিনটি জিআইএফ রেকর্ড করবেন? এটা ভালবাসা!
পিটার পেরে

@ jm3 যা সিস্টেমের ডিফল্ট ওয়েব ব্রাউজার ব্যবহার করছে
jsvisa

4
@ পিটারপ্যাহে আমি কীবোর্ড ইনপুট রেকর্ড করতে github.com/keycastr/keycastr ব্যবহার করছি , জিক হিসাবে স্ক্রিনটি রেকর্ড করতে
ককোস

10

আমি এই স্ক্রিপ্টটি keywordকার্সারের অধীনে গুগল অনুসন্ধান করতে ব্যবহার করি :

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

আপনার ব্যবহার করা উচিত getline('.')এবং matchstr()কার্সারের অধীনে url নিষ্কাশন করা উচিত । বাকিগুলিও একই রকম।


আমি মনে করি এটি আমাকে সমাধানের দিকে নির্দেশ করবে যা আমি শেষ পর্যন্ত খুঁজছি ... প্লাস এই ফাংশনটি খুব সহজ হয়ে যাবে। ধন্যবাদ!
ম্যুরো মোরালেস

দুর্দান্ত ভাগ করে নেওয়ার জন্য ধন্যবাদ। আমি গুগল অনুবাদে অনুবাদ করতে এটি ব্যবহার করব।
জাভাআরনার

2

ঠিক আছে সুতরাং @ টুংড এবং @ কেভের উত্তরগুলি ব্যবহার করে এবং আমি এই স্ক্রিপ্টটি দিয়ে একটি সামান্য গবেষণা শেষ করেছিলাম, যা আমার প্রয়োজন মতো কাজ করে। @ টুংডের মতোই বলেছিলেন যে কোনও ইউআরএল থাকাতে # সমস্যা দিতে পারে তবে আমি এটির সাথে শান্ত, যদি কারও কাছে ইউআরএলটির জন্য আরও ভাল প্রকাশ থাকে তবে এটি স্বাগত হবে will

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>

2

.Vimrc ফাইলটিতে নিম্নলিখিত লাইনটি যুক্ত করুন:

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

সুতরাং সাধারণ মোডে এটি টিপছে \ এটি বর্তমান শব্দটি নির্বাচন করে এবং এটি ওয়েব ব্রাউজারে ঠিকানা হিসাবে খুলুন।

ডিফল্টরূপে নেতা হলেন \ (তবে আমি এটির সাথে ম্যাপ করেছি let mapleader = ",")। একইভাবে, ইম্যাপ ব্যবহার করে আপনি সন্নিবেশ মোডে কিছু কী ক্রম ম্যাপ করতে পারেন (তবে তারপরে এটি যদি 2 কী অনুক্রম হয় তবে এটি সম্ভবত কিছু ডিফল্ট আচরণকে ওভাররাইড করবে)।


2

এটি মূলত @tungd এখানে প্রস্তাবিত স্ক্রিপ্টের এক ধরণের উন্নত সংস্করণ htt https://stackoverflow.com/a/9459366/7631731 । ভিম প্রসঙ্গ রাখে এবং "#" ধারণকারী URL গুলি সঠিকভাবে পরিচালনা করে।

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

আমি এই পার্টিতে বেশ দেরি করে ফেলেছি তবে উইন্ডোজ on-তে খুব ভালভাবে কাজ করার এটি করার আরেকটি উপায় এখানে।

  1. উভয় ইনস্টল করুন তেজ-শেল এবং তেজ-বিবিধ তেজ মধ্যে আমি সদা সন্ত্রস্ত মাধ্যমে এই কাজ করার প্রস্তাব দিই প্যাথোজেন কেবল প্লাগইন এবং তারপর cd ~/vimfiles/bundle & git clone git@github.com:xolox/vim-misc.git & git clone git@github.com:xolox/vim-shell.gitmsysgit থেকে। ( এই দুটি প্লাগিন কোনো অতিরিক্ত কমান্ড অনুরোধ জানানো বা অন্যান্য নিরীহ আজেবাজে কথা সাধারণত উইন্ডোজ প্রয়োজন তৈরি ছাড়া আপনার ডিফল্ট ব্রাউজারে URL গুলি খুলতে আপনি ভালো তেজ URL গুলি খুলতে পারে। ।:Open http://duckduckgo.com এটি ব্যবহার করে দেখুন আপনি এটা পছন্দ করবেন।। )

  2. কিছু ভিম ম্যাপিং তৈরি করুন যাতে আপনি ব্রাউজারে দ্রুত কার্সারের নীচে লাইনটি পেতে পারেন। আমি এটি আপনার কাছে মানচিত্র করব (আমার জন্য, এটি ,uস্বাভাবিক মোড থেকে)। এখানে কীভাবে:

    nnoremap u: exec "ওপেন" .getget ("।")

এই ম্যাপিংটি ব্যবহার করতে, সাধারণ মোড + ইউ থেকে আপনার লিডার কী টাইপ করুন। এটি আপনার কার্সারের নীচে লাইনটি পড়া উচিত এবং এটি আপনার ডিফল্ট ব্রাউজারে খোলা উচিত।


0

আপনার এই ভিআইএম প্লাগইনটিতে একবার নজর দেওয়া উচিত

henrik / vim-open-url

এটি অন্যান্য কিছু প্রতিক্রিয়াগুলিতে মূলত যা ব্যাখ্যা করা হয়েছে, তবে আপনি যদি প্লাগইন পরিচালক ব্যবহার করেন তবে নির্দিষ্ট কনফিগারেশন প্রয়োজন :)


0

@ কেভ দ্বারা উপরে বর্ণিত হিসাবে , লিনাক্স পরিবেশের জন্য পরিবর্তিত।

একদিকে: যখন আমার টার্মিনালে এই ফাংশনটি কার্যকর করা হয়েছিল (Vim 8.1) তখন ভিম স্ক্রিনটি অস্পষ্ট হয়ে পড়েছিল (বেশিরভাগ ক্ষেত্রে "ফাঁকা;" অর্থাত্ পাঠ্যটি উপস্থিত ছিল তবে দৃশ্যমান ছিল না)। :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

এটি সহজ, আপনার ওএস যা ব্যবহার করে কেবল তার সাথে "শুরু" প্রতিস্থাপন করুন

জন্য Gu যান URL!

" 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-dirvish

টিএলডিআর:

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

বা মানচিত্র gx:

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


সুতরাং ব্যাকগ্রাউন্ডের একটি বিট:

আমি আসলেই এই সমস্যার সমাধানের সন্ধান করছিলাম যেহেতু আমি প্রকৃতপক্ষে ভিআইএম-এ সম্পূর্ণরূপে লোড হওয়া থেকে নেটআরউ সরিয়েছি এবং এর সাথে প্রতিস্থাপন করেছি vim-dirvish। এই প্লাগ প্রায় হয়েছে 500 ~ এলওসি তুলনায় netrwএর (11,000+ এলওসি)

আমি ব্যবহার করি না দূরবর্তী সম্পাদনা অনেক তাই vim-dirvish(এটা আসলে যতো তাড়াতাড়ি আমার কর্মপ্রবাহ পরিচালনা করতে শক্তিশালী যথেষ্ট netrw~ লেখক দাবী 2x আমি মনে করি এটি দ্রুত যে এর চেয়ে নেই - এটি সত্যিই ক্ষণিক এর ⚡) বৃহৎ কোডবেস / ভান্ডার খুব দরকারী। এমনকি আমি এটি 10K ফাইলের রেপোতে চেষ্টা করেছিলাম, -তাত্ক্ষণিকভাবে ফাইলগুলির তালিকা তৈরি করছি ! কারও vim-dirvishবিরুদ্ধে পরীক্ষা করা হয়েছেNerdtree , আপনি পার্থক্যটি দেখতে পাবেন।

আমি নেমে vim-vinegarখুব তেজ-dirvish কারণ -বাঁধাই যাহাই হউক না কেন, এবং কনফিগারেশন অধিকাংশ vim-vinegarহল netrwসুনির্দিষ্ট। এটি কেবল এটির দরকার নেই। এক পাথরে দুটি পাখি!

এই প্লাগইনটির সৌন্দর্যটি হ'ল এটি ভিআইএন (Vim Emacs নয়) এর দর্শনকে জড়িয়ে ধরে । যেখানে এটি নিজেরাই সবকিছু করার পরিবর্তে টার্মিনালে ফাইল ম্যানিপুলেশনগুলি করার জন্য অন্যান্য প্রোগ্রামগুলির শক্তি ব্যবহার করে। গুরুত্বপূর্ণ অংশটি হ'ল এই বাহ্যিক প্রোগ্রামগুলি কীভাবে ভিএম এর সাথে যোগাযোগ করে। এবং এটি দ্বারা অর্জন করা হয় :Shdo, এবং এটির একটি সুবিধাজনক কী রয়েছে .(ডট কমান্ড , যা পুনরাবৃত্ত আদেশের জন্য স্মৃতিযুক্ত) এটি বাছাইয়ের ক্ষেত্রে বা আসল লাইন উভয়ই করুন vim-dirvish। এবং পুনর্নামকরণের !rmজন্য অপসারণের জন্য টাইপ করুন !mv

যেহেতু আমি নেট্রব অক্ষম করেছি, ( :help netrw-noload) আমি নিজেকে gxসময়-সময় পৌঁছে যেতে দেখলাম । gxকার্যকারিতা ফিরে পেতে আমি কোনও প্লাগইন লোড করতে চাইনি ।


সমাধানের জন্য এখন কমান্ড মোডে একটি বাধ্যবাধকতা রয়েছে, ctrl-rতারপরে ctrl-a( :help c_CTRL-R_CTRL-A), আপনার কার্সারে থাকা যা কিছু আছে তা কমান্ড লাইনে আটকানো, সুতরাং আপনি যদি এটির সাথে :!xdg-open/ :!open(ম্যাকের জন্য) একত্রিত করেন , আপনি বেশ সেট করেছেন।

:wসাধারণ বাইন্ডিং না থাকার একটি কারণ রয়েছে । আমি বিস্মিত সবচেয়ে সমাধান নয় লিভারেজ কমান্ড কর্মপ্রবাহ, আমি সাবেক কমান্ড ব্যবহার করে অনেক, :s, :g, :v, :argdo, :cdo, এবং বন্ধুদের। এটি বিভিন্ন মোডের সাথে সংমিশ্রণ করে, ভিমের পুরো শক্তিটি ট্যাপ করে। সুতরাং কেবল একটি মোডে থাকবেন না, ভিএম এর সম্পূর্ণ শক্তিটি উপার্জনের চেষ্টা করুন।

সুতরাং সম্পূর্ণ কর্মপ্রবাহ। ইউআরএলের উপরে আপনার কার্সারটি থাকা অবস্থায়, এটি কেবল একটি একক পদক্ষেপ: 😊 😊

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

লক্ষ্য করুন !যেটি ভিএম এর বাইরে বাহ্যিক প্রোগ্রামগুলির শক্তিকে সুফলিত করতে নির্দেশ করে। ভিন !

যদি আপনি 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. উইন্ডোজ (ডাব্লুএসএল 2) রয়েছে :!wslview

আমি তিনটি প্ল্যাটফর্ম ব্যবহার করি এবং তারা দুর্দান্ত কাজ করে। আপনি কেবল তার ভিএম বাইন্ডিংগুলির জন্য একটি ব্যবহার করতে পারেন, যেমন। :!openএবং আপনার মাত্র ওরফে কমান্ড যাই হোক না কেন প্ল্যাটফর্ম-নির্দিষ্ট প্রোগ্রাম আপনি আছে।bashrc/zshrc/fish configopen

যেমন alias open = wslview

এইভাবে, আমার vimrcপ্ল্যাটফর্ম-অজানাস্টিক থাকে, এবং আমি কেবলমাত্র অসঙ্গতিগুলির সাথে মোকাবিলা করব bashrc/zshrc/fish config

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.