emacs ac php,[emacs] auto-complete上使用scite的api文件进行补全

Scite编辑器提供补全功能,备选的函数都由一个外部文件(内容很简单,就是每行一个函数原型)提供,这个文件它称为API文件,每种编程语言可配置一个。

emacs-auto-complete-with-scite-api.24558.html

665bdb01d4f5a7eab1afc9f88ff848b3.png

这个机制对于那些非对象化的编程语言来说(比如PHP, Perl, AutoHotKey), 是相当简单方便的,自己可以用一些工具来生成这个文件。即使是对象化语言,有时也很有用,比如Java里面import的时候可以用这种机制来补全包名,或者用全路径方式调用静态函数(比如Python里面os.path.exist())。

以前常用Vim,就怀念这种简单的补全机制。后来用Emacs,也没有看到类似的,一次还发现一个增强的php-mode居然是采用硬编码的方法来提供备选函数的。

于是就想自己写一个,但自己玩Emacs没多久,编码能力不够,一直到了年底,才晃晃悠悠地把这个东西写出来了。这算是我正儿八经写的第一个Emacs包(以前都是在自己的~/.emacs里面折腾各种配置)。

要使用这个包,需要先安装配置好Auto Complete,它界面漂亮、操作方便、配置简单,自身提供了多种source来进行补全(比如文件名、elisp符号名、Emacs包名、其它buffer中的单词、Semantic、Eclipse(eclim)等),可以根据自己需要来配置每种编程语言需要那些sources。具体配置和使用说明可参见Emacs中文网上的这篇 Emacs补全利器: auto-complete+gccsense(注意: ahei的这篇文章 用auto-complete实现自动补全是针对老版本auto-complete的(<=0.3),v1.0以上版本变动较大,配置也简单得多了)。

使用方法:

API文件需要放到/usr/share/scite/api/或者~/.scite/api/两个目录下。如果想放其它目录,可在~/.emacs中设置ac-scite-api-directories。除了SciTE自带的哪些API文件,你还可以到scite-files项目里去找其它人提供的(或者生成工具)。注意每种major-mode会根据如下两种规则读取对应的API文件

major-mode-name - "-mode" + ".api",比如php-mode就会去找php.api

文件扩展名+.api,比如init.el就会去找el.api和

如果两个机制都能读取到文件,都会加载(不过目前没处理重复项目),比如编辑functions.pyw文件时会加载python.api 和pyw.api。你可以用这个机制来将区分系统配置和个人配置。

在Emacs中配置:

如果打算在所有使用auto-complete的地方使用这个(推荐),就把ac-source-scite-api添加到ac-sources缺省值里去

(load "auto-complete-config")

(if (load "auto-complete-scite-api" t)

(setq-default ac-sources (cons 'ac-source-scite-api ac-sources)))

如果只想在某些模式中使用,还是操作ac-sources(因为ac-sources是每个buffer独立的),不过我提供了一个ac-enable-scite-api-source函数

(if (load "auto-complete-scite-api" t)

(progn

(add-hook 'php-mode-hook 'ac-enable-scite-api-source)

(add-hook 'xahk-mode-hook 'ac-enable-scite-api-source)))

这个ac-enable-scite-api-source可以交互式调用,即在需要的时候即时打开,M-x ac-enable-scite-api-source。

自动补全的效果图 (后面带A的即是由本模块提供的候选项),黄色部分是用Auto Complete机制提供的当前候选项的说明(如果API文件里面提供了的话)

1766b6d54e0dfd6f30ff2f723bb95a9c.png

作为一个顺带的功能,你可以在任何函数上按M-F1来查看该函数的说明(显示在echo area)——如果API文件中提供了的话。

ca6dd1888031550f36072cd452c834f7.png

补充说明:

在GNU Emacs 23.2/24.0.50和Auto Complete 1.2/1.3上验证过可用。

如果API文件过大,第一次的性能比较慢,最好文件不要超过500k, 建议删除一些不常用的函数(比如我机器上工具生成的python.api里面包含了很多pyqt的包和函数,而我很少用到)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值