-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathopen-in-browser.vim
More file actions
30 lines (24 loc) · 846 Bytes
/
open-in-browser.vim
File metadata and controls
30 lines (24 loc) · 846 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
if exists('g:loaded_openinbrowser') && g:loaded_openinbrowser
finish
endif
let g:loaded_openinbrowser = 1
let s:save_cpo = &cpo
set cpo&vim
function! OpenInBrowser()
let url = expand('<cWORD>')
" Remove surrounding delimiters
let url = substitute(url, '^[''"\[({<]\+\(.\{-}\)[''",.\])}>]\+$', '\1', '')
" Parse bundle urls
if url =~# '^[a-zA-Z][a-zA-Z0-9_.-]*\/[a-zA-Z][a-zA-Z0-9_.-]*$'
let url = 'https://github.com/' . url
endif
" Check if url is valid
if url =~# '\(\(https\?\|ftp\|git\)://\)\?'
\ . '[a-zA-Z0-9][a-zA-Z0-9_-]*'
\ . '\(\.[a-zA-Z0-9][a-zA-Z0-9_-]*\)\+\(:\d\+\)\?'
\ . '\(/[a-zA-Z0-9_/.+%#?&=;@$,!''*~-]*\)\?'
silent execute '!xdg-open ' . shellescape(url,1) . '&'
endif
endfunction
nnoremap <silent> gx :call OpenInBrowser()<cr>
let &cpo = s:save_cpo