使用Python编写vim插件的简单示例
在开始编写插件之前,你需要确认 Vim 支持 Python,通过以下命令来判别:
接下来我们通过一个简单的例子来学习用 Python 编写 Vim 插件,该插件用来获取 Reddit 首页信息并显示在当前缓冲区上。
首先在 Vim 新建 vimmit.vim 文件,我们首先需要判断是否支持 Python,如果不支持给出提示信息:
if !has('python') echo "Error: Required vim compiled with +python" finish endif
上面这段代码就是用 VimL 编写的,它将检查 Vim 是否支持 Python。
下面是用 Python 编写的 Reddit() 主函数:
" Vim comments start with a double quote. " Function definition is VimL. We can mix VimL and Python in " function definition. function! Reddit() " We start the python code like the next line. python使用如下命令保存文件
复制代码 代码如下::source vimmit.vim然后调用该插件:
复制代码 代码如下::call Reddit()这个命令用起来不那么方便,因此我们再定义一个命令:
复制代码 代码如下:command! -nargs=0 Reddit call Reddit()我们定义了命令:Reddit来调用这个函数。-nargs 参数声明命令行中有多少个参数。
关于函数参数的问题:问:如何访问函数中的参数?
function! SomeName(arg1, arg2, arg3) " Get the first argument by name in VimL let firstarg=a:arg1 " Get the second argument by position in Viml let secondarg=a:1 " Get the arguments in python python你可以使用 ... 来处理可变个数参数来替换特定的参数名,可通过位置或者命名参数来访问,如:(arg1, arg2, ...)
问:如何在 Python 中调用 Vim 命令?
复制代码 代码如下:vim.command("[vim-command-here]")问:如何定义全局变量,并在 VimL 和 Python 中访问?
全局变量使用形如 g:. 的前缀,定义全局变量前应该检查该变量是否已定义:
if !exists("g:reddit_apicall_timeout") let g:reddit_apicall_timeout=40 endif然后你通过下面代码在 Python 中访问这个变量:
TIMEOUT = vim.eval("g:reddit_apicall_timeout")可通过下面的方法来对全局变量进行重新赋值:
let g:reddit_apicall_timeout=60更多关于使用 Python 编写 Vim 插件的说明请看官方文档。
备注:一旦你用过VimL,就会发现它挺简单的,你用python写的代码也可以用它来实现。详细请参考vim python模块文档,这是一份重要的参考资料。
除了上述文档,你也可以在IBM developerWorks网站找到一些有用的资料。
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
专题推荐
- 独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
- 玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
- 天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
上一篇: Java中关于迭代器的使用详解
下一篇: 为什么一直提示错误 请人帮我看下
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论