从VIM taglist安装谈起,到plugin架构的简单剖析


1. 首先下载taglish,最简单的方法是:curl http://www.vim.org/scripts/download_script.php?src_id=7701 > ~/.vim/taglist.zip

2. cd~/.vim/; unziptaglist.zip

3. vi ~/.vimrc 在文件末尾添加如下配置

nmap  :TlistToggle
let Tlist_Close_On_Select = 1
let Tlist_Use_Right_Window = 1
let Tlist_GainFocus_On_ToggleOpen = 1
4. 打开my.cpp文件,摁F8就能看到taglist了 :)

最终效果:





做完这些后,突然想弄明白:vim插件运作机制是怎么样的呢?学习了一下写插件的过程,有如下收获,记录之。

首先,vim内建支持一套脚本语言。能够解释形如
syntax match longword1 “\w\{14,}” 
highlight link longword1 Error
的内容,更复杂的如(from c.vim)
let s:C_MakeCmdLineArgs   = ""     " command line arguments for Run-make; initially empty

function! C_MakeArguments ()
  let s:C_MakeCmdLineArgs= C_Input("make command line arguments : ",s:C_MakeCmdLineArgs )
endfunction    " ----------  end of function C_MakeArguments ----------
"
function! C_Make()
  " update : write source file if necessary
  exe ":update"
  " run make
  exe   ":!make ".s:C_MakeCmdLineArgs
endfunction    " ----------  end of function C_Make ----------
在这套内建语言的基础上,vim还支持用python和perl来编写插件。个人猜测基本流程为:
vim读取插件文件的内容,解释文件头部文本,提取出python部分的文件另存为somefile.py,然后通过解析得到的参数调用somefile.py。somefile.py内部会回调vim语言包提供的一些函数,与vim进行通信,如:返回处理结果等。

vim之所以如此强大,与其丰富的插件支持能力是分不开的。《架构之美》中提到的emacs、firefox也是插件支持中的佼佼者。正是由于对插件有着丰富的支持,才使得他们拥有无限的可能。
支持插件,粗略的分有两种模式,一种是接口级别的紧耦合,一种是脚本级别的松耦合。一些C语言的DLL插件、Eclipse插件是前者的代表,vim script、JavaScript是后者的代表。
还有个比较有意思的系统,做站长的都熟悉,WordPress。这是一款php写的博客系统,支持用户自定义主题插件。WordPress的这一功能使得他技压群雄,成为博客系统中当之无愧的老大,为人们提供了无限多种博客风格,提供了无限多种建站功能,如SNS功能、图片浏览功能、CMS功能、支付功能,甚至有人基于WordPress写出了网上商城系统。php的这种插件机制之所以比较有意思的地方有两点:第一,php本身就是一种脚本;第二,采用的是接口级别耦合。可以说是融合了两种模式的长处。由此也可以看出,使用一种脚本来写系统,只要架构安排得合理,是比较容易实现插件机制的。


参考:
vim使用手册(中文版pdf)
为 Vim 编辑器开发定制插件
使用 Python 编写 vim 插件
架构之美


你可能感兴趣的:(从VIM taglist安装谈起,到plugin架构的简单剖析)