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

本文详细介绍了如何使用Vim插件,包括下载、配置和使用插件的方法,并深入探讨了Vim插件的运作机制。通过分析Vim内建语言和插件开发流程,阐述了Vim强大的插件支持能力如何赋予其无限可能性。同时,文章对比了不同类型的插件模式,强调了脚本级别的松耦合在实现插件机制中的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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 <F8> :TlistToggle<CR>
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本身就是一种脚本;第二,采用的是接口级别耦合。可以说是融合了两种模式的长处。由此也可以看出,使用一种脚本来写系统,只要架构安排得合理,是比较容易实现插件机制的。


参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值