我是第一次使用Twitvim。看到其中的所有URL令我感到奇怪,有什么方法可以在您喜欢的浏览器或指定的浏览器中的光标下方打开URL?
我是第一次使用Twitvim。看到其中的所有URL令我感到奇怪,有什么方法可以在您喜欢的浏览器或指定的浏览器中的光标下方打开URL?
Answers:
更新:从今天tpope的推文
按gx
。您可以自定义浏览器。在Gnome和Mac OS X上,已经使用gnome-open
/ open
。通常,您可以设置g:netrw_browsex_viewer
任何所需的设置。
原始答案:
不记得我在哪里得到这个功能。网址中有一个带有井号(#)的错误,但该功能运行良好,因此我不会费心去修复它。
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则使用“ Web浏览器的路径”
gx
非常强大,谢谢!它还会使用适当的应用程序打开文件。
如果您使用的是Vim 7.4或更高版本,则在正常模式下,将光标置于URL下方,然后单击gx
,URL将在浏览器自动打开。
:h netrw_gx
:*对于Windows 32或64,使用url和FileProtocolHandler dll。*对于Gnome(具有gnome-open):使用gnome-open。*对于KDE(带有kfmclient):使用kfmclient *对于Mac OS X:使用open。*否则,将使用netrwFileHandler插件。
我使用此脚本keyword
在光标下方搜索gooogle :
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()
提取光标所在的网址。其余部分相同。
好的,所以使用@tungd和@kev的答案以及一些研究后,我最终得到了这个脚本,该脚本的工作方式与我需要的一样。就像@tungd所说的那样,#可以在URL中出现问题,但是我很酷,如果有人对URL有更好的表达,那么它将受到欢迎。
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>
我参加这个聚会已经很晚了,但这是在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进行。(这两个插件可在默认浏览器中打开url,而无需在Windows中创建通常需要的任何其他命令提示符或其他无聊的废话。您可以像这样在Vim中打开url::Open http://duckduckgo.com
尝试一下。您会喜欢的。)
创建一些vim映射,以便您可以快速将光标下方的行插入浏览器。我会将其映射到u(对我来说,这是,u
从正常模式开始的)。这是如何做:
nnoremap u:exec“打开” .getline(“。”)
要使用此映射,请从普通模式+ u键入Lead键。它应读取光标下方的行,并在默认浏览器中将其打开。
这是@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>¬
撇开:在我的终端中执行此功能(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
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
。这个插件具有围绕500〜LOC,相比netrw
的(11000 LOC) 。
我不使用远程编辑,所以vim-dirvish
功能强大到足以管理我的工作流程(实际上比netrw
〜声称作者快2倍,我觉得它比那还要快- 确实是瞬时 ⚡)在大型代码库/存储库上非常有用。我什至在一个10K的文件仓库中尝试了它,-
还可以即时列出文件!有人vim-dirvish
针对进行了测试Nerdtree
,您可以看到其中的区别。
我也放弃vim-vinegar
了,因为vim-dirvish仍然具有-
绑定,并且大多数配置vim-vinegar
都是netrw
特定的。只是不需要它。两只鸟合在一块石头里!
这个插件的优点在于它包含了VINE的理念(Vim不是Emacs)。它利用终端中其他程序的功能来进行文件操作,而不是尝试自己做所有事情。重要的是这些外部程序与vim交互的自然程度。这是通过来实现的:Shdo
,它具有一个方便的键.
(点命令,对于重复命令而言是助记符),既可以在选择上执行,也可以在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
没有正常绑定是有原因的。我很惊讶,大多数的解决方案没有利用命令的工作流程,我用ex命令了不少,: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
。