如何在vim中使用外部PDF阅读器打开光标下的pdf文件(使用“gf”)
当前的 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 未能按预期工作。我无法找到以 autocmd
方式执行
命令的方法。
任何人都可以给我一个关于如何在 autocmd
中
的提示,或者直接建议一种使用 gf?
谢谢。
The current gf command will open *.pdf files as ascii text. I want the pdf file opened with external tools (like okular, foxitreader, etc.). I tried to use autocmd to achieve it like this:
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
However, the second autocmd failed to work as expected. I could not figure out a way to execute <Ctrl-o>
command in a autocmd
way.
Could anyone give me a hint on how to <Ctrl-O>
in autocmd
, or just directly suggest a better way to open pdf files with gf?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是因为
autocmd
后面的是一个 ex 命令(以带冒号)。要模拟正常模式命令的执行,请使用
:normal
命令。问题是你不能传递
(而不是
) 直接转换为:normal
,它将被视为文字字符 (<,然后是 C,然后是 r),这不是一个非常有意义的普通命令。你有两个
选项:
1.插入文字 ^O 字符
使用 controlvcontrolo 得到一个:
2.使用
:执行
到构建您的命令通过这种方式,您可以使用转义序列获得更具可读性的结果:
无论如何,这不是最合适的命令。
只是跳转到跳转列表中的上一个位置,因此您的缓冲区保持打开状态。我会做
比如:
相反。不过我还有另一个解决方案给你。
使用地图创建另一个命令,例如 gO。然后使用您的 PDF 阅读器
直接打开,或者如果您使用的是 MacOS X 或 Darwin,则可以使用
open
之类的实用程序(不确定是否可以)其他 Unix 系统也有它,以及它的名称)。就像双击一样
作为参数传递的文件的图标,因此它将打开您的默认 PDF 阅读器
或任何其他配置为默认打开任何文件的应用程序,例如图像或
所以。
此
将扩展到光标下的文件。所以如果你想在 Vim 中打开文件,使用 gf。如果你想用默认打开
应用程序,使用gO。
如果您没有此命令或更喜欢纯 PDF 解决方案,请创建一个地图
您的首选命令:
That's because what follows an
autocmd
is an ex command (the ones beginningwith a colon). To simulate the execution of a normal mode command, use the
:normal
command. The problem is that you can't pass a<C-O>
(and not<Ctrl-O>
) directly to:normal
, it will be taken as literal characters (<,then C, then r) which is not a very meaningful normal command. You have two
options:
1.Insert a literal ^O Character
Use controlvcontrolo to get one:
2.Use
:execute
to Build Your CommandThis way you can get a more readable result with the escaped sequence:
Anyway, this is not the most appropriate command.
<C-O>
just jumps to theprevious location in the jump list, so your buffer remains opened. I would do
something like:
Instead. Still I have another solution for you.
Create another command with a map, say gO. Then use your PDF reader
directly, or a utility like
open
if you're in MacOS X or Darwin (not sure ifother Unix systems have it, and how it's called). It's just like double clicking
the icon of the file passed as argument, so it will open your default PDF reader
or any other application configured to open any file by default, like images or
so.
This
<cfile>
will be expanded to the file under the cursor. So if you want toopen the file in Vim, use gf. If you want to open it with the default
application, use gO.
If you don't have this command or prefer a PDF-only solution, create a map to
your preferred command:
如果默认应用程序可以接受,则只需在命令模式下使用
:!open %
即可。您始终可以将其映射到 vim 配置文件等中合适的领导者组合。如果您想要在 正常 模式下工作的东西,那么您可以尝试类似以下的操作(我也使用它来打开 HTML文件),并修改为您自己的需要:
如果有('win32') ||有('win64')
autocmd FileType html nmap
elseif 有('mac')
autocmd FileType html nmap
恩迪夫
If the default app is acceptable, then simply using
:!open %
in command mode works. You can always map this to a suitable leader combination in your vim config file etc.If you want something that works with normal mode, then you could try something like the following (i use this too for opening HTML files), and modify to your own needs:
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