2014-02-19 41 views
2

我想添加一些支持D编程语言到我的vim配置。为了自动完成,我需要检测包含的软件包。这不正是难以在简单的情况下,要做到:Vim设置检测包括在D源

import std.stdio; 
import std.conv; 

我的配置:

set include=^\\s*import 
set includeexpr=substitute(v:fname,'\\.','/','g') 

的伟大工程。

然而,进口可以有更复杂的格式,例如:

package import std.container, std.stdio = io, std.conv; 

我没能找到一个简单的方法与includeincludeexpr解析这个。

还有第二个问题:import可以有不同的访问修饰符,如publicprivate。 VIM扫描递归包含文件,import来自包含文件的语句也被解析。但是我需要区分我现在使用的文件和自动扫描的文件:在当前文件中应检测到所有导入,但在其他文件中,只有public import语句应该向搜索添加更多文件。

感谢您的帮助。

更新

这是一种耻辱,如果这不能没有完整的解析器来完成。从本质上讲,我只需要两样东西:

  • includeexpr,而不是一个文件名返回数组
  • 包括当前和其他文件
+0

只是在','简单的情况下分开 –

+0

但是'includeexpr'可以返回多个文件名以包含单个字符串吗? – Korobochka

回答

2

我认为只有这样区分能力的能力可靠地做到这一点是使用完整的解析器和语义分析器。 D完成守护进程(https://github.com/Hackerpilot/DCD/tree/master/editors/vim)有vim插件,不是非常耗资源。

+0

在CPU占用率方面,这不是非常耗费资源,但它的确占用了大量内存。 – simendsjo

1

Vim的include机制和'includeexpr'都深受C语言的影响,而只适用于单个文件。你不能返回一个文件名列表,所以它不可能支持D的Vim复杂的包含机制。使用完全定制的IDE来支持编程语言,而不是通用的文本编辑器。