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

发布于 2024-12-10 11:38:29 字数 608 浏览 0 评论 0原文

当前的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

暖心男生 2024-12-17 11:38:29

这是因为 autocmd 后面的是一个 ex 命令(以
带冒号)。要模拟正常模式命令的执行,请使用
:normal 命令。问题是你不能传递 (而不是
) 直接转换为 :normal,它将被视为文字字符 (<,
然后是 C,然后是 r),这不是一个非常有意义的普通命令。你有两个
选项:

1.插入文字 ^O 字符

使用 controlvcontrolo 得到一个:

au BufEnter *.pdf normal! ^O

2.使用:执行 到构建您的命令

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

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

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

au BufEnter *.pdf bdelete

相反。不过我还有另一个解决方案给你。


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

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

将扩展到光标下的文件。所以如果你想
在 Vim 中打开文件,使用 gf。如果你想用默认打开
应用程序,使用gO

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

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

That's because what follows an autocmd is an ex command (the ones beginning
with 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:

au BufEnter *.pdf normal! ^O

2.Use :execute to Build Your Command

This way you can get a more readable result with the escaped sequence:

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

Anyway, this is not the most appropriate command. <C-O> just jumps to the
previous location in the jump list, so your buffer remains opened. I would do
something like:

au BufEnter *.pdf bdelete

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 if
other 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.

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

This <cfile> will be expanded to the file under the cursor. So if you want to
open 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:

:nnoremap gO :!FoxitReader <cfile> &<CR>
你的心境我的脸 2024-12-17 11:38:29

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

如果您想要在 正常 模式下工作的东西,那么您可以尝试类似以下的操作(我也使用它来打开 HTML文件),并修改为您自己的需要:


如果有('win32') ||有('win64')
autocmd FileType html nmapg :沉默!启动 Firefox "%";
elseif 有('mac')
autocmd FileType html nmapg :!open "%";
恩迪夫

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文