2014-02-19 74 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來支持編程語言,而不是通用的文本編輯器。