6

当前gf命令将 *.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或者只是直接建议一种更好的方法来打开 pdf 文件gf

谢谢。

4

2 回答 2

8

那是因为autocmdan 后面是 ex 命令(以冒号开头的命令)。要模拟正常模式命令的执行,请使用该 :normal命令。问题是您不能将 a <C-O>(而不是 <Ctrl-O>)直接传递给:normal,它将被视为文字字符(<,然后是 C,然后是 r),这不是一个非常有意义的普通命令。你有两个选择:

1.插入文字^O字符

用于controlvcontrolo获得一个:

au BufEnter *.pdf normal! ^O

2.:execute用于构建你的命令

这样,您可以使用转义序列获得更具可读性的结果:

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

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

au BufEnter *.pdf bdelete

反而。我还有另一个解决方案给你。


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

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

<cfile>将扩展为光标下的文件。因此,如果您想在 Vim 中打开文件,请使用gf. 如果要使用默认应用程序打开它,请使用gO.

如果您没有此命令或更喜欢仅 PDF 的解决方案,请创建一个映射到您的首选命令:

:nnoremap gO :!FoxitReader <cfile> &<CR>
于 2011-10-18T17:38:22.650 回答
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

于 2018-07-03T01:28:10.587 回答