明白了。这样的话,neocomplcache 似乎有不小的改进空间呢。kevinlei 写了:实际上,我并没有在后台线程中直接操作ui(其实也是可以的,比如传进一段vimL代码,然后用vim.eval()执行)。lilydjwg 写了:才注意到这点。能否介绍下你是怎样异步实现的呢?哪些操作进行了异步处理?在 Vim 中后台线程是不能操作 UI 的,那么后台线程的结果如何被取回 UI 线程中的呢?kevinlei 写了: 3. 所有操作都是异步的,由后台线程完成,所以人感觉不到延迟。
我是在内存里缓存了所有打开的文件和他们所依赖的头文件的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等操作就由这个闭包体现。
[...]
路过,来宣传一下我自己的C语言补全插件
- lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 路过,来宣传一下我自己的C语言补全插件
- fanhe
- 帖子: 2357
- 注册时间: 2007-03-24 23:45
Re: 路过,来宣传一下我自己的C语言补全插件
对比下这个, 各取优点试试
http://www.vim.org/scripts/script.php?script_id=3647
我这个目标是做成IDE, 现在基本框架出来了, 项目管理就差个构建依赖
调试器的继承就比较搓, 只能凑合着用
对C++的支持自己感觉还算可以, 反正我用着还挺顺手.
现在的 parse 都是单线程的, 我未来的计划也是做成多线程.
最近有点烦恼事, 这个项目更新会变慢, 不过上班时间我都是用这个 IDE 做 C/C++ 开发的
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语言补全插件
关于 global 的, cscope 还是好用的啊, 把所有文件路径改成绝对路径就没问题了
- fanhe
- 帖子: 2357
- 注册时间: 2007-03-24 23:45
Re: 路过,来宣传一下我自己的C语言补全插件
主要是后端eexpress 写了:si的好处,其实是不同变量不同颜色(字体/阴影等)。实时显示,函数调用正向/反向的框图(这个可以用graphviz实现)。
其他方面,基本vim可以实现。
si的全局变量替换,老版本至少是有严重bug的。
你当 vim 是一个前端就行了, 那格全局变量替换, 你给个后端, 就可以做出来的
不错貌似 C++ 重构很多都喜欢手动的
-
- 帖子: 40
- 注册时间: 2007-01-13 14:45
Re: 路过,来宣传一下我自己的C语言补全插件
楼上的兄弟,不可否认,你的三个子插件都很不错。但我建议你把他们独立出来会更好。你这不仅仅是一个插件,更是一种工作方式了。而vimer大多都有各自的一套工作方式,你这样统合起来的话,并不是所有人都能接受你的一整套工作方式的。
- fanhe
- 帖子: 2357
- 注册时间: 2007-03-24 23:45
Re: 路过,来宣传一下我自己的C语言补全插件
项目管理跟自动补全那个关系很密切的, 虽然独立出来也未尝不可, 暂时没时间做
而调试器, 根本就是独立的, 不需要就不用就可以了
这一整套如果不喜欢的话, 完全可以不用的, 因为相应组件都有独立的插件可以基本替代
而且独立出来基本上这套插件失去了本身的意义(除了 pyclewn)
vim 独立插件多, 但是集成起来冲突多得一毛
反正我把这三个插件作为一个基本单元了, 其他功能就找独立插件吧, 如 tagbar, nerdtree, mark 啥的
而调试器, 根本就是独立的, 不需要就不用就可以了
这一整套如果不喜欢的话, 完全可以不用的, 因为相应组件都有独立的插件可以基本替代
而且独立出来基本上这套插件失去了本身的意义(除了 pyclewn)
vim 独立插件多, 但是集成起来冲突多得一毛
反正我把这三个插件作为一个基本单元了, 其他功能就找独立插件吧, 如 tagbar, nerdtree, mark 啥的
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- fanhe
- 帖子: 2357
- 注册时间: 2007-03-24 23:45
Re: 路过,来宣传一下我自己的C语言补全插件
项目管理基本做完了, 基本把 CodeLite 的项目管理搬了过来, 现在就差个 build order 设置 和 batch build 没实现eexpress 写了:饭盒,你在做ide前端?
项目管理非常重要。
反正我现在已经不需要 CodeLIte 了, 用我这个IDE收工, 可能有些时候调试的时候需要一下, 现在是完全兼容 CodeLite 的项目管理文件的
-
- 帖子: 43
- 注册时间: 2009-06-07 9:58
Re: 路过,来宣传一下我自己的C语言补全插件
你太牛了,顶!!!!!!!!fanhe 写了:项目管理基本做完了, 基本把 CodeLite 的项目管理搬了过来, 现在就差个 build order 设置 和 batch build 没实现eexpress 写了:饭盒,你在做ide前端?
项目管理非常重要。
反正我现在已经不需要 CodeLIte 了, 用我这个IDE收工, 可能有些时候调试的时候需要一下, 现在是完全兼容 CodeLite 的项目管理文件的
OpenCV & Codeblocks
- SmallV
- 论坛版主
- 帖子: 9017
- 注册时间: 2011-01-26 17:52
- 来自: 万林丛中的一抹浓绿,夹带落日余晖的安祥
- 月下叹逍遥
- 论坛版主
- 帖子: 33994
- 注册时间: 2010-10-07 14:23
- 系统: Archdows10
- 来自: 某系某星某洲某国某省某市
- 联系:
-
- 帖子: 490
- 注册时间: 2009-06-20 23:53
Re: 路过,来宣传一下我自己的C语言补全插件
python3。。。。
这是何苦
这是何苦

- lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 路过,来宣传一下我自己的C语言补全插件
你没事的话可以继续纠结于 py2 的 Unicode{En,De}codeError。风间星魂 写了:python3。。。。
这是何苦
-
- 帖子: 40
- 注册时间: 2007-01-13 14:45
Re: 路过,来宣传一下我自己的C语言补全插件
一点儿也不苦。。。py3简直太好用鸟。风间星魂 写了:python3。。。。
这是何苦
- Crazier
- 帖子: 1051
- 注册时间: 2007-09-23 17:06
- 联系:
Re: 路过,来宣传一下我自己的C语言补全插件
vim,ctag盼望呀