路过,来宣传一下我自己的C语言补全插件

Vim、Emacs配置和使用
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 路过,来宣传一下我自己的C语言补全插件

#16

帖子 lilydjwg » 2011-08-11 18:01

kevinlei 写了:
lilydjwg 写了:
kevinlei 写了: 3. 所有操作都是异步的,由后台线程完成,所以人感觉不到延迟。
才注意到这点。能否介绍下你是怎样异步实现的呢?哪些操作进行了异步处理?在 Vim 中后台线程是不能操作 UI 的,那么后台线程的结果如何被取回 UI 线程中的呢?
实际上,我并没有在后台线程中直接操作ui(其实也是可以的,比如传进一段vimL代码,然后用vim.eval()执行)。

我是在内存里缓存了所有打开的文件和他们所依赖的头文件的tags。

然后,针对这些tags,有update、find、remove 3个操作。其中,update和remove两个操作,都是异步的。

当打开文件、:w写入文件的时候,都会由后台线程执行update操作。关闭文件的时候,则是由后台线程执行remove操作。

根据我的统计,打开一个包含300个头文件的c文件(这已经有点夸张了,kernel里的文件通常只是包含150-200个左右)并把所有这些文件都用ctags解析出tags,通常耗时在5秒以下。

在这5秒钟里执行find,就会阻塞住。但实际上,从打开vim到找到要编辑的地方,并且按下i,差不多也会需要几秒钟。所以实际上人只是会觉得稍微滞了一下。而当缓存建立完成以后,每次:w,都只是更新所修改的那一个文件而已,哪怕这个文件巨大,比如说现实中的sqlite3.c有10万行,ctags重新生成也只要1-2秒,而人很少在2秒内多次:w。所以,除了头一次打开某个c文件查找一堆h文件的时候,别的时候都感觉不到延迟。

而现实中,当我们在编辑一个项目的时候,每个c文件通常会依赖相同的一批h文件,所以当你打开下一个c文件时,就会先在内存里查找。比方说,打开kernel里的romfs.c会新增187个h文件,而接下来打开他的同一个目录下的super.c,则只是新增了20个h文件。因为它与前者共用了很多h文件,这样就很快了。

后台线程的代码其实很简单,空闲时候都等在self._run_cond这个condition上,直到调用work方法传进去一个闭包,才会醒来执行这个闭包,执行完了继续等待。而update、remove等操作就由这个闭包体现。
[...]
明白了。这样的话,neocomplcache 似乎有不小的改进空间呢。
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: 路过,来宣传一下我自己的C语言补全插件

#17

帖子 fanhe » 2011-08-12 10:55

对比下这个, 各取优点试试

http://www.vim.org/scripts/script.php?script_id=3647

我这个目标是做成IDE, 现在基本框架出来了, 项目管理就差个构建依赖
调试器的继承就比较搓, 只能凑合着用

对C++的支持自己感觉还算可以, 反正我用着还挺顺手.
现在的 parse 都是单线程的, 我未来的计划也是做成多线程.
最近有点烦恼事, 这个项目更新会变慢, 不过上班时间我都是用这个 IDE 做 C/C++ 开发的
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: 路过,来宣传一下我自己的C语言补全插件

#18

帖子 fanhe » 2011-08-12 10:59

关于 global 的, cscope 还是好用的啊, 把所有文件路径改成绝对路径就没问题了
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: 路过,来宣传一下我自己的C语言补全插件

#19

帖子 fanhe » 2011-08-12 11:05

eexpress 写了:si的好处,其实是不同变量不同颜色(字体/阴影等)。实时显示,函数调用正向/反向的框图(这个可以用graphviz实现)。
其他方面,基本vim可以实现。

si的全局变量替换,老版本至少是有严重bug的。
主要是后端

你当 vim 是一个前端就行了, 那格全局变量替换, 你给个后端, 就可以做出来的
不错貌似 C++ 重构很多都喜欢手动的
kevinlei
帖子: 40
注册时间: 2007-01-13 14:45

Re: 路过,来宣传一下我自己的C语言补全插件

#20

帖子 kevinlei » 2011-08-12 13:27

楼上的兄弟,不可否认,你的三个子插件都很不错。但我建议你把他们独立出来会更好。你这不仅仅是一个插件,更是一种工作方式了。而vimer大多都有各自的一套工作方式,你这样统合起来的话,并不是所有人都能接受你的一整套工作方式的。
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: 路过,来宣传一下我自己的C语言补全插件

#21

帖子 fanhe » 2011-08-12 13:43

项目管理跟自动补全那个关系很密切的, 虽然独立出来也未尝不可, 暂时没时间做

而调试器, 根本就是独立的, 不需要就不用就可以了

这一整套如果不喜欢的话, 完全可以不用的, 因为相应组件都有独立的插件可以基本替代
而且独立出来基本上这套插件失去了本身的意义(除了 pyclewn)

vim 独立插件多, 但是集成起来冲突多得一毛
反正我把这三个插件作为一个基本单元了, 其他功能就找独立插件吧, 如 tagbar, nerdtree, mark 啥的
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 路过,来宣传一下我自己的C语言补全插件

#22

帖子 eexpress » 2011-08-12 13:52

饭盒,你在做ide前端?

项目管理非常重要。
● 鸣学
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: 路过,来宣传一下我自己的C语言补全插件

#23

帖子 fanhe » 2011-08-12 14:05

eexpress 写了:饭盒,你在做ide前端?

项目管理非常重要。
项目管理基本做完了, 基本把 CodeLite 的项目管理搬了过来, 现在就差个 build order 设置 和 batch build 没实现
反正我现在已经不需要 CodeLIte 了, 用我这个IDE收工, 可能有些时候调试的时候需要一下, 现在是完全兼容 CodeLite 的项目管理文件的
asmwarrior
帖子: 43
注册时间: 2009-06-07 9:58

Re: 路过,来宣传一下我自己的C语言补全插件

#24

帖子 asmwarrior » 2011-08-20 21:25

fanhe 写了:
eexpress 写了:饭盒,你在做ide前端?

项目管理非常重要。
项目管理基本做完了, 基本把 CodeLite 的项目管理搬了过来, 现在就差个 build order 设置 和 batch build 没实现
反正我现在已经不需要 CodeLIte 了, 用我这个IDE收工, 可能有些时候调试的时候需要一下, 现在是完全兼容 CodeLite 的项目管理文件的
你太牛了,顶!!!!!!!!
OpenCV & Codeblocks
头像
SmallV
论坛版主
帖子: 9017
注册时间: 2011-01-26 17:52
来自: 万林丛中的一抹浓绿,夹带落日余晖的安祥

Re: 路过,来宣传一下我自己的C语言补全插件

#25

帖子 SmallV » 2011-08-20 21:52

路过,顶一下,
Just do it, you will succeed!
头像
月下叹逍遥
论坛版主
帖子: 33994
注册时间: 2010-10-07 14:23
系统: Archdows10
来自: 某系某星某洲某国某省某市
联系:

Re: 路过,来宣传一下我自己的C语言补全插件

#26

帖子 月下叹逍遥 » 2011-08-20 21:55

SmallV 写了:路过,顶一下,
浮生七十今三十,从此凄惶未可知
风间星魂
帖子: 490
注册时间: 2009-06-20 23:53

Re: 路过,来宣传一下我自己的C语言补全插件

#27

帖子 风间星魂 » 2011-09-03 16:12

python3。。。。

这是何苦 :em20
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 路过,来宣传一下我自己的C语言补全插件

#28

帖子 lilydjwg » 2011-09-03 16:34

风间星魂 写了:python3。。。。

这是何苦 :em20
你没事的话可以继续纠结于 py2 的 Unicode{En,De}codeError。
kevinlei
帖子: 40
注册时间: 2007-01-13 14:45

Re: 路过,来宣传一下我自己的C语言补全插件

#29

帖子 kevinlei » 2011-09-05 11:01

风间星魂 写了:python3。。。。

这是何苦 :em20
一点儿也不苦。。。py3简直太好用鸟。
头像
Crazier
帖子: 1051
注册时间: 2007-09-23 17:06
联系:

Re: 路过,来宣传一下我自己的C语言补全插件

#30

帖子 Crazier » 2011-10-11 0:54

vim,ctag盼望呀
回复