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

目录
相关文章
|
6月前
|
存储 监控 算法
淘宝买家秀 API开发实录Python(2025)
本文讲述了作者在电商开发领域,尤其是对接淘宝买家秀 API 接口过程中所经历的挑战与收获。从申请接入、签名验证、频率限制到数据处理和实时监控,作者分享了多个实战经验与代码示例,帮助开发者更高效地获取和处理买家秀数据,提升开发效率。
|
5月前
|
设计模式 人工智能 API
AI智能体开发实战:17种核心架构模式详解与Python代码实现
本文系统解析17种智能体架构设计模式,涵盖多智能体协作、思维树、反思优化与工具调用等核心范式,结合LangChain与LangGraph实现代码工作流,并通过真实案例验证效果,助力构建高效AI系统。
716 7
|
7月前
|
API 数据安全/隐私保护 Python
批量发短信的软件,自动群发短信批量工具,手机号电话生成脚本插件【python】
该工具包含三个核心模块:短信发送核心功能、配置管理系统和命令行界面。使用时需先配置API密钥和短信模板
|
7月前
|
机器学习/深度学习 数据安全/隐私保护 计算机视觉
过三色刷脸技术,过三色刷脸技术教程,插件过人脸python分享学习
三色刷脸技术是基于RGB三通道分离的人脸特征提取方法,通过分析人脸在不同颜色通道的特征差异
|
7月前
|
JSON 机器人 API
微信机器人自动回复插件,vx自动回复机器人脚本助手,python框架分享
这个微信机器人系统包含三个主要模块:主程序基于itchat实现微信消息监听和自动回复功能
|
6月前
|
算法 程序员 API
电商程序猿开发实录:淘宝商品python(2)
本文分享了开发者在对接淘宝商品详情API过程中的真实经历,涵盖权限申请、签名验证、限流控制、数据解析及消息订阅等关键环节,提供了实用的Python代码示例,帮助开发者高效调用API,提升系统稳定性与数据处理能力。
|
7月前
|
数据采集 存储 数据库
Python爬虫开发:Cookie池与定期清除的代码实现
Python爬虫开发:Cookie池与定期清除的代码实现
|
7月前
|
数据安全/隐私保护 Python
淘宝商家私信群发脚本,阿里旺旺私信群发工具,卖家私信批量发送插件【python框架】
使用Selenium自动化登录淘宝账号通过阿里旺旺网页版发送私信
|
8月前
|
人工智能 搜索推荐 数据可视化
用 Python 制作简单小游戏教程:手把手教你开发猜数字游戏
本教程详细讲解了用Python实现经典猜数字游戏的完整流程,涵盖从基础规则到高级功能的全方位开发。内容包括游戏逻辑设计、输入验证与错误处理、猜测次数统计、难度选择、彩色输出等核心功能,并提供完整代码示例。同时,介绍了开发环境搭建及调试方法,帮助初学者快速上手。最后还提出了图形界面、网络对战、成就系统等扩展方向,鼓励读者自主创新,打造个性化游戏版本。适合Python入门者实践与进阶学习。
1056 1
|
7月前
|
API 数据安全/隐私保护 Python
贴吧私信自动群发神器,百度贴吧群发批量私信脚本插件,python框架分享
这个贴吧私信群发工具包含三个主要文件:主程序、配置文件和入口文件。主程序实现了登录