【发布时间】:2012-03-10 01:25:12
【问题描述】:
一些可以从 IDE 中借用的东西。所以想法是在函数体内突出显示函数参数(可能还有作用域变量名)。这是某些 C 的默认行为:
好吧,如果我将光标放在func 内,我希望看到参数foo 和bar 突出显示以更好地遵循算法逻辑。请注意,func2 中名称相似的 foo 不会突出显示。不过这种奢侈可以省略……
使用局部作用域的变量,我也希望局部初始化的变量高亮:
终于再次彰显奢华:
写这个不是那么简单。我用 C 来给出一个总体思路。真的,我可以更好地使用它来进行 Scheme/Clojure 编程:
这应该可以识别 let、loop、for、doseq 绑定。
我的 vimscript-fu 没那么强;我怀疑我们需要
- 解析(非正则表达式?)光标下函数定义的参数。当然,这将是特定于语言的。我的首要任务是 Clojure。
- 定义语法区域以仅覆盖给定的函数/范围
- 提供所需的语法匹配
作为一个函数,它可以映射到一个键(如果资源非常密集)或CursorMoved,如果不是那么慢。
好的,现在。有没有人写过/发现过这样的东西? vimscript 大师们对如何真正开始编写这样的脚本有什么想法吗?
对于轻微的题外话和错误的格式,我们深表歉意。随意编辑/格式化。或投票关闭。
【问题讨论】:
-
超酷的话题。这个亮点确实提高了算法的可读性。有什么消息吗?
-
C/C++/Obj-C 完全可行。我知道可以使用 Python/Clang 来获取当前光标的范围以及当前函数的签名。来源:eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang。用这个写个vim插件应该不难。
-
由于发布代码图像而不是文本,我差点对您投反对票……但后来我读到了这个问题。 ;)
-
这实际上在 vim 中非常重要。最大的问题是它不对语言进行语义解析,因此很难知道什么是“函数的参数列表”,尤其是在与语言无关的情况下。同上,仅将亮点范围限定为函数。在 ide 中它微不足道,因为它们通常在内存中拥有完整的 AST,但同时,编写 ide 无法与 vim 语法文件相提并论......
-
@MattBriggs:好吧。 Libclang 被提出,它可以用于使用 Vim-Python 绑定的 C/C++。对于 LISP,AST 解析更容易。 :) 没错,我们必须依赖特定于语言的脚本,但这只是我们必须忍受的……