在 Vim 中打开 bibtex 键对应的 pdf 的脚本

在 Vim 中打开 bibtex 键对应的 pdf 的脚本

语境

我目前使用 Vim 在 LaTeX 中撰写研究文章。我的文章中有 bibtex 密钥,例如,我的子\cite{smith2000sometopic}文件夹中有大多数文章的相应 pdf 版本。~/lib~/lib/topica/smith2000sometopic.pdf

目的

当我的光标位于 bibtex 键上时,我希望能够在 Vim 中按下一个键:

  1. 提取bibtex-key光标下的
  2. 执行搜索bibtex-key.pdf
  3. 如果找到该文件,则在 pdf 查看器中打开该文件
  4. 如果没有找到该文件,说明是这种情况

问题

  • 有人已经做过这样的事情了吗?
  • 有没有什么例子对学习有用?

初步想法

我想我可以使用类似的东西:

 gnome-open `find ~/lib/ -iname "smith2000sometopic.pdf" | head -1`

然后用一些 Vimscript 进行实验来微调交互;但如果有人有任何例子或建议,我们将不胜感激。

答案1

也许,我应该在发帖之前再坚持一段时间,但任何改进的建议仍然非常受欢迎。

最后我发现了这个来自 vimtips 的有用文档

这是我写的 Vim 函数:

function! OpenBibtexPDF()
    let s:word = expand("<cword>")
    let s:cmd = "!gnome-open `find ~/lib/ -iname '" . s:word . ".pdf' | head -1`"
    execute s:cmd
endfunction 
map <silent> <leader>bb :call OpenBibtexPDF()<cr>

答案2

根据杰罗米·安格利姆的回答,我修改了一些他的代码。

这可以在没有 gnome 的情况下使用,它使用“zenity”来显示错误,并使用 zathura 作为 pdf 查看器(只需将其更改为您喜欢的任何一个)。我还添加了双击单词的映射(即使使用鼠标不是 vim 思维模式)

function! OpenBibtexPDF()
    let s:word = expand("<cword>")
    let s:cmd = 'silent !pathfile=$(find ~/lib -iname "' . s:word . '*.pdf" -print -quit 2>/dev/null); [ -z "$pathfile" ] && zenity --info --width=250 --text="Pdf related to this this entry is not found" || zathura "$pathfile" >/dev/null &'
    execute s:cmd | redraw!
endfunction 
map <silent> <leader>bb :call OpenBibtexPDF()<cr>
map <silent> <2-LeftMouse> :call OpenBibtexPDF()<cr>

相关内容