vim插件开发之python-helloworld插件

简介: vim插件开发之python-helloworld插件

前言

经过上一篇文章的vim插件开发之helloworld插件,我们学习到了如何开发一个简单的vim插件helloworld插件,该插件功能非常简单,只是打印一条语句“hello,world”,麻雀虽小,

但五脏俱全,通过该示例我们了解了vim插件开发的基本流程。helloworld插件中,我们发现vim language的语法有点奇怪,和我们平时工作使用的语言有点不一样,这时我们就心想如果能够使用我们平常熟悉的语言来做vim插件开发,那就太好了,一方面效率比较高,另外一方面也节省了学习新语法的时间,可以更加深入的掌握自己所熟悉的语言。


很高兴的告诉您,您是可以这样做的,只要您的vim支持该类语言的开发即可。如何确定你的vim是否支持如python,perl 等之类的语言的特性呢?输入如下命令:

vim --version

以下是我的机器上,该命令的输出结果

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled May 14 2013 13:18:26)
Included patches: 1-415, 417-944
Modified by <bugzilla@redhat.com>
Compiled by <bugzilla@redhat.com>
Huge version without GUI.  Features included (+) or not (-):
+arabic          +file_in_path    +mouse_sgr       +tag_binary
+autocmd         +find_in_path    -mouse_sysmouse  +tag_old_static
-balloon_eval    +float           +mouse_urxvt     -tag_any_white
-browse          +folding         +mouse_xterm     -tcl
++builtin_terms  -footer          +multi_byte      +terminfo
+byte_offset     +fork()          +multi_lang      +termresponse
+cindent         +gettext         -mzscheme        +textobjects
-clientserver    -hangul_input    +netbeans_intg   +title
-clipboard       +iconv           +path_extra      -toolbar
+cmdline_compl   +insert_expand   +perl            +user_commands
+cmdline_hist    +jumplist        +persistent_undo +vertsplit
+cmdline_info    +keymap          +postscript      +virtualedit
+comments        +langmap         +printer         +visual
+conceal         +libcall         +profile         +visualextra
+cryptv          +linebreak       +python/dyn      +viminfo
+cscope          +lispindent      -python3         +vreplace
+cursorbind      +listcmds        +quickfix        +wildignore
+cursorshape     +localmap        +reltime         +wildmenu
+dialog_con      -lua             +rightleft       +windows
+diff            +menu            +ruby/dyn        +writebackup
+digraphs        +mksession       +scrollbind      -X11
-dnd             +modify_fname    +signs           -xfontset
-ebcdic          +mouse           +smartindent     -xim
+emacs_tags      -mouseshape      -sniff           -xsmp
+eval            +mouse_dec       +startuptime     -xterm_clipboard
+ex_extra        +mouse_gpm       +statusline      -xterm_save
+extra_search    -mouse_jsbterm   -sun_workshop    
+farsi           +mouse_netterm   +syntax          
   system vimrc file: "/etc/vimrc"
     user vimrc file: "$HOME/.vimrc"
      user exrc file: "$HOME/.exrc"
  fall-back for $VIM: "/etc"
 f-b for $VIMRUNTIME: "/usr/share/vim/vim73"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H   -I/usr/local/include  -O2 -g -pipe -Wall  -fexceptions -fstack-protector --param=ssp-buffer-size=4  -m64 -mtune=generic -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64  -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1      
Linking: gcc   -L. -Wl,-z,relro -rdynamic -Wl,-export-dynamic  -Wl,--enable-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE  -Wl,-z,relro  -L/usr/local/lib -Wl,--as-needed -o vim        -lm -lnsl  -lselinux  -lncurses -lacl -lattr -lgpm -ldl   -Wl,--enable-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE  -fstack-protector  -L/usr/lib64/perl5/CORE -lperl -lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc

从上述我们可以看到,支持的一些特性有:+perl, +python/dy, +ruby/dyn等等,所以我们完全可以使用这类语言来进行开发。

选择python的原因

为什么本篇文章我们选择python来介绍呢,主要有以下方面的原因:

python语法比较简洁,简单,自从使用python的第一天就喜欢上了该语言,虽然一开始会有点不适应,但经过一段时间的训练之后,很快就适应并喜欢上该语言;

python提供的库比较丰富,尤其是某些库的api设计的非常好,非常简洁,对于开发者来说,调用起来非常简单,但也有一些设计的非常ugly的库,比较著名的有urllib;

利用python写的著名vim插件也比较多,方便以后我们可以定制别人写的插件,从而做到更好的定制插件;

开发某类应用程序比较快速。

开发流程

经过上述描述之后,您一定想快速了解如何在vim插件开发中使用python语言?不急,听我python-helloworld插件慢慢道来:

既然要开发python-helloworld插件,那么我们首先用python写一个helloworld(),打印"hello,world",如下:

1. def helloworld():
2. print "hello,world"

python这块我们做好了,那么如何在vim插件中调用该方法呢?

接下来我们主要有两个工作,一是定义一个Helloworld命令,另外一个是将上述的python代码嵌入到vim插件中。

我们先来说第二个问题吧,这个比较简单,具体的嵌入如下所示:

python << EOF
def helloworld():
    print "hello,world"
EOF

在“python << EOF”和“EOF”之间加入我们的python代码就可以了,是不是很简单,那么如何定义命令并调用我们的helloworld方法呢,其实也很简单,请继续阅读:

command! -nargs=0 Helloworld exec('py helloworld()')

其实上面的代码已经非常明了怎么做了,不过还是简单的说下吧。


command! 表示定义一条vim中的命令;


-nargs=0表示命令行参数为0,即没有命令参数;


Helloworld为具体的命令名称,首字母大写;


exec('py helloworld()') 执行python代码并调用helloworld()函数;


注:关于上述-nargs=0这块有必要说明一下,因为这里面有一个比较trick的地方,保不准你今后遇到了,查资料都比较难查。当命令行没有参数的时候,自然会想到-nargs=0,如果有一个参数,那么自然-nargs=1,当有2个参数呢,是不是就是-nargs=2呢?如果你实验了,就会知道,此时报错了,报错说2是无效的数字,所以当有2个或2个以上的参数时,和我们平时想得就不太一样。当遇到这个问题的时候,我们自然会google,baidu,bing,当你在网上搜索的时候,发现根本就找不到类似的问题,只找到一个可怜的信息,在vim中输入:help command,最后果然在这里面我们找到了答案:

-nargs=0    No arguments are allowed (the default)
         -nargs=1    Exactly one argument is required
         -nargs=*    Any number of arguments are allowed (0, 1, or many)
         -nargs=?    0 or 1 arguments are allowed
         -nargs=+    Arguments must be supplied, but any number are allowed

当我看到上述信息的时候,如获珍宝啊。


至此,完成所有工作,接下来就是使用该插件了,具体如何使用插件,请参考上一篇文章 vim插件开发之helloworld插件

结论

本文主要介绍了使用python来做vim插件的开发的流程和相关信息,并介绍了使用python来做helloworld插件,希望对您会有所帮助,如有任何问题,欢迎留言。

引用

[1] vim manual

目录
相关文章
|
22天前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的商城管理系统源码+运行步骤
基于Python+Vue开发的商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的网上商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
58 7
|
13天前
|
程序员 测试技术 开发工具
怎么开发Python第三方库?手把手教你参与开源项目!
大家好,我是程序员晚枫。本文将分享如何开发Python第三方库,并以我维护的开源项目 **popdf** 为例,指导参与开源贡献。Popdf是一个PDF操作库,支持PDF转Word、转图片、合并与加密等功能。文章涵盖从fork项目、本地开发、单元测试到提交PR的全流程,适合想了解开源贡献的开发者。欢迎访问[popdf](https://gitcode.com/python4office/popdf),一起交流学习!
75 21
怎么开发Python第三方库?手把手教你参与开源项目!
|
14天前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的美容预约管理系统源码+运行
基于Python+Vue开发的美容预约管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的美容诊所预约管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
38 9
|
11天前
|
JavaScript 前端开发 关系型数据库
基于Python+Vue开发的体育场馆预约管理系统源码+运行
本项目为大学生课程设计作业,采用Python和Vue技术构建了一个体育场馆预约管理系统(实现前后端分离)。系统的主要目标在于帮助学生理解和掌握Python编程知识,同时培养其项目规划和开发能力。参与该项目的学习过程,学生能够在实际操作中锻炼技能,为未来的职业发展奠定良好的基础。
45 3
|
17天前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的摄影网上预约管理系统源码+运行
基于Python+Vue开发的摄影网上预约管理系统(前后端分离),影楼婚纱摄影,这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的在线摄影预约管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
36 8
|
15天前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的新闻管理系统源码+运行
基于Python+Vue开发的新闻管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的新闻管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
44 5
|
13天前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的房产销售管理系统源码+运行
基于Python+Vue开发的房产销售管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的房产销售管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
32 2
|
18天前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的民宿客房预订管理系统源码运行
基于Python+Vue开发的民宿客房预订管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的民宿客房预订管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
45 8
|
20天前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的反诈视频宣传管理系统源码+运行步骤
基于Python+Vue开发的反诈视频宣传管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的反诈宣传管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
42 6
|
19天前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的鲜牛奶订购管理系统源码+运行
基于Python+Vue开发的鲜牛奶订购管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的牛奶订购管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
30 1