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

目录
相关文章
|
1月前
|
存储 数据库连接 API
Python环境变量在开发和运行Python应用程序时起着重要的作用
Python环境变量在开发和运行Python应用程序时起着重要的作用
86 15
|
3天前
|
IDE 测试技术 开发工具
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
在Python开发中,调试是提升效率的关键技能。本文总结了10个实用的调试方法,涵盖内置调试器pdb、breakpoint()函数、断言机制、logging模块、列表推导式优化、IPython调试、警告机制、IDE调试工具、inspect模块和单元测试框架的应用。通过这些技巧,开发者可以更高效地定位和解决问题,提高代码质量。
46 8
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
|
17天前
|
存储 API 数据库
使用Python开发获取商品销量详情API接口
本文介绍了使用Python开发获取商品销量详情的API接口方法,涵盖API接口概述、技术选型(Flask与FastAPI)、环境准备、API接口创建及调用淘宝开放平台API等内容。通过示例代码,详细说明了如何构建和调用API,以及开发过程中需要注意的事项,如数据库连接、API权限、错误处理、安全性和性能优化等。
69 5
|
1月前
|
机器学习/深度学习 人工智能 关系型数据库
Python开发
Python开发
40 7
|
3天前
|
Shell 开发工具 Python
如何在vim里直接运行python程序
如何在vim里直接运行python程序
|
1月前
|
前端开发 安全 数据库
使用Python开发独立站的全面指南
本文详细介绍了如何使用Python及其Web框架Django和Flask快速搭建功能完善、易于管理的独立站。从Python和Web开发基础讲起,逐步覆盖环境搭建、项目创建、数据库设计、视图与URL路由、模板创建、表单处理、测试调试、部署优化及安全维护等内容,旨在帮助开发者高效构建稳定的Web应用。
69 1
|
1月前
|
缓存 API 数据库
Python哪个框架合适开发速卖通商品详情api?
在跨境电商平台速卖通的商品详情数据获取与整合中,Python 语言及其多种框架(如 Flask、Django、Tornado 和 FastAPI)提供了高效解决方案。Flask 简洁灵活,适合快速开发;Django 功能全面,适用于大型项目;Tornado 性能卓越,擅长处理高并发;FastAPI 结合类型提示和异步编程,开发体验优秀。选择合适的框架需综合考虑项目规模、性能要求和团队技术栈。
27 2
|
1月前
|
存储 API 数据安全/隐私保护
Python开发淘宝详情API的深入探索
通过Python开发淘宝详情API,你可以高效地获取商品信息,为电商运营和市场分析提供强有力的数据支持。本文详细介绍了注册开发者账号、获取API密钥、构建请求、解析响应数据等步骤,并探讨了相关的注意事项和最佳实践。希望这些内容能够帮助你更好地理解和使用淘宝开放平台的API接口,实现你的业务需求。
38 1
|
1月前
|
JSON API 数据格式
如何使用Python开发1688商品详情API接口?
本文介绍了如何使用Python开发1688商品详情API接口,获取商品的标题、价格、销量和评价等详细信息。主要内容包括注册1688开放平台账号、安装必要Python模块、了解API接口、生成签名、编写Python代码、解析返回数据以及错误处理和日志记录。通过这些步骤,开发者可以轻松地集成1688商品数据到自己的应用中。
38 1
|
29天前
|
JSON API 数据格式
如何使用Python开发天猫获得淘宝买家秀API接口?
本文介绍了如何使用Python开发天猫和淘宝买家秀API接口,包括注册开放平台账号、创建应用获取API权限、构建请求URL、发送请求获取响应及解析数据等步骤,帮助开发者高效获取和处理商品信息与用户评价数据。
27 0