美文网首页PM&&Designweb开发IT
使用 Sublime + PlantUML 高效地画图

使用 Sublime + PlantUML 高效地画图

作者: kamidox | 来源:发表于2015-12-11 21:00 被阅读59608次

程序员难免要经常画流程图,状态图,时序图等。以前经常用 visio 画,经常为矩形画多大,摆放在哪等问题费脑筋。有时候修改文字后,为了较好的显示效果不得不再去修改图形。今天介绍的工具是如何使用 Sublime + PlantUML 的插件画流程图,状态图,时序图等。这是一种程序员看了就会爱上的画图方式:自然,高效。

什么是 PlantUML

PlantUML 是一个画图脚本语言,用它可以快速地画出:

  • 时序图
  • 流程图
  • 用例图
  • 状态图
  • 组件图

简单地讲,我们使用 visio 画图时需要一个一个图去画,但使用 PlantUML 只需要用文字表达出图的内容,然后就可以直接生成图片。看一个最简单的例子:

Bob -> Alice : Hello, how are you
Alice -> Bob : Fine, thank you, and you?
demo

软件安装

这些软件全部是开源或共享软件,不存在版权问题,可以放心使用。

  • 安装 Sublime
    Sublime 是个强大的可扩展的文本编辑器。进入官网下载对应操作系统下的版本安装即可。
  • 安装 graphviz
    graphviz 是个开源的图片渲染库。安装了这个库才能在 Windows 下实现把 PlantUML 脚本转换为图片。
  • 安装 PlantUML for Sublime 插件
    有了这个插件后,我们就可以在 Sublime 里写 PlantUML 脚本,然后直接通过一个快捷键生成图片。安装步骤如下
    • 下载插件,并解压
    • 通过 Preferences -> Browse Packages ... 打开 sublime 的 Packages 目录,解压后的插件放在 Packages 目录下
    • 重启 Sublime

为了简化使用,可以在 Sublime 里配置个快捷键。打开 Preferences -> Key Binding - User,添加一个快捷键:

{ "keys": ["alt+d"], "command": "display_diagrams"}

上面的代码配置成按住 Alt + d 来生成 PlantUML 图片,你可以修改成你自己喜欢的按键。

效果检验

最后检验一下工作安装是否正确。打开 Sublime 输入:

Bob -> Alice : Hello, how are you
Alice -> Bob : Fine, thank you, and you?

选中这些文本内容,按 Alt + d 会在当前工作目录下生成这个图片文件,同时自动弹出窗口显示图片。

注意事项

  • Sublime Text 3 安装失败问题
    安装plantUML插件时,出现 unable to load diagram plugin,check console for details. 把例子粘过来 alt+D 时显示nothing to process. 刚刚找到了解决办法:原因是下载的插件里无法加载文件:Diagram.sublime-settings,其中第三行将编码方式"charset": null改为"charset": "UTF-8",关掉sublime Text 3重启即可。感谢 @niminote 提供的解决方案。
  • 按 Alt + d 前需要让要生成图片的 PlantUML 脚本处于选中状态,否则会提示 No diagrams overlap selections 。留言里有不止一位同学犯了这个错误。

PlantULM 快速入门

时序图

@startuml

title 时序图

== 鉴权阶段 ==

Alice -> Bob: 请求
Bob -> Alice: 应答

== 数据上传 ==

Alice -> Bob: 上传数据
note left: 这是显示在左边的备注

Bob --> Canny: 转交数据
... 不超过 5 秒钟 ...
Canny --> Bob: 状态返回
note right: 这是显示在右边的备注

Bob -> Alice: 状态返回

== 状态显示 ==

Alice -> Alice: 给自己发消息

@enduml
sequence diagram

TIPS:

  • 使用 title 来指定标题
  • '->' 和 '-->' 来指示线条的形式
  • 在每个时序后面加冒号 : 来添加注释
  • 使用 note 来显示备注,备注可以指定显示在左边或右边
  • 使用 == xxx == 来分隔时序图
  • 使用 ... 来表示延迟省略号
  • 节点可以给自己发送消息,方法是发送方和接收方使用同一个主体即可

用例图

@startuml

left to right direction
actor 消费者
actor 销售员
rectangle 买单 {
消费者 -- (买单)
(买单) .> (付款) : include
(帮助) .> (买单) : extends
(买单) -- 销售员
}

@enduml
use case

TIPS:

  • 用例图
    • 用例图是指由参与者(Actor)、用例(Use Case)以及它们之间的关系构成的用于描述系统功能的静态视图
    • 百度百科上有简易的入门资料,其中用例之间的关系 (include, extends) 是关键
  • 使用 actor 来定义参与者
  • 使用括号 (xxx) 来表示用例,用例用椭圆形表达
  • 使用不同的线条表达不同的关系。包括参与者与用例的关系,用例与用例的关系

流程图

@startuml

title 流程图

(*) --> "步骤1处理"
--> "步骤2处理"
if "条件1判断" then
    ->[true] "条件1成立时执行的动作"
    if "分支条件2判断" then
        ->[no] "条件2不成立时执行的动作"
        -> === 中间流程汇总点1 ===
    else
        -->[yes] === 中间流程汇总点1 ===
    endif
    if "分支条件3判断" then
        -->[yes] "分支条件3成立时执行的动作"
        --> "Page.onRender ()" as render
        --> === REDIRECT_CHECK ===
    else
        -->[no] "分支条件3不成立时的动作"
        --> render
    endif
else
    -->[false] === REDIRECT_CHECK ===
endif

if "条件4判断" then
    ->[yes] "条件4成立时执行的动作"
    --> "流程最后结点"
else
endif
--> "流程最后结点"
-->(*)

@enduml
activity diagram

上面的流程图写的时候还是挺直观的,但画出来的图片渲染效果不好,对逻辑的显示不清楚。由于这个原因 PlantUML 实现了另外版本的流程图脚本。

下面是 PlantUML 支持的新版本的流程图脚本,从使用角度来讲,更直观,画出来的图片也更漂亮,推荐使用。

@startuml

start
:"步骤1处理";
:"步骤2处理";
if ("条件1判断") then (true)
    :条件1成立时执行的动作;
    if ("分支条件2判断") then (no)
        :"条件2不成立时执行的动作";
    else
        if ("条件3判断") then (yes)
            :"条件3成立时的动作";
        else (no)
            :"条件3不成立时的动作";
        endif
    endif
    :"顺序步骤3处理";
endif

if ("条件4判断") then (yes)
:"条件4成立的动作";
else
    if ("条件5判断") then (yes)
        :"条件5成立时的动作";
    else (no)
        :"条件5不成立时的动作";
    endif
endif
stop
@enduml
active diagram 2

TIPS:

  • 使用 start 来表示流程开始,使用 stop 来表示流程结束
  • 顺序流程使用冒号和分号 :xxx; 来表示
  • 条件语句使用 if ("condition 1") then (true/yes/false/no) 来表示
  • 条件语句可以嵌套

组件图

我们经常使用组件图来画部署视图,或者用来画系统的拓扑结构图。

@startuml

package "组件1" {
    ["组件1.1"] - ["组件1.2"]
    ["组件1.2"] -> ["组件2.1"]
}

node "组件2" {
    ["组件2.1"] - ["组件2.2"]
    ["组件2.2"] --> [负载均衡服务器]
}

cloud {
    [负载均衡服务器] -> [逻辑服务器1]
    [负载均衡服务器] -> [逻辑服务器2]
    [负载均衡服务器] -> [逻辑服务器3]
}

database "MySql" {
    folder "This is my folder" {
        [Folder 3]
    }

    frame "Foo" {
        [Frame 4]
    }
}

[逻辑服务器1] --> [Folder 3]
[逻辑服务器2] --> [Frame 4]
[逻辑服务器3] --> [Frame 4]

@enduml
component diagram

TIPS:

  • 使用方括号 [xxx] 来表示组件
  • 可以把几个组件合并成一个包,可以使用的关键字为 package, node, folder, frame, cloud, database。不同的关键字图形不一样。
  • 可以在包内部用不同的箭头表达同一个包的组件之间的关系
  • 可以在包内部直接表达到另外一个包内部的组件的交互关系
  • 可以在流程图外部直接表达包之间或包的组件之间的交互关系

状态图

我们一般使用状态图来画状态机。

@startuml

scale 640 width

[*] --> NotShooting

state NotShooting {
    [*] --> Idle
    Idle --> Processing: SignalEvent
    Processing --> Idle: Finish
    Idle --> Configuring : EvConfig
    Configuring --> Idle : EvConfig
}

state Configuring {
    [*] --> NewValueSelection
    NewValueSelection --> NewValuePreview : EvNewValue
    NewValuePreview --> NewValueSelection : EvNewValueRejected
    NewValuePreview --> NewValueSelection : EvNewValueSaved
    state NewValuePreview {
        State1 -> State2
    }
}

@enduml
State Diagram

TIPS:

  • 使用 [*] 来表示状态的起点
  • 使用 state 来定义子状态图
  • 状态图可以嵌套
  • 使用 scale 命令来指定生成的图片的尺寸

总结

不需要去记这些标记,在需要的时候去使用它,通过不断地使用来熟悉不同的图的语法。可以下载 PlanUML 官方文档 作为参考,遇到问题的时候翻一翻,这样很快就可以学会使用 PlantUML 高效地画图。

相关文章

网友评论

  • 033f2db6a46b:plantuml,感谢书主,这工具有点爽
  • xiaoke_donkey:我都是使用 idea IDE + plantuml 插件来画,特方便
  • e1bff2a5f918:快捷键冲突,我用的插件默认的alt+m,但是按下快捷键后没反应啊
  • f24bb1a26338:如果你们还有人能看到这个评论。建议你们写代码的文件,不要使用.txt
    使用.rb (也就是ruby的文件格式,ruby也是脚本语言)在sublime 下关键字都有高亮提示。
  • Alien的小窝:非常感谢,好文要顶
  • lilongthinker:现在还是atom+它的plantuml 更好用些
  • 浪花易逝:一直困扰于线线框框的对齐和摆列,这个是真的不错。
  • 喵叔catuncle:Sublime的plantuml插件有点鸡肋。用chrome插件吧“plantuml viewer”,自动刷新用得多爽!
    喵叔catuncle:最近发现一个问题,如果uml文件比较大,用chrome插件“plantuml viewer”会比较慢。那么,可以从官网下载plantuml.jar,然后在本机生成文件。
    李剑飞的简书:记得在插件中勾选:允许访问文件网址
    kamidox:@喵叔catuncle 赞~~
  • jdzhangxin:我也写了一个PlantUML,来看一下吧 :smile:

    http://www.jianshu.com/p/d5fd9133c78a
  • 汪国成:我的Sublime Text 3怎么搞都不行。
    报错信息:
    Viewer Setting: Preview
    Loading processor class: <class 'sublime_diagram_plugin-master.diagram.plantuml.PlantUMLProcessor'>
    Unable to load processor: <class 'sublime_diagram_plugin-master.diagram.plantuml.PlantUMLProcessor'>
    Traceback (most recent call last):
    File "C:\Users\wgc\AppData\Roaming\Sublime Text 3\Packages\sublime_diagram_plugin-master\diagram\__init__.py", line 44, in setup
    proc.load()
    File "C:\Users\wgc\AppData\Roaming\Sublime Text 3\Packages\sublime_diagram_plugin-master\diagram\plantuml.py", line 56, in load
    self.check_dependencies()
    File "C:\Users\wgc\AppData\Roaming\Sublime Text 3\Packages\sublime_diagram_plugin-master\diagram\plantuml.py", line 70, in check_dependencies
    raise Exception("can't find Java")
    Exception: can't find Java
    error: Unable to load diagram plugin, check console for details.
    Traceback (most recent call last):
    File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 120, in reload_plugin
    m.plugin_loaded()
    File "C:\Users\wgc\AppData\Roaming\Sublime Text 3\Packages\sublime_diagram_plugin-master\diagram_plugin.py", line 26, in plugin_loaded
    setup()
    File "C:\Users\wgc\AppData\Roaming\Sublime Text 3\Packages\sublime_diagram_plugin-master\diagram\__init__.py", line 51, in setup
    raise Exception('No working processors found!')
    Exception: No working processors found!
    generating syntax summary

    我的环境是:win10 + JDK 8 + Sublime Text 3
  • zzzhan:直观的不用,却用起这个。有点反人类
  • 大苍狗:好文,多谢分享。
    另外,关于#注意事项#中对"unable to load diagram plugin,check console for details"的问题不能按您说的“改变charset: UTF-8”的方法一概而论。
    应该按提示“check console for details”,分析console中的log记录,不同问题不同解决。
    望采纳!
  • qianmoQ:不错以前用过
  • 每晚一句安:又get了sublime的一个新功能,多谢
  • Twistack:windows 8.1 + sublime 3
    解决unable to load plugin,除了:Diagram.sublime-settings,其中第三行将编码方式"charset": null改为"charset": "UTF-8"外,
    假如Graphviz不是安装在默认目录下的话,需要“这台电脑”→右键“属性”→左侧栏“高级系统设置”→“高级”→右下角"环境变量"→系统变量 新建 →变量名“GRAPHVIZ_DOT”,变量值“E:\Graphviz2.38\bin\dot.exe”(这个是你安装的目录,我是安装在e盘下)
  • 212aa27edb05:unable to load diagram plugin,check console for details 修改"charset": "UTF-8"还是不管用
  • 212aa27edb05:感谢分享
  • dugangabc:好东西
  • e06202ec97f8:很有用
  • 师数:很不错的工具, 但是生成的图片分辨率太低了。有办法调整这个插件生成图片的大小么?
    kamidox:@吉辰 你查一下plantuml文档。用scale命令可以。
  • xinbinhaha:安装没有提示错误,选中文本,但是按了Alt+d没反应,有没有遇到这种情况的?怎样解决?
    xinbinhaha:@xinbinhaha 自己换了一下快捷键改为Alt + M可以了
  • 静默核潜艇:好东西
  • fd5ec20308c2:这个不错,还可以使用git或svn管理
  • 其心:感谢。
  • 云端漫步的太阳:这个工具有点意思,有点虐心
  • 不在简书的Coder:这个装起来还真是费劲啊,总算搞定了。分享一些经验:
    在使用sublime安装之前确保你的电脑有安装java(不要忘了配置环境变量)和graphviz(必须使用默认路径安装);
    安装插件的方法,可参考@niminote 提供的链接http://blog.yourtion.com/use-plantuml-on-mac.html?hmsr=toutiao.io&amp;amp
    good luck.
    lisSilence:亲测有用!顶上去!安装最新版java,graphviz用默认安装路径!
  • c83a96d6ab1b:非常棒
  • dofine:unable to load plugin 错误,Windows + ST 3 今天解决了:
    我用的是 zip 版的,解压缩之后把 graphviz\bin 目录加入系统 PATH,只有这一步还不够,还要添加一个系统环境变量 GRAPHVIZ_DOT,值设定为 graphviz\bin\dot.exe 的路径。之后可能需要重启一下电脑。
    dofine:@遠行客 在…现在还是不可以吗…
    81a69dc5f03e:你好,还在吗?我依然没有解决这个问题 :sob: 求指导
    kamidox:@dofine 赞👍🏻
  • lovexiaov:赞:+1:🏻,貌似很强大,明天试试
  • dofine:unable to load plugin 的错误依然没有搞定。。
    dofine:@影刃 我在 Windows 上搞定了!~~ST3~
    kamidox:@影刃 我Mac上也用了啊,用st2一次就成功了。这种事要是电脑在手边,就比较容易搞定。用文字难度太大。爱莫能助啊
    5c8c70235cbb:@dofine 我也是,在Mac 上好麻烦,求大神指引!
  • af873f6a5b21:非常高
  • 梅独苏:实在太好了
  • e9a44a336dfe:猛然觉得很凶
  • 迦度蓝洛:graphviz链接打不开
    kamidox:@迦度蓝洛 那你看一下console看看提示什么错,然后搜索一下。我是在ST2上用的
    迦度蓝洛:@kamidox ST3装了插件后提示unable to load diagram plugin,check console for details
    kamidox:@迦度蓝洛 我试了,可以呀。你也可以搜索下,直接打开官网。
  • 过往的风:mark。。谢楼主
  • 8c7fcc16a0eb:原来还有如此用途。牛
  • 1501eeeec0a1:好东西
  • a1833d3b6759:Markdown也能实现流程图
  • franz_cui:这个好
  • ColdRomantic:感觉中文字体有点难看,能自定义中文字体吗? :blush:
    kamidox:@yibcs 正解
    ColdRomantic:@kamidox skinparam defaultFontName 宋体 /*可以指定默认字体*/
    kamidox:@yibcs 文章里的图片是用plantuml服务器生成的图片,中文字体确实不好看。实际使用时是用系统字体的。
  • 冷侃:好东西
  • a567d77687ed:这些功能visio完全都可以实现,而且复杂度也差不多……
  • 0a396adf3552:謝謝您,很實用。
  • 583e0411938e:貌似mac不能适用?
    kamidox:@影刃 你用鼠标选择要转换为图片的 PlantUML 文本,然后再按 alt + M试一下。
    5c8c70235cbb:@kamidox Mac下alt+M 渲染提示这句话“No diagrams overlap selections.Nothing to process.”是没安装成功吗?具体是哪里没安装成功?求指教,多谢!
    kamidox:@Mr_Hannibal Mac win我都用过。
  • 8a515b588ff7:sublime不是开源的
  • ctycheer:学习了,专业工具办专业事
  • 6ad3ed73193e:很不错!
  • 998eddf8739d:好像不错的样子
  • FlatMan:good
  • 11d9ed2d2286:对于我来说画流程图还是挺有用的,但是 都一定要控制好缩进啊 感觉是个坑给他
  • 田靖荣:看到这篇文章简直就是发现了宝藏!
  • a3dbadac0f13:学习下,貌似很强大
  • 74a1f8973238:好赞好赞,支持一下
  • 9675cdfccb33:这是在锻炼自己的文字化逻辑思维能力吗?
    kamidox:@行近远山 这个评论讲到本质了。用文字来编程,最后生成图片。
  • 曾樑:还是习惯用Omni Graffle

本文标题:使用 Sublime + PlantUML 高效地画图

本文链接:https://www.haomeiwen.com/subject/yvvyhttx.html