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

目录
相关文章
|
5天前
|
存储 数据库连接 API
Python环境变量在开发和运行Python应用程序时起着重要的作用
Python环境变量在开发和运行Python应用程序时起着重要的作用
40 15
|
17天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
104 45
|
12天前
|
JSON 安全 API
如何使用Python开发API接口?
在现代软件开发中,API(应用程序编程接口)用于不同软件组件之间的通信和数据交换,实现系统互操作性。Python因其简单易用和强大功能,成为开发API的热门选择。本文详细介绍了Python开发API的基础知识、优势、实现方式(如Flask和Django框架)、实战示例及注意事项,帮助读者掌握高效、安全的API开发技巧。
39 3
如何使用Python开发API接口?
|
5天前
|
JSON API 数据格式
如何使用Python开发1688商品详情API接口?
本文介绍了如何使用Python开发1688商品详情API接口,获取商品的标题、价格、销量和评价等详细信息。主要内容包括注册1688开放平台账号、安装必要Python模块、了解API接口、生成签名、编写Python代码、解析返回数据以及错误处理和日志记录。通过这些步骤,开发者可以轻松地集成1688商品数据到自己的应用中。
20 1
|
11天前
|
数据采集 存储 JSON
Python爬虫开发中的分析与方案制定
Python爬虫开发中的分析与方案制定
|
18天前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
62 7
|
20天前
|
算法 测试技术 开发者
性能优化与代码审查:提升Python开发效率
探讨了Python开发中性能优化和代码审查的重要性,介绍了选择合适数据结构、使用生成器、避免全局变量等性能优化技巧,以及遵守编码规范、使用静态代码分析工具、编写单元测试等代码审查方法,旨在帮助开发者提升开发效率和代码质量。
41 8
|
16天前
|
算法 测试技术 开发者
性能优化与代码审查:提升Python开发效率
性能优化与代码审查:提升Python开发效率
28 1
|
18天前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
31 2
|
19天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
20 3