Saya menggunakan Twitvim untuk pertama kalinya. Melihat semua URL di sana membuat saya bertanya-tanya, adakah cara untuk membuka URL di bawah kursor di browser favorit Anda atau yang ditentukan?
kursor teks ... tetapi jika Anda tahu cara melakukannya di bawah kursor mouse, itu akan keren juga
Mauro Morales
1
klik tombol tengah mouse pada tautan di vim selalu berhasil untuk saya, meskipun saya tidak tahu caranya
Oleg Mikheev
2
klik tengah untuk membuka kemungkinan merupakan fitur terminal, bukan vim.
Leonid Shevtsov
Jawaban:
189
Diperbarui: dari tweet tpope hari ini
Tekan gx. Anda dapat menyesuaikan browser. Di Gnome dan Mac OS X sudah menggunakan gnome-open/ open. Umumnya Anda dapat mengatur g:netrw_browsex_viewerapa pun yang Anda inginkan.
Jawaban asli:
Tidak ingat di mana saya mendapatkan fungsi ini. Ada bug dengan hash (#) di url, tetapi fungsinya bekerja cukup baik sehingga saya tidak akan repot-repot memperbaikinya.
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>
Catatan: Jika Anda tidak menggunakan Mac, gunakan gnome-open/ xdg-openuntuk Linux, atau 'jalur ke browser web Anda' untuk Windows
Saya rasa saya akan menggunakan solusi Anda :) terima kasih ... Saya ingin melihat apakah ada cara untuk hanya mendapatkan url di bawah kursor, tetapi tidak tahu banyak tentang vimscript jadi saya harus mengerjakannya .
Mauro Morales
14
gxsangat kuat, terima kasih! Ini juga membuka file dengan aplikasi ™ yang sesuai.
blinry
Saya pikir ini adalah g: netrw_browsex_viewer (w / o 'r')
Jack
2
Saya suka membuka url dengan? dan # di dalamnya. Saya pikir netrw menggunakan cfile dan bukan cWORD sekarang, jadi url dengan '?' tidak lagi dapat dibuka menggunakan metode itu. Saya mencoba solusi Anda di sini dan '#' di url akan diganti dengan nama file alternatif. exec "! open" .shellescape (uri, 1) tampaknya telah memperbaiki masalah tersebut.
Jika Anda menggunakan Vim 7.4 atau yang lebih baru, dalam mode normal, letakkan kursor Anda di bawah URL, lalu klik gx, URL akan terbuka di browser otomatis
bagaimana Anda menyetel browser menjadi Chrome dalam contoh ini? (atau browser apa pun itu)
jm3
@ jm3 Coba :h netrw_gx: * untuk Windows 32 atau 64, url dan FileProtocolHandler dll digunakan. * untuk Gnome (dengan gnome-open): gnome-open digunakan. * untuk KDE (dengan kfmclient): kfmclient digunakan * untuk Mac OS X: open digunakan. * jika tidak, plugin netrwFileHandler akan digunakan.
kba berdiri bersama Monica
1
keluar dari topik sedikit, tetapi bagaimana Anda merekam layar menjadi gif? suka!
Saya rasa ini akan mengarahkan saya ke solusi yang saya cari pada akhirnya ... ditambah fungsi ini akan menjadi sangat berguna. Terima kasih!
Mauro Morales
2
Tambahkan baris berikut ke file .vimrc:
nmap <leader><space> yiW:!xdg-open <c-r>" &<cr>
Jadi dalam mode normal itu menekan \ itu memilih kata saat ini dan membukanya sebagai alamat di browser web.
Leader secara default adalah \ (tapi saya telah memetakannya ke, dengan let mapleader = ","). Demikian pula, menggunakan imap Anda dapat memetakan beberapa urutan kunci dalam mode penyisipan (tetapi kemudian, jika itu adalah urutan 2 kunci, mungkin akan menimpa beberapa perilaku default).
Ok jadi menggunakan jawaban dari @tungd dan @kev dan sedikit penelitian saya berakhir dengan skrip ini, yang berfungsi seperti yang saya butuhkan. Seperti kata @tungd, # dapat memberikan masalah jika di dalam url tapi saya tidak keberatan, jika ada yang memiliki ekspresi yang lebih baik untuk url tersebut maka itu akan disambut.
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>
Saya cukup terlambat ke pesta ini, tetapi inilah cara lain untuk melakukan ini yang bekerja dengan sangat baik di Windows 7.
Instal vim-shell dan vim-misc di vim. Saya sarankan melakukan ini melalui plugin Pathogen yang luar biasa dan kemudian hanya cd ~/vimfiles/bundle & git clone [email protected]:xolox/vim-misc.git & git clone [email protected]:xolox/vim-shell.gitdari msysgit. ( Kedua plugin ini membuka url di browser default Anda tanpa membuat perintah perintah tambahan atau omong kosong konyol lainnya yang biasanya diperlukan di windows. Anda dapat membuka url di Vim seperti ini:. :Open http://duckduckgo.comCobalah. Anda akan menyukainya. )
Buat beberapa pemetaan vim sehingga Anda dapat dengan cepat memasukkan baris di bawah kursor ke dalam browser. Saya akan memetakan ini ke Anda (bagi saya, itu ,udari mode normal). Begini caranya:
nnoremap u: exec "Buka" .getline (".")
Untuk menggunakan pemetaan ini, ketik kunci Leader Anda dari mode normal + u. Ini harus membaca baris di bawah kursor Anda dan membukanya di browser default Anda.
Ini adalah semacam versi perbaikan dari skrip yang awalnya diusulkan oleh @tungd di sini https://stackoverflow.com/a/9459366/7631731 . Menjaga konteks vim dan menangani dengan benar URL yang berisi "#".
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>¬
Ini pada dasarnya apa yang telah dijelaskan dalam beberapa tanggapan lain, tetapi konfigurasi khusus diperlukan jika Anda menggunakan pengelola plugin :)
Selain: ketika fungsi ini dijalankan (Vim 8.1) di terminal saya, layar Vim dikaburkan (kebanyakan "kosong;" yaitu, teks ada di sana tetapi tidak terlihat). The :redraw!perintah (lihat https://stackoverflow.com/a/1117742/1904943 ) redraws layar.
Ini adalah solusi untuk orang yang menghapus netrw( :help netrw-noload) di vim / neovim. Misalnya, mereka menggunakan pengelola file yang berbeda sepertivim-dirvish
TLDR:
👉 :!open <c-r><c-a>
atau peta gx:
👉 nmap gx :!open <c-r><c-a>
Jadi hanya sedikit dari latar belakang:
Saya sedang mencari solusi untuk masalah ini juga karena saya benar-benar menghapus netrw agar tidak dimuat di vim sepenuhnya dan menggantinya dengan vim-dirvish. Plugin ini memiliki sekitar 500 ~ LOC , dibandingkan dengan netrw's (11.000 LOC) .
Saya tidak banyak menggunakan pengeditan jarak jauh sehingga vim-dirvishcukup kuat untuk mengelola alur kerja saya (Ini sebenarnya lebih cepat dari netrw~ penulis mengklaim 2x, saya merasa ini lebih cepat dari itu - ini benar-benar instan ⚡) sangat berguna pada basis kode / repositori besar. Saya bahkan mencobanya dalam repo file 10K, daftar file -masih instan! Seseorang diuji vim-dirvishterhadapNerdtree , Anda bisa melihat perbedaannya.
Saya turun vim-vinegarjuga karena vim-dirvish memiliki -pengikatan, dan sebagian besar konfigurasi vim-vinegarbersifat netrwspesifik. Itu tidak membutuhkannya. Dua burung dalam satu batu!
Keindahan dari plugin ini adalah menganut filosofi VINE (Vim is not Emacs). Di mana ia memanfaatkan kekuatan program lain di terminal untuk melakukan manipulasi file, alih-alih mencoba melakukan semuanya sendiri. Bagian yang penting adalah seberapa natural program eksternal ini berinteraksi dengan vim. Dan itu dicapai dengan :Shdo, dan itu memiliki kunci yang nyaman .(perintah titik , yang merupakan mnemonik untuk perintah pengulangan), lakukan itu pada kedua pilihan atau baris sebenarnya pada vim-dirvishbuffer. Dan ketik !rmuntuk hapus, !mvuntuk mengganti nama.
Sejak saya menonaktifkan netrw, ( :help netrw-noload) saya menemukan diri saya meraih gxwaktu ke waktu. Saya tidak ingin memuat plugin untuk mendapatkan gxfungsinya kembali.
Sekarang untuk solusinya, ada pengikatan dalam mode perintah, ctrl-rlalu ctrl-a( :help c_CTRL-R_CTRL-A), untuk menempelkan apa pun yang Anda miliki di kursor ke baris perintah, jadi jika Anda menggabungkannya dengan :!xdg-open/ :!open(untuk mac), Anda cukup banyak mengaturnya.
Ada alasan mengapa :wtidak memiliki binding normal. Saya terkejut paling solusi tidak maksimal perintah alur kerja, saya menggunakan ex-perintah banyak, :s, :g, :v, :argdo, :cdo, dan teman-teman. Gabungkan ini dengan mode berbeda, ketuk kekuatan penuh vim. Jadi jangan hanya bertahan dalam satu mode, coba manfaatkan kekuatan penuh vim.
Jadi alur kerja lengkapnya. Meskipun Anda menempatkan kursor di atas url, itu hanya satu langkah: 😊
👉 :!open <c-r><c-a>
Perhatikan !yang menunjukkan peningkatan kekuatan program eksternal di luar vim. Vine !
Jika Anda ingin gxfungsinya kembali, Anda cukup memetakan menggunakan perintah yang sama:
nmap gx :!open <c-r><c-a>
Saya suka membungkam binding saya, jadi menambahkan <silent>dan :silakan melakukan triknya ( :help :map-silent)
👉 nmap <silent>gx :sil !open <c-r><c-a><cr>
Catatan tentang program khusus platform untuk membuka url:
Mac punya :!open
Linux memiliki :!xdg-open
Windows (WSL2) memiliki :!wslview
Saya menggunakan ketiga platform dan mereka bekerja dengan baik. Anda bisa menggunakan salah satunya untuk pengikatan vim Anda, misalnya. :!opendan hanya alias di Anda bashrc/zshrc/fish configyang openperintah untuk program apa pun yang platform-spesifik yang Anda miliki.
misalnya. alias open = wslview
Dengan begitu, saya vimrctetap platform-agnostik, dan saya hanya akan menangani ketidakkonsistenan melalui bashrc/zshrc/fish config.
Jawaban:
Diperbarui: dari tweet tpope hari ini
Tekan
gx
. Anda dapat menyesuaikan browser. Di Gnome dan Mac OS X sudah menggunakangnome-open
/open
. Umumnya Anda dapat mengaturg:netrw_browsex_viewer
apa pun yang Anda inginkan.Jawaban asli:
Tidak ingat di mana saya mendapatkan fungsi ini. Ada bug dengan hash (#) di url, tetapi fungsinya bekerja cukup baik sehingga saya tidak akan repot-repot memperbaikinya.
Catatan: Jika Anda tidak menggunakan Mac, gunakan
gnome-open
/xdg-open
untuk Linux, atau 'jalur ke browser web Anda' untuk Windowssumber
gx
sangat kuat, terima kasih! Ini juga membuka file dengan aplikasi ™ yang sesuai.Jika Anda menggunakan Vim 7.4 atau yang lebih baru, dalam mode normal, letakkan kursor Anda di bawah URL, lalu klik
gx
, URL akan terbuka di browser otomatissumber
:h netrw_gx
: * untuk Windows 32 atau 64, url dan FileProtocolHandler dll digunakan. * untuk Gnome (dengan gnome-open): gnome-open digunakan. * untuk KDE (dengan kfmclient): kfmclient digunakan * untuk Mac OS X: open digunakan. * jika tidak, plugin netrwFileHandler akan digunakan.Saya menggunakan skrip ini untuk mencari gooogle di
keyword
bawah kursor:Anda harus menggunakan
getline('.')
danmatchstr()
mengekstrak url di bawah kursor. Selebihnya sama saja.sumber
Tambahkan baris berikut ke file .vimrc:
Jadi dalam mode normal itu menekan \ itu memilih kata saat ini dan membukanya sebagai alamat di browser web.
Leader secara default adalah \ (tapi saya telah memetakannya ke, dengan
let mapleader = ","
). Demikian pula, menggunakan imap Anda dapat memetakan beberapa urutan kunci dalam mode penyisipan (tetapi kemudian, jika itu adalah urutan 2 kunci, mungkin akan menimpa beberapa perilaku default).sumber
Ok jadi menggunakan jawaban dari @tungd dan @kev dan sedikit penelitian saya berakhir dengan skrip ini, yang berfungsi seperti yang saya butuhkan. Seperti kata @tungd, # dapat memberikan masalah jika di dalam url tapi saya tidak keberatan, jika ada yang memiliki ekspresi yang lebih baik untuk url tersebut maka itu akan disambut.
sumber
Saya cukup terlambat ke pesta ini, tetapi inilah cara lain untuk melakukan ini yang bekerja dengan sangat baik di Windows 7.
Instal vim-shell dan vim-misc di vim. Saya sarankan melakukan ini melalui plugin Pathogen yang luar biasa dan kemudian hanya
cd ~/vimfiles/bundle & git clone [email protected]:xolox/vim-misc.git & git clone [email protected]:xolox/vim-shell.git
dari msysgit. ( Kedua plugin ini membuka url di browser default Anda tanpa membuat perintah perintah tambahan atau omong kosong konyol lainnya yang biasanya diperlukan di windows. Anda dapat membuka url di Vim seperti ini:.:Open http://duckduckgo.com
Cobalah. Anda akan menyukainya. )Buat beberapa pemetaan vim sehingga Anda dapat dengan cepat memasukkan baris di bawah kursor ke dalam browser. Saya akan memetakan ini ke Anda (bagi saya, itu
,u
dari mode normal). Begini caranya:nnoremap u: exec "Buka" .getline (".")
Untuk menggunakan pemetaan ini, ketik kunci Leader Anda dari mode normal + u. Ini harus membaca baris di bawah kursor Anda dan membukanya di browser default Anda.
sumber
Ini adalah semacam versi perbaikan dari skrip yang awalnya diusulkan oleh @tungd di sini https://stackoverflow.com/a/9459366/7631731 . Menjaga konteks vim dan menangani dengan benar URL yang berisi "#".
sumber
Anda harus melihat sekilas plugin vim ini
henrik / vim-open-url
Ini pada dasarnya apa yang telah dijelaskan dalam beberapa tanggapan lain, tetapi konfigurasi khusus diperlukan jika Anda menggunakan pengelola plugin :)
sumber
Seperti dijelaskan di atas oleh @kev , dimodifikasi untuk lingkungan Linux.
Selain: ketika fungsi ini dijalankan (Vim 8.1) di terminal saya, layar Vim dikaburkan (kebanyakan "kosong;" yaitu, teks ada di sana tetapi tidak terlihat). The
:redraw!
perintah (lihat https://stackoverflow.com/a/1117742/1904943 ) redraws layar.Tambahkan ke
~/.vimrc
:sumber
Ini sederhana, cukup ganti "mulai" dengan apa pun yang digunakan OS Anda
GU untuk go url!
sumber
Solusi untuk orang yang bongkar muat
netrw
Ini adalah solusi untuk orang yang menghapus
netrw
(:help netrw-noload
) di vim / neovim. Misalnya, mereka menggunakan pengelola file yang berbeda sepertivim-dirvish
TLDR:
👉
:!open <c-r><c-a>
atau peta
gx
:👉
nmap gx :!open <c-r><c-a>
Jadi hanya sedikit dari latar belakang:
Saya sedang mencari solusi untuk masalah ini juga karena saya benar-benar menghapus netrw agar tidak dimuat di vim sepenuhnya dan menggantinya dengan
vim-dirvish
. Plugin ini memiliki sekitar 500 ~ LOC , dibandingkan dengannetrw
's (11.000 LOC) .Saya tidak banyak menggunakan pengeditan jarak jauh sehingga
vim-dirvish
cukup kuat untuk mengelola alur kerja saya (Ini sebenarnya lebih cepat darinetrw
~ penulis mengklaim 2x, saya merasa ini lebih cepat dari itu - ini benar-benar instan ⚡) sangat berguna pada basis kode / repositori besar. Saya bahkan mencobanya dalam repo file 10K, daftar file-
masih instan! Seseorang diujivim-dirvish
terhadapNerdtree
, Anda bisa melihat perbedaannya.Saya turun
vim-vinegar
juga karena vim-dirvish memiliki-
pengikatan, dan sebagian besar konfigurasivim-vinegar
bersifatnetrw
spesifik. Itu tidak membutuhkannya. Dua burung dalam satu batu!Keindahan dari plugin ini adalah menganut filosofi VINE (Vim is not Emacs). Di mana ia memanfaatkan kekuatan program lain di terminal untuk melakukan manipulasi file, alih-alih mencoba melakukan semuanya sendiri. Bagian yang penting adalah seberapa natural program eksternal ini berinteraksi dengan vim. Dan itu dicapai dengan
:Shdo
, dan itu memiliki kunci yang nyaman.
(perintah titik , yang merupakan mnemonik untuk perintah pengulangan), lakukan itu pada kedua pilihan atau baris sebenarnya padavim-dirvish
buffer. Dan ketik!rm
untuk hapus,!mv
untuk mengganti nama.Sejak saya menonaktifkan netrw, (
:help netrw-noload
) saya menemukan diri saya meraihgx
waktu ke waktu. Saya tidak ingin memuat plugin untuk mendapatkangx
fungsinya kembali.Sekarang untuk solusinya, ada pengikatan dalam mode perintah, ctrl-rlalu ctrl-a(
:help c_CTRL-R_CTRL-A
), untuk menempelkan apa pun yang Anda miliki di kursor ke baris perintah, jadi jika Anda menggabungkannya dengan:!xdg-open
/:!open
(untuk mac), Anda cukup banyak mengaturnya.Ada alasan mengapa
:w
tidak memiliki binding normal. Saya terkejut paling solusi tidak maksimal perintah alur kerja, saya menggunakan ex-perintah banyak,:s
,:g
,:v
,:argdo
,:cdo
, dan teman-teman. Gabungkan ini dengan mode berbeda, ketuk kekuatan penuh vim. Jadi jangan hanya bertahan dalam satu mode, coba manfaatkan kekuatan penuh vim.Jadi alur kerja lengkapnya. Meskipun Anda menempatkan kursor di atas url, itu hanya satu langkah: 😊
👉
:!open <c-r><c-a>
Perhatikan
!
yang menunjukkan peningkatan kekuatan program eksternal di luar vim. Vine !Jika Anda ingin
gx
fungsinya kembali, Anda cukup memetakan menggunakan perintah yang sama:nmap gx :!open <c-r><c-a>
Saya suka membungkam binding saya, jadi menambahkan
<silent>
dan:sil
akan melakukan triknya (:help :map-silent
)👉
nmap <silent>gx :sil !open <c-r><c-a><cr>
Catatan tentang program khusus platform untuk membuka url:
:!open
:!xdg-open
:!wslview
Saya menggunakan ketiga platform dan mereka bekerja dengan baik. Anda bisa menggunakan salah satunya untuk pengikatan vim Anda, misalnya.
:!open
dan hanya alias di Andabashrc/zshrc/fish config
yangopen
perintah untuk program apa pun yang platform-spesifik yang Anda miliki.misalnya.
alias open = wslview
Dengan begitu, saya
vimrc
tetap platform-agnostik, dan saya hanya akan menangani ketidakkonsistenan melaluibashrc/zshrc/fish config
.sumber