分页: 1 / 2
已实现:用火狐开启gVim中的URL - gVim中调用外部程序,但不要gVim去等它结束
发表于 : 2009-05-18 13:16
由 lilydjwg
文件中经常会有一些URL,所以想加个键映射,方便地打开URL:
代码: 全选
nmap tf :!firefox <url><CR> "<url>代指要打开的URL
可是这样的话,gVim就会等待火狐结束(除非火狐已经由其它方式打开)。
我希望火狐能在后台打开。加过 & 了,结果gVim除了显示它执行了这条命令外,就什么反应也没有了(根本没有执行火狐)。
不知哪位有办法教教我?
Re: 怎样实现:gVim中调用外部程序,但不要gVim去等它结束
发表于 : 2009-05-18 13:55
由 iny
代码: 全选
nmap <silent> tf :!firefox <url><CR> "<url>代指要打开的URL
Re: 怎样实现:gVim中调用外部程序,但不要gVim去等它结束
发表于 : 2009-05-18 14:00
由 iny
怎么设置使用Ctrl + Click就打开URL链接?
Re: 怎样实现:gVim中调用外部程序,但不要gVim去等它结束
发表于 : 2009-05-18 14:13
由 lilydjwg
回2楼:我也试过silent,没有用的,还是得等火狐结束。
回3楼:左键的话
代码: 全选
nmap <C-LeftMouse> <open_url> "<open_url>部分依你的需求自己写吧
Re: 怎样实现:gVim中调用外部程序,但不要gVim去等它结束
发表于 : 2009-05-18 14:49
由 iny
的确不行,等到高人
PS:open_url不会写,呵呵
分享:gVim打开光标处的URL函数
发表于 : 2009-05-18 15:53
由 lilydjwg
累了好久,终于写出个像样的了,只是仍不能排除结尾的英文句号(.)。
第一个函数改自VimExplorer,第二个改自Vimwiki
代码: 全选
" 平台判断[[[2
function Lilydjwg_haswin32()
if (has("win32") || has("win95") || has("win64") || has("win16"))
return 1
else
return 0
endif
endfunction
" 取得光标处的匹配[[[2
function Lilydjwg_get_pattern_at_cursor(pat) "{{{
let col = col('.') - 1
let line = getline('.')
let ebeg = -1
let cont = match(line, a:pat, 0)
while (ebeg >= 0 || (0 <= cont) && (cont <= col))
let contn = matchend(line, a:pat, cont)
if (cont <= col) && (col < contn)
let ebeg = match(line, a:pat, cont)
let elen = contn - ebeg
break
else
let cont = match(line, a:pat, contn)
endif
endwh
if ebeg >= 0
return strpart(line, ebeg, elen)
else
return ""
endif
endfunction
" 用火狐打开链接[[[2
function Lilydjwg_open_url()
let s:url = Lilydjwg_get_pattern_at_cursor('\v(https?://|ftp://|file:/{3}|www\.)((\w|-)+\.)+(\w|-)+(:\d+)?/((\w|[~@#$%^&+=/?.-])+)?')
" echo s:url
if s:url == ""
echohl WarningMsg
echomsg '在光标处未发现URL!'
echohl None
else
if !Lilydjwg_haswin32()
call system("firefox " . s:url . " &")
else
call system("start " . s:url)
endif
endif
unlet s:url
endfunction
目前未经充分测试,若发现问题请回复我。
Re: 已实现:用火狐开启gVim中的URL - gVim中调用外部程序,但不要gVim去等它结束
发表于 : 2009-05-18 18:21
由 starwing
不一定非要firefox。你可以用gnome-open,或者跟winmanager一样,做几个脚本,比如start.gnome, start.kde等等,这样比较方便。
还有,在我的9.04, 火狐3.5.b4上面,直接:!firefox火狐就自己fork出去了,只剩下一个hitenter提示……所以貌似不需要这么麻烦……
Re: 已实现:用火狐开启gVim中的URL - gVim中调用外部程序,但不要gVim去等它结束
发表于 : 2009-05-18 19:38
由 lilydjwg
starwing 写了:
还有,在我的9.04, 火狐3.5.b4上面,直接:!firefox火狐就自己fork出去了,只剩下一个hitenter提示……所以貌似不需要这么麻烦……
我的火狐是3.0.10的,fork不出去啊!gnome-open倒可以一试。
Re: 分享:gVim打开光标处的URL函数
发表于 : 2009-05-19 1:21
由 iny
lilydjwg 写了:累了好久,终于写出个像样的了,只是仍不能排除结尾的英文句号(.)。
第一个函数改自VimExplorer,第二个改自Vimwiki
代码: 全选
" 平台判断[[[2
function Lilydjwg_haswin32()
if (has("win32") || has("win95") || has("win64") || has("win16"))
return 1
else
return 0
endif
endfunction
" 取得光标处的匹配[[[2
function Lilydjwg_get_pattern_at_cursor(pat) "{{{
let col = col('.') - 1
let line = getline('.')
let ebeg = -1
let cont = match(line, a:pat, 0)
while (ebeg >= 0 || (0 <= cont) && (cont <= col))
let contn = matchend(line, a:pat, cont)
if (cont <= col) && (col < contn)
let ebeg = match(line, a:pat, cont)
let elen = contn - ebeg
break
else
let cont = match(line, a:pat, contn)
endif
endwh
if ebeg >= 0
return strpart(line, ebeg, elen)
else
return ""
endif
endfunction
" 用火狐打开链接[[[2
function Lilydjwg_open_url()
let s:url = Lilydjwg_get_pattern_at_cursor('\v(https?://|ftp://|file:/{3}|www\.)((\w|-)+\.)+(\w|-)+(:\d+)?/((\w|[~@#$%^&+=/?.-])+)?')
" echo s:url
if s:url == ""
echohl WarningMsg
echomsg '在光标处未发现URL!'
echohl None
else
if !Lilydjwg_haswin32()
call system("firefox " . s:url . " &")
else
call system("start " . s:url)
endif
endif
unlet s:url
endfunction
目前未经充分测试,若发现问题请回复我。
相当的爽,不过有个地方有问题Windows下把start改成explorer就可以了

Re: 已实现:用火狐开启gVim中的URL - gVim中调用外部程序,但不要gVim去等它结束
发表于 : 2009-05-19 12:40
由 lilydjwg
iny 写了:
相当的爽,不过有个地方有问题Windows下把start改成explorer就可以了
谢谢支持!
Windows下没试过,不知道是什么问题。不过要改的话,我宁愿改成 firefox (我已经把一个包含 firefox.lnk 的文件夹加到%PATH%里去了。)
Re: 已实现:用火狐开启gVim中的URL - gVim中调用外部程序,但不要gVim去等它结束
发表于 : 2009-05-19 13:05
由 iny
lilydjwg 写了:iny 写了:
相当的爽,不过有个地方有问题Windows下把start改成explorer就可以了
谢谢支持!
Windows下没试过,不知道是什么问题。不过要改的话,我宁愿改成 firefox (我已经把一个包含 firefox.lnk 的文件夹加到%PATH%里去了。)
嗯,我反复测试了,只要把start改成explorer就可以用IE打开了,Windows上用IE方便,毕竟这是集成了,呵呵
另外有个问题请教,能不能抓取鼠标所在位置?否则还得把光标放到url的地方才能操作,如果能抓取鼠标位置,那就简直完美了。

Re: 已实现:用火狐开启gVim中的URL - gVim中调用外部程序,但不要gVim去等它结束
发表于 : 2009-05-19 18:16
由 lilydjwg
iny 写了:
另外有个问题请教,能不能抓取鼠标所在位置?否则还得把光标放到url的地方才能操作,如果能抓取鼠标位置,那就简直完美了。

要鼠标操作的话,你点两下就可以了嘛:第一下把光标移过去,第二下打开链接。
愿意看代码的话,可以看看VimExplorer的,它似乎做到了。
Re: 已实现:用火狐开启gVim中的URL - gVim中调用外部程序,但不要gVim去等它结束
发表于 : 2009-05-19 18:22
由 lilydjwg
Try this:
代码: 全选
nmap <2-LeftMouse> :call Lilydjwg_open_url()<CR>
新发现:在终端的Vim中用鼠标双击(或右键有弹出菜单)链接即可打开链接!
发表于 : 2009-05-21 22:09
由 lilydjwg
RT。看来终端也是很好用的~!
Re: 已实现:用火狐开启gVim中的URL - gVim中调用外部程序,但不要gVim去等它结束
发表于 : 2009-05-21 22:12
由 O_O_BOT
irc <fvw> say: 那是终端的扩展 rxvt就有。