我第一次使用Twitvim。看到那里的所有网址让我想知道,有没有办法在你最喜欢的浏览器或指定的浏览器中打开光标下的URL?
答案 0 :(得分:147)
更新:今天来自tpope的推文
按gx
。您可以自定义浏览器。在Gnome和Mac OS X上,它已经使用gnome-open
/ open
。通常,您可以将g:netrw_browsex_viewer
设置为您想要的任何内容。
原始答案:
不记得我在哪里获得此功能。 url中有一个hash(#)错误,但该函数运行良好,我不打扰修复它。
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上,请使用适用于Linux的gnome-open
/ xdg-open
或适用于Windows的“网络浏览器路径”
答案 1 :(得分:43)
如果您使用的是Vim 7.4或更高版本,请在正常模式下将光标放在网址下方,然后点击gx
,网址将自动在浏览器中打开
答案 2 :(得分:7)
我使用此脚本在Google下搜索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()
来提取光标下的网址。其余的都一样。
答案 3 :(得分:1)
好的,所以使用@tungd和@kev的答案和一些研究,我最终得到了这个脚本,它的工作方式与我需要的一样。就像@tungd所说的那样#如果在网址内可以给出一个问题,但是我很酷,如果有人对网址有更好的表达,那么它会受到欢迎。
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>
答案 4 :(得分:1)
我参加这个派对的时间已经很晚了,但这是另一种方法,在Windows 7上运行得特别好。
在vim中安装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。 (这两个插件在您的默认浏览器中打开网址,而不会创建任何额外的命令提示或Windows中通常需要的其他愚蠢的废话。您可以在Vim中打开网址::Open http://duckduckgo.com
。尝试一下。你会喜欢它)
创建一些vim映射,以便您可以快速将光标下的行放入浏览器。我将此映射到你(对我来说,这是,u
从正常模式)。方法如下:
nnoremap u:exec“打开”.getline(“。”)
要使用此映射,请从正常模式+ u键入您的Leader键。它应该读取光标下的行并在默认浏览器中打开它。
答案 5 :(得分:1)
将以下行添加到.vimrc文件中:
nmap <leader><space> yiW:!xdg-open <c-r>" &<cr>
因此在正常模式下按\它选择当前单词并在网络浏览器中将其作为地址打开。
默认情况下,领导者是\(但我已将其映射到let mapleader = ","
)。类似地,使用imap可以在插入模式下映射一些键序列(但是,如果它是2键序列,它可能会覆盖一些默认行为)。
答案 6 :(得分:0)
答案 7 :(得分:0)
这是@tungd在此处https://stackoverflow.com/a/9459366/7631731最初提出的脚本的一种改进版本。 保持vim上下文并正确处理包含“#”的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>¬
答案 8 :(得分:0)
As described由@kev修改,针对Linux环境进行了修改。
在旁边:当在我的终端中执行此功能(Vim 8.1)时,Vim屏幕被模糊处理(大部分为“空白”;即文本在那里但不可见)。 :redraw!
命令(请参阅https://stackoverflow.com/a/1117742/1904943)重新绘制屏幕。
添加到~/.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
答案 9 :(得分:0)
这很简单,只需将“ 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
答案 10 :(得分:0)
netrw
的人的解决方案这是在vim / neovim中删除netrw
(:help netrw-noload
)的人们的解决方案。例如,他们使用不同的文件管理器,例如vim-dirvish
?:!open <c-r><c-a>
或地图gx
:
?nmap gx :!open <c-r><c-a>
我也在寻找解决这个问题的方法,因为我实际上将netrw完全从vim中卸载了,并用vim-dirvish
代替了。与netrw
的(11,000+ LOC)相比,此插件具有 500〜LOC 。
我不使用远程编辑,所以vim-dirvish
足以管理我的工作流程(实际上比netrw
快〜作者声称是2倍,我觉得比这还快- 这真的是瞬时的 ⚡)在大型代码库/存储库中非常有用。我什至在一个10K的文件仓库中尝试了此操作,仍然可以通过-
列出文件! Someone tested vim-dirvish
against Nerdtree
,您可以看到不同之处。
我也放弃了vim-vinegar
是因为vim-dirvish仍然具有-
绑定,并且vim-vinegar
的大多数配置都是netrw
的细节。只是不需要它。两只鸟合在一块石头里!
此插件的优点在于它包含 VINE (Vim不是Emacs)的理念。它利用终端中其他程序的功能来进行文件操作,而不是尝试自己完成所有操作。重要的是这些外部程序与vim交互的自然程度。这是通过:Shdo
来实现的,它有一个方便的键.
(dot command(对于repeat命令来说是助记符),可以同时在选择或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
, 和朋友。结合不同的模式,充分发挥vim的威力。因此,不要只停留在一种模式下,而是要充分利用vim的全部功能。
?:!open <c-r><c-a>
注意!
,它指示利用vim之外的外部程序的功能。 藤!
如果您希望恢复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
我使用所有这三个平台,它们运作良好。您可以只使用其中之一进行vim绑定,例如。 :!open
,只是在bashrc/zshrc/fish config
命令的open
命令中使用别名,以表示所拥有的特定于平台的程序。
例如alias open = wslview
那样,我的vimrc
仍然与平台无关,而我将通过bashrc/zshrc/fish config
处理不一致之处。
答案 11 :(得分:0)
我从 netrw 中删除了所有不需要的代码,结果只有一行代码:
nnoremap <silent> gx :execute 'silent! !xdg-open ' . shellescape(expand('<cWORD>'), 1)<cr>
这个实现和netrw一样,只是更好。在 macOS 中将 xdg-open
替换为 open
,在 Windows 中将 start
替换。