设为首页 收藏本站
查看: 822|回复: 0

[经验分享] 使用vim开发python及graphviz绘图

[复制链接]

尚未签到

发表于 2017-4-29 06:18:36 | 显示全部楼层 |阅读模式
基本需求
使用vim中的autocmd命令可以很容易的将正在编辑的文件与外部的程序关联起来,从而使得开发效率更高。比如经常会用到这样的功能:



  • 编写一段python脚本,需要快速的查看该脚本的运行结果(最好是能做到一键完成)
  • 使用dot脚本绘制系统的模块关系等,需要即时预览结果(比如调整色彩,模块间的连线等)

autocmd命令简介
通过vim的autocmd可以很容易的做到这点,比如按F5键,如果该文件是python脚本的话(以py结尾),就尝先将文件保存,然后调用系统中的python来执行当前脚本。


autocmd的命令格式为:


autocmd [group] {event} {pattern} [nested] {cmd}
 
group及nested均为可选参数,详情请参考:help autocmd. 意思是,当发生event时,对符合pattern的对象执行cmd命令。
示例及解释
比如自动调用python解释器来解释当前编辑的python脚本:


autocmd BufRead *.py nmap <F5> :w<CR>:!python %<CR><CR>
 
上边这条命令是指,当发生BufRead事件时,对匹配模式(*.py)的缓冲区,执行命令:


nmap <F5> :w<CR>:!python %<CR><CR>
 
而命令nmap <F5> :w<CR>:!python %<CR><CR>表示:在normal模式下,将F5键映射为:


:w<CR>:!python %<CR><CR>
 
其中<CR>模拟用户输入回车,!表示执行操作系统中的命令(因此,你需要将python的解释器放入PATH环境变量中,%表示当前的文件名。


BufRead事件发生在"开始编辑新缓冲区,读入文件后",即当vim加载文件完成之后,相当于注册了一个回调函数。因此上边的命令翻译过来就是:


当读入文件内容后,如果文件是是python脚本,就映射键F5为保存并执行。这样,当按F5键时,vim会自动保存文件,并将文件名作为python解释器的参数传递给python,启动一个shell来执行。


效果如下:

DSC0000.png
 
可以将上边这个脚本放入.vimrc或者_vimrc(windows下)。


同样,如果想在编辑dot脚本的时候,让vim帮你自动完成调用外部程序(dot)的话,可以这样:


autocmd BufRead *.dot nmap <F8> :w<CR>:!dot -Tpng -o %<.png % && start %<.png<CR><CR>
 
将F8映射为,先执行:


dot -Tpng -o result.png source.dot
然后在启动的shell中,执行start result.png, start是windows下command.exe的命令,用于重新启动一个shell,如果后边的文件有关联(我的系统中是picasa3),则使用该关联程序打开此文件,也就有了下面的这张图:

DSC0001.png
 


如果你有其他好用的工具,如unxutil的windows版本,也可以很容易的使用autocmd命令与vim绑起来,使得开发效率得到极大的提升。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-370532-1-1.html 上篇帖子: 在Python中使用ArcObjects对象 下篇帖子: python相关开发环境搭建介绍【转载】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表