ฉันใช้ Twitvim เป็นครั้งแรก การเห็น URL ทั้งหมดในนั้นทำให้ฉันสงสัยว่ามีวิธีใดในการเปิด URL ภายใต้เคอร์เซอร์ในเบราว์เซอร์ที่คุณชื่นชอบหรือที่ระบุไว้หรือไม่?
ฉันใช้ Twitvim เป็นครั้งแรก การเห็น URL ทั้งหมดในนั้นทำให้ฉันสงสัยว่ามีวิธีใดในการเปิด URL ภายใต้เคอร์เซอร์ในเบราว์เซอร์ที่คุณชื่นชอบหรือที่ระบุไว้หรือไม่?
คำตอบ:
อัปเดต: จากทวีตของ tpope วันนี้
gx
กด คุณสามารถปรับแต่งเบราว์เซอร์ บน Gnome และ Mac OS X มีการใช้งาน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>
หมายเหตุ: หากคุณไม่ได้ใช้ Mac ให้ใช้gnome-open
/ xdg-open
สำหรับ Linux หรือ "path to your web browser" สำหรับ Windows
gx
มีพลังมากขอบคุณ! นอกจากนี้ยังเปิดไฟล์ด้วยแอพพลิเคชั่นที่เหมาะสม
หากคุณใช้ Vim 7.4 หรือใหม่กว่าในโหมดปกติให้วางเคอร์เซอร์ไว้ด้านล่าง URL จากนั้นคลิกgx
URL จะเปิดในเบราว์เซอร์โดยอัตโนมัติ
:h netrw_gx
: * สำหรับ Windows 32 หรือ 64 จะใช้ url และ FileProtocolHandler dll * สำหรับ Gnome (พร้อม gnome-open): ใช้ gnome-open * สำหรับ KDE (พร้อม kfmclient): ใช้ kfmclient * สำหรับ Mac OS X: ใช้ open * มิฉะนั้นจะใช้ปลั๊กอิน netrwFileHandler
ฉันใช้สคริปต์นี้เพื่อค้นหา gooogle 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 ใต้เคอร์เซอร์ ส่วนที่เหลือก็เช่นเดียวกัน
เพิ่มบรรทัดต่อไปนี้ในไฟล์. vimrc:
nmap <leader><space> yiW:!xdg-open <c-r>" &<cr>
ดังนั้นในโหมดปกติการกด \ มันจะเลือกคำปัจจุบันและเปิดเป็นที่อยู่ในเว็บเบราว์เซอร์
ผู้นำโดยค่าเริ่มต้นคือ \ (แต่ฉันได้จับคู่กับlet mapleader = ","
) ในทำนองเดียวกันการใช้ imap คุณสามารถแมปลำดับคีย์บางส่วนในโหมดแทรกได้ (แต่ถ้าเป็นลำดับคีย์ 2 ลำดับอาจจะแทนที่พฤติกรรมเริ่มต้นบางอย่าง)
นี่คือการจัดเรียงของรุ่นปรับปรุงของสคริปต์เดิมที่เสนอโดย @tungd นี่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>¬
โอเคโดยใช้คำตอบจาก @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>
ฉันค่อนข้างสายไปงานปาร์ตี้นี้ แต่นี่เป็นอีกวิธีหนึ่งในการทำเช่นนี้ซึ่งใช้ได้ดีกับ Windows 7 โดยเฉพาะ
ติดตั้งทั้งvim-shellและvim-miscเป็นกลุ่มฉันขอแนะนำให้ทำสิ่งนี้ผ่านปลั๊กอินPathogen ที่ยอดเยี่ยมและcd ~/vimfiles/bundle & git clone git@github.com:xolox/vim-misc.git & git clone git@github.com:xolox/vim-shell.git
จาก msysgit ( ปลั๊กอินทั้งสองนี้เปิด URL ในเบราว์เซอร์เริ่มต้นของคุณโดยไม่ต้องสร้างพรอมต์คำสั่งเพิ่มเติมหรือเรื่องไร้สาระอื่น ๆ ที่มักจะต้องใช้ใน windows คุณสามารถเปิด url ใน Vim ได้ดังนี้: :Open http://duckduckgo.com
ลองดูสิคุณจะชอบ )
สร้างการแมปเป็นกลุ่มเพื่อให้คุณสามารถดึงเส้นใต้เคอร์เซอร์เข้าสู่เบราว์เซอร์ได้อย่างรวดเร็ว ฉันจะจับคู่สิ่งนี้กับคุณ (สำหรับฉันนั่นคือ,u
จากโหมดปกติ) วิธีการมีดังนี้
nnoremap u: exec "เปิด" .getline (".")
หากต้องการใช้การแมปนี้ให้พิมพ์คีย์ผู้นำของคุณจากโหมดปกติ + u ควรอ่านบรรทัดใต้เคอร์เซอร์และเปิดในเบราว์เซอร์เริ่มต้นของคุณ
คุณควรดูปลั๊กอินกลุ่มนี้อย่างรวดเร็ว
โดยพื้นฐานแล้วสิ่งที่ได้อธิบายไว้ในคำตอบอื่น ๆ แต่จำเป็นต้องกำหนดค่าเฉพาะหากคุณใช้ตัวจัดการปลั๊กอิน :)
ตามที่@kev อธิบายไว้ข้างต้นแก้ไขสำหรับสภาพแวดล้อม Linux
นอกเหนือจาก: เมื่อเรียกใช้ฟังก์ชันนี้ (Vim 8.1) ในเทอร์มินัลของฉันหน้าจอ Vim จะสับสน (ส่วนใหญ่เป็น "blanked;" กล่าวคือข้อความอยู่ที่นั่น แต่มองไม่เห็น) :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
ซึ่งทำได้ง่ายเพียงแค่แทนที่ "start" ด้วยสิ่งที่ระบบปฏิบัติการของคุณใช้
GU สำหรับgo url!
" Open url
if (has('win32') || has('win64'))
nmap gu :exec "!start <cWORD>"<cr>
else
nmap gu :exec "!open <cWORD>"<cr>
endif
netrw
นี่เป็นวิธีแก้ปัญหาสำหรับผู้ที่ลบnetrw
( :help netrw-noload
) ใน vim / neovim ตัวอย่างเช่นพวกเขาใช้โปรแกรมจัดการไฟล์อื่นเช่นvim-dirvish
👉 :!open <c-r><c-a>
หรือแผนที่gx
:
👉 nmap gx :!open <c-r><c-a>
ฉันกำลังค้นหาวิธีแก้ปัญหานี้เช่นกันเนื่องจากฉันลบ netrw ออกจากการโหลดเป็นกลุ่มอย่างสมบูรณ์และแทนที่ด้วยvim-dirvish
. ปลั๊กอินนี้จะมีประมาณ500 ~ LOCเมื่อเทียบกับnetrw
's (11,000 LOC)
ฉันไม่ได้ใช้การแก้ไขจากระยะไกลมากนักดังนั้นจึงvim-dirvish
มีประสิทธิภาพมากพอที่จะจัดการเวิร์กโฟลว์ของฉัน (จริง ๆ แล้วเร็วกว่าnetrw
~ ผู้เขียนอ้างว่า 2x ฉันรู้สึกว่ามันเร็วกว่านั้น - มันเป็นแบบทันที ⚡) มีประโยชน์มากใน codebase / ที่เก็บขนาดใหญ่ ฉันได้ลองใช้ใน repo ไฟล์ 10K รายการไฟล์ผ่าน-
ยังคงทันที! ใครบางคนที่ผ่านการทดสอบvim-dirvish
กับNerdtree
คุณสามารถเห็นความแตกต่าง
ฉันลดลงvim-vinegar
เช่นกันเพราะ vim-dirvish มีการ-
ผูกอยู่แล้วและการกำหนดค่าส่วนใหญ่vim-vinegar
เป็นnetrw
ข้อมูลเฉพาะ มันไม่จำเป็นต้องใช้ นกสองตัวในก้อนหิน!
ความงามของปลั๊กอินนี้เป็นการรวบรวมปรัชญาของVINE (Vim ไม่ใช่ Emacs) โดยใช้ประโยชน์จากพลังของโปรแกรมอื่น ๆ ในเทอร์มินัลเพื่อทำการจัดการไฟล์แทนที่จะพยายามทำทุกอย่างด้วยตัวเอง ส่วนที่สำคัญคือวิธีที่โปรแกรมภายนอกเหล่านี้โต้ตอบกับกลุ่ม และนั่นคือบรรลุโดย:Shdo
และมีคีย์ที่สะดวกของ.
(คำสั่ง dotซึ่งเป็นหน่วยความจำสำหรับคำสั่งทำซ้ำ) ให้ทำทั้งสองรายการหรือบรรทัดจริงบนvim-dirvish
บัฟเฟอร์ และพิมพ์!rm
เพื่อลบ!mv
เพื่อเปลี่ยนชื่อ
เนื่องจากฉันปิดการใช้งาน netrw ( :help netrw-noload
) ฉันพบว่าตัวเองเข้าถึงgx
เป็นครั้งคราว ฉันไม่ต้องการโหลดปลั๊กอินเพื่อรับgx
ฟังก์ชันการทำงานกลับคืนมา
ตอนนี้สำหรับวิธีแก้ปัญหามีการผูกในโหมดคำสั่งctrl-rจากนั้นctrl-a( :help c_CTRL-R_CTRL-A
) เพื่อวางสิ่งที่คุณมีในเคอร์เซอร์ของคุณไปยังบรรทัดคำสั่งดังนั้นหากคุณรวมสิ่งนั้นกับ:!xdg-open
/ :!open
(สำหรับ mac) คุณก็ตั้งค่าได้ดีทีเดียว
มีเหตุผลว่าทำไม: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>
:!open
:!xdg-open
:!wslview
ฉันใช้ทั้งสามแพลตฟอร์มและทำงานได้ดี คุณสามารถใช้หนึ่งในนั้นสำหรับการรวมกลุ่มของคุณเช่น :!open
และนามแฝงของคุณเพียงแค่ในคำสั่งเพื่อสิ่งที่โปรแกรมเฉพาะแพลตฟอร์มที่คุณมีbashrc/zshrc/fish config
open
เช่น. alias open = wslview
ด้วยวิธีนี้ฉันvimrc
จะไม่เชื่อเรื่องพระเจ้าของแพลตฟอร์มและฉันจะจัดการกับความไม่สอดคล้องกันผ่านทางbashrc/zshrc/fish config
.