语境
我目前使用 Vim 在 LaTeX 中撰写研究文章。我的文章中有 bibtex 密钥,例如,我的子\cite{smith2000sometopic}
文件夹中有大多数文章的相应 pdf 版本。~/lib
~/lib/topica/smith2000sometopic.pdf
目的
当我的光标位于 bibtex 键上时,我希望能够在 Vim 中按下一个键:
- 提取
bibtex-key
光标下的 - 执行搜索
bibtex-key.pdf
- 如果找到该文件,则在 pdf 查看器中打开该文件
- 如果没有找到该文件,说明是这种情况
问题
- 有人已经做过这样的事情了吗?
- 有没有什么例子对学习有用?
初步想法
我想我可以使用类似的东西:
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>