如何在vim下使用外部PDF阅读器在光标下打开pdf文件(使用'gf')

时间:2011-10-18 16:50:10

标签: vim autocmd

当前 g f 命令将打开* .pdf文件作为ascii文本。我想用外部工具(如okular,foxitreader等)打开pdf文件。我尝试使用autocmd来实现它:

au BufReadCmd *.pdf silent !FoxitReader % & "open file under cursor with FoxitReader
au BufEnter *.pdf <Ctrl-O> "since we do not really open the file, go back to the previous buffer

但是,第二个autocmd无法按预期工作。我无法找到以<Ctrl-o>方式执行autocmd命令的方法。

有人可以给我一个关于如何<Ctrl-O> autocmd的提示,或者直接建议用 g f f 打开pdf文件的更好方法KBD>

感谢。

2 个答案:

答案 0 :(得分:8)

那是因为autocmd之后的是一个ex命令(那些开始的命令) 用冒号)。要模拟正常模式命令的执行,请使用 :normal命令。问题是你不能通过<C-O>(而不是 <Ctrl-O>)直接发送到:normal,它将被视为文字字符(&lt;, 那么C,然后是r)这不是一个非常有意义的正常命令。你有两个 选项:

1.插入文字^ O字符

使用 control v control o 获取一个:

au BufEnter *.pdf normal! ^O

2.使用:execute构建命令

通过这种方式,您可以使用转义序列获得更可读的结果:

au BufEnter *.pdf exe "normal! \<c-o>"

无论如何,这不是最合适的命令。 <C-O>只是跳到了 跳转列表中的上一个位置,因此缓冲区保持打开状态。我会做 类似的东西:

au BufEnter *.pdf bdelete

相反。我还有另一种解决方案。


使用地图创建另一个命令,例如 gO 。然后使用您的PDF阅读器 如果你在MacOS X或Darwin中,可以直接使用open这样的实用工具(不确定是否 其他Unix系统拥有它,以及它如何调用)。它就像双击一样 作为参数传递的文件图标,因此它将打开您的默认PDF阅读器 或配置为默认打开任何文件的任何其他应用程序,如图像或 如此。

:nnoremap gO :!open <cfile><CR>

<cfile>将扩展到光标下的文件。所以,如果你想 在Vim中打开文件,使用 gf 。如果要使用默认值打开它 申请,使用 gO

如果您没有此命令或更喜欢仅使用PDF的解决方案,请创建地图 您的首选命令:

:nnoremap gO :!FoxitReader <cfile> &<CR>

答案 1 :(得分:0)

如果可接受默认应用程序,则只需在命令模式下使用:!open %即可。您始终可以在vim配置文件等中将其映射到合适的领导者组合。

如果您想要某种可以在普通模式下使用的功能,则可以尝试以下操作(我也用它来打开HTML文件),并根据自己的需要进行修改:

if has('win32') || has ('win64') autocmd FileType html nmap <Leader>g :silent ! start firefox "%"<cr> elseif has('mac') autocmd FileType html nmap <Leader>g :!open "%"<cr><cr> endif