我想在 Neovim 中为 Graphviz 实现一个新的工作流程。本质上,我想编译 Graphviz 并使用 Evince 或 Zathura 在实时预览中显示结果。对于“.dot”文件,我进行了<leader>c
如下映射:
autocmd FileType dot nnoremap <silent> <leader>c :w <bar> :!neato '%' -Tpdf -o '%:r.pdf' && evince '%:r.pdf' & <CR>
这将保存文件,调用“neato”来编译图表,并在后台运行 Evince。虽然这可以按预期工作,但它会分散注意力,因为它会导致我从 Neovim 转向 Evince。有没有办法将注意力集中在 Neovim 上?我还担心可能会产生多个 Evince 的后台进程。会发生这种情况吗?
编辑(已解决):我最终使用 xdotool 解决了这个问题。首先,我保存了 Neovim 终端正在运行的窗口的 ID。然后,我启动了 Evince,短暂的停顿后,将焦点移回保存的窗口。
autocmd FileType dot nnoremap <silent> <leader>c :w <bar> :!neato '%' -Tpdf -o '%:r.pdf' && id=$(xdotool getwindowfocus);evince '%:r.pdf' & sleep 0.4; xdotool windowactivate $id <CR>