突出显示vim中函数体中的参数

时间:2012-02-19 11:15:03

标签: clojure vim

可以从IDE借用的一些东西。因此,我们的想法是在函数体内突出显示函数参数(以及可能的范围变量名)。这是某些C的默认行为:

plain vim highlighting

好吧,如果我将光标置于func内,我希望强调参数foobar能够更好地遵循算法逻辑。请注意,foo中名称相似的func2不会变亮。这种奢侈可以省略......

func hilighted

使用本地范围的变量,我还希望本地初始化变量highlit:

highlight <code>i</code> inside for

最后要重新诠释奢侈品:

luxury again

写这篇文章并不是那么简单。我用C来概括一下。真的,我可以更好地使用它来进行Scheme / Clojure编程:

for clojure too inside let construct

例如,这应该识别letloopfordoseq绑定。

我的vimscript-fu并不那么强大;我怀疑我们需要

  • 从光标下的函数定义中解析(非regexply?)参数。当然,这将是语言特定的。我的首要任务是Clojure。
  • 定义语法区域以仅涵盖给定的函数/范围
  • 提供所需的语法匹配

作为一个函数,这可以映射到一个键(如果资源非常密集)或CursorMoved,如果不是那么慢。

好的,现在。有没有人写过这样的东西? vimscript大师是否知道如何真正开始编写这样的脚本?

很抱歉有轻微的offtopicness和糟糕的格式。随意编辑/格式化。或投票结束。

2 个答案:

答案 0 :(得分:6)

这比听起来要困难得多,并且vimscript API不能立即使用,因为你不需要解析文件;如果您希望它运行良好,则需要逐步解析文件 。这就是为什么常规语法文件仅限于使用正则表达式执行的操作 - 当您更改几个字符时,vim可以找出语法高亮显示中的更改,而无需重做整个文件。

vim语法高亮显示器仅限于处理正则表达式,但是如果你真的这么做,你可以在vimscript中推出自己的解析器,并让它生成一个缓冲区本地语法,引用文件中的标记行和列,使用正则表达式中的\%l和\%c原子。每次更改后都必须重新运行。不幸的是,没有“文件已更改”的autocmd,但是有CursorHold autocmd,当你空闲了一段可配置的持续时间时它会运行。

答案 1 :(得分:1)

可以找到一种可能的解决方案here。不是最好的方法,因为它突出了整个文件中的每一个出现,你必须每次都给出命令(可能第二个可以避免,不知道第一个)。试试吧。