PlantUML 定义了绘制 UML 图的语法, 可以通过纯文本的方式绘制 UML 图. graphviz
定义了绘制一般图形的语法, 可以通过纯文本的方式绘图. 实际上, PlantUML 依赖于
graphviz.
关于 PlantUML 详细情况, 参见 http://www.plantuml.com/.
关于 graphviz 详细情况, 参见 http://www.graphviz.org/.
在 vim 中通过写文本的方式绘制 uml 图和框图时, 可能需要随时查看当前图样的效果.
这可以通过 PlantUML 和 graphviz 的 vim 插件提供的 Ex 命令调用.
我更倾向于通过定义一个快捷键来调用那些 Ex 命令.
下面是定义绘制 UML 图的快捷键:
" vim: ft=vim
if exists("g:loaded_dzfplantuml_syntax")
finish
endif
let g:loaded_dzfplantuml_syntax = 1
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 对 plantuml 文件绘制图片
function! UmlImageUpdate() abort
" 先保存再执行命令
let cmd = "w | !plantuml " . fnameescape(expand('%:t'))
exec cmd
endfunction
" 对 plantuml 文件绘制图片, 并调用缺省的图片浏览器进行查看
function! UmlImageShow() abort
let l:viewer='xdg-open'
if has('mac')
let l:viewer='open'
endif
call UmlImageUpdate()
exec '!'.l:viewer.' '.expand('%:r').'.png'
endfunction
com! -nargs=0 UmlImageUpdate :call UmlImageUpdate()
com! -nargs=0 ViewUmlImage :call UmlImageShow()
nnoremap <silent> <buffer> <localleader>pu :UmlImageUpdate<CR><CR>
nnoremap <silent> <buffer> <localleader>pv :ViewUmlImage<CR><CR><CR>
下面是定义绘制 dot 图的快捷键:
" vim: ft=vim
if exists("g:loaded_dzfwmgraphviz")
finish
endif
let g:loaded_dzfwmgraphviz = 1
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 对 dot 文件绘制图片. wmgraphviz 插件的默认快捷方式为 <localleader>ll
nnoremap <silent> <buffer> <localleader>gu :GraphvizCompile<CR><CR>
" 对 dot 文件绘制图片, 并调用缺省的图片浏览器进行查看
" wmgraphviz 插件的默认快捷方式为 <localleader>lv
nnoremap <silent> <buffer> <localleader>gv :GraphvizShow<CR><CR><CR>
" 设置 graphviz 输出图片格式
let g:WMGraphviz_output="png"
之后, 在 vim 写好 UML 绘制代码后, 按 <leader>pv
可以查看绘制样图,
若修改了代码后, 按 <leader>pu
来更新样图. 对于 dot 图, 按 <leader>gv
来查看样子图.
对于 pandoc 文档, pandoc-markdown 原生支持 PlantUML 语法和 graphviz 语法,
作为代码块插入绘制代码即可. 要更好的支持由代码生成的图片插入到目标文档中,
可能要编写 pandoc 过滤器. 关于 pandoc 过滤器, 可以参考我的另一篇 pandoc
中编写图片居中过滤器.