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?
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?
Jawaban:
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_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.
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-open
untuk Linux, atau 'jalur ke browser web Anda' untuk Windows
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 otomatis
: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:
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
Anda harus menggunakan getline('.')
dan matchstr()
mengekstrak url di bawah kursor. Selebihnya sama saja.
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 git@github.com:xolox/vim-misc.git & git clone git@github.com: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.
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>¬
Anda harus melihat sekilas plugin vim ini
Ini pada dasarnya apa yang telah dijelaskan dalam beberapa tanggapan lain, tetapi konfigurasi khusus diperlukan jika Anda menggunakan pengelola plugin :)
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
:
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
netrw
Ini adalah solusi untuk orang yang menghapus netrw
( :help netrw-noload
) di vim / neovim. Misalnya, mereka menggunakan pengelola file yang berbeda sepertivim-dirvish
👉 :!open <c-r><c-a>
atau peta gx
:
👉 nmap gx :!open <c-r><c-a>
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-dirvish
cukup 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-dirvish
terhadapNerdtree
, Anda bisa melihat perbedaannya.
Saya turun vim-vinegar
juga karena vim-dirvish memiliki -
pengikatan, dan sebagian besar konfigurasi vim-vinegar
bersifat netrw
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 pada vim-dirvish
buffer. Dan ketik !rm
untuk hapus, !mv
untuk mengganti nama.
Sejak saya menonaktifkan netrw, ( :help netrw-noload
) saya menemukan diri saya meraih gx
waktu ke waktu. Saya tidak ingin memuat plugin untuk mendapatkan gx
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.
👉 :!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>
:!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 Anda bashrc/zshrc/fish config
yang open
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 melalui bashrc/zshrc/fish config
.