【问题标题】:How to open pdf files under cursor (using 'gf') with external PDF readers in vim如何在vim中使用外部PDF阅读器打开光标下的pdf文件(使用'gf')
【发布时间】:2011-10-18 16:50:10
【问题描述】:

当前的 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 方式执行&lt;Ctrl-o&gt; 命令的方法。

谁能给我一个关于如何在autocmd&lt;Ctrl-O&gt; 的提示,或者直接建议一种更好的方法来使用 gf 打开 pdf 文件?

谢谢。

【问题讨论】:

    标签: vim autocmd


    【解决方案1】:

    那是因为autocmd 后面是一个 ex 命令(开头的 带冒号)。要模拟正常模式命令的执行,请使用 :normal 命令。问题是你不能通过&lt;C-O&gt;(而不是 &lt;Ctrl-O&gt;) 直接到:normal,它将被视为文字字符(

    1.插入文字^O字符

    使用controlvcontrolo得到一个:

    au BufEnter *.pdf normal! ^O
    

    2.使用:execute 构建您的命令

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

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

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

    au BufEnter *.pdf bdelete
    

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


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

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

    这个&lt;cfile&gt; 将扩展为光标下的文件。所以如果你想 在 Vim 中打开文件,使用 gf。如果你想用默认打开它 应用程序,使用 gO

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

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

    【讨论】:

    • 谢谢!您对 autocmd 的建议有效。然而,当我尝试使用 FoxitReader 的“gO”解决方案时(我在我的 Linux 发行版中没有找到等效的 open 程序),FoxitReader 只是报告“找不到文件”。 似乎没有正确展开。还有什么建议吗?
    • 很高兴帮助@Liang!在gO 不工作的情况下,gf 工作吗? &lt;cfile&gt; 应该是一样的。该文件可能不在您所在的当前目录或类似目录中。
    • 确实与路径问题有关!但是,gf 不会受到此问题的影响,而 gO 会受到影响。就我而言,我在~/papers/library.bib 中有一个 bibtex 文件,所有 pdf 文件都位于papers 的同一目录中。当我从$HOME 打开围兜文件时,gf 工作,gO 失败;当我从papers 目录打开它时,两种解决方案都有效。
    • 不幸的是,gO 解决方案在处理包含空格的文件名时会出现问题。
    • :bdelete 的窗口删除行为对我来说是不可接受的,我切换到github.com/qpkorr/vim-bufkill(它在不关闭窗口的情况下删除缓冲区)。
    【解决方案2】:

    如果默认应用是可以接受的,那么只需在 command 模式下使用:!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

    【讨论】:

    • 我使用了:nnoremap gO :!xdg-open &lt;cfile&gt;&lt;CR&gt;,它使用默认关联应用程序打开文件,但不是路径中带有@ 的文件,例如~/jim@webaddress.mail/paper.pdf 它只捕获@ 之后的位。 help &lt;cfile&gt; 不多说。 &lt;cfile&gt; 周围的引用,像这样的 "&lt;cfile&gt;" 没有帮助。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多