在MacOS下用Vim和Graphviz画流程图

自从Evernote上线了markdown功能之后,就开始使用脚本画各种图,几乎是停不下来的节奏。但是,Evernote中的Markdown功能化时序图比较好看,流程图画出来的效果比较丑陋。
所以,这里就找其他的脚本画图方案,比如,Graphviz、MetaPost和TikZ等。大概了解了下,后两种比较专业,学习曲线也比较陡峭。Graphviz比较好上手,这里大概做下介绍。

1、环境准备

这里是用MacOS命令行下的homebrew安装的,直接执行如下命令即可:

brew install graphviz

编辑器这里选的是MacVim,画图预览使用MacOS自带的预览应用。这里,需要在vimscript中增加如下配置:

" map the function key to preview the dot file
autocmd BufRead *.dot nmap  :w:!dot -Tpng -o %<.png % && open /Applications/Preview.app %<.png

该命令的意思是,当打开.dot格式的文件时,自动执行一个按键映射,将F8键映射为执行dot -Tpng -o %<.png % && open /Applications/Preview.app %<.png。也就是,先进行格式转换,将.dot格式的文件转化为.png格式,然后,用系统自带的预览应用打开这个图片。这样,我们在编辑绘图脚本的过程中,保存之后,按F8键就可以实时查看绘图的效果了。

2、画图的脚本语法

这里的脚本语法和Evernote中自带的Markdown画图中流程图(采用一个Mermaid的前端库实现)的语法差不多。上手很容易,这里直接给出一个例子:

digraph pic { 
  Start[shape=Mrecord, label="开始", color="green", fontcolor="green", height=0.1, width=0.6]
  End[shape=Mrecord, label="结束", color="green", fontcolor="green", height=0.1, width=0.6]
  JudgeFlag1[shape=diamond, label="XXXX?", color="green", fontcolor="green", width=0.1]
  CheckStatus[shape=diamond, label="CheckStatus", color="green", fontcolor="green", width=0.1]
  CommitOper2[shape=record,label="XX" style=filled, color="green"]
  CommitOper4[shape=box,label="XX", style=filled,color="1.0 0.3 1.0"]
  CommitOper3[shape=diamond,label="XX" style=filled]
  CommitOper[shape=record,label="XXXXX" style=filled, color="yellow"]
  End[shape=Mrecord, label="结束"]
  Edge[color="green"]
  Node[color="green"]
  Start -> JudgeFlag1
  JudgeFlag1 -> CommitOper[color="blue", label="Yes"]
  JudgeFlag1 -> CheckStatus[label="No"]
  CheckStatus -> CommitOper2[label="0"]
  CommitOper2 -> CommitOper4
  CheckStatus -> CommitOper4[label="1"]
  CommitOper4 -> CommitOper3
  CheckStatus -> CommitOper3[label="2"]
  CommitOper3 -> CommitOper[label="XXX", color="blue"]
  CommitOper3 -> End
  CommitOper -> End
}

最后,生成的效果图如下:


在MacOS下用Vim和Graphviz画流程图_第1张图片
Graphviz生成的流程图

你可能感兴趣的:(在MacOS下用Vim和Graphviz画流程图)