当您在项目上function getClosest(el, klass, dir) {
while (el && (!el.classList.contains(klass))) {
el = el[dir ? 'previousElementSibling' : 'nextElementSibling'];
}
return el;
}
function getbetween(from, to, filterKlass) {
var list = [];
while(from && to && from !== to) {
if ((from = from.nextElementSibling) !== to) {
filterKlass ? (from.classList.contains(filterKlass) ? list.push(from) : Infinity) : list.push(from);
}
}
return list;
}
var object = $('.writer');
var element = object.get(0);
var header_object = getClosest(element, 'header', true);
var footer_object = getClosest(element, 'footer', false);
var object_list = getbetween(header_object, footer_object, 'actor');
object_list.forEach(function(element) {
console.log(element);
});
时,有几个选项:
我每次都只是在重建,但现在我正在开展一个庞大的项目并且负担不起;当我修改文件时,无论是.cpp还是.h,我都需要知道要执行哪种“索引”操作。
对于每个'索引'选项:
来自Eclipse的文档会有所帮助,但已经搜索过,但没有找到。
答案 0 :(得分:3)
重建只能在整个项目中执行。它抛弃项目的整个索引并从头开始重建,为项目中的每个文件编制索引。
由于它是通过丢弃先前的索引开始的,因此取消重建将导致空索引或部分构建索引。
其他操作可以在整个项目中执行,也可以在项目中的文件夹或文件(或文件夹/文件组)上执行。
它们都会遍历选择中的文件,并在索引中更新其中的部分或全部文件。与Rebuild不同,它们不是通过清除索引开始的,因此取消它们是相对安全的。
刷新所有文件更新所选文件中的所有文件。如果在项目中调用,则最终结果与Rebuild相当。
使用修改后的文件进行更新仅更新选择中自上次在索引中更新后已更改的文件,这些文件由其时间戳和内容的哈希值决定。
重新解析未解决的包含仅更新选择中哪些配置信息(例如指定的包含路径)已更改的文件,并且更改导致以前未解析的包含现在正在解析
性能特征可能会有很大差异,具体取决于项目大小和您运行的计算机类型。我在一个非常大的项目(数百万行)上工作,重建可以在相对现代的桌面上花费20-30分钟。该操作通常是CPU绑定的,但索引器当前是单线程的,因此它只会耗尽一个CPU核心。
最后,我想再次提一下我在关于这个问题的评论中所说的内容:如果在Preferences | C/C++ | Indexer
中配置索引自动更新,则根本不需要手动调用这些命令,至少在理论上。在实践中,我发现偶尔需要重建(比如每隔几周一次),特别是在配置更改后(例如添加新的包含路径)。
来源:这个mailing list post,阅读行动的实施,以及使用CDT的经验。