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

unp*_*680 54 vim clojure

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

普通的vim突出显示

好吧,如果我把光标放在里面func我希望看到参数foobar突出显示更好地遵循算法逻辑.请注意,类似命名的fooin func2不会变亮.虽然这个奢侈品可以省略......

func hilighted

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

在里面突出显示<code>let</code>,<code>loop</code>,<code>for</code>,<code>doseq</code>绑定实例.</p>

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

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

<p>作为一个函数,这可以映射到一个密钥(如果资源非常密集)或者<code>CursorMoved</code>如果不是那么慢.</p>

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

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

<div class=

jim*_*omh 6

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

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


Geo*_*kas 1

可以在这里找到一种可能的解决方案。这不是最好的方法,因为它突出显示整个文件中的每个事件,并且您必须每次都给出命令(可能可以避免第二个,不知道第一个)。不过还是看一下吧。