Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 在vim中突出显示函数体中的参数_Clojure_Vim - Fatal编程技术网

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

Clojure 在vim中突出显示函数体中的参数,clojure,vim,Clojure,Vim,一些可以从IDE中借用的东西。因此,我们的想法是突出显示函数体中的函数参数(可能还有作用域变量名)。这是某些C的默认行为: 好吧,如果我将光标放在func中,我希望看到参数foo和bar突出显示,以便更好地遵循算法逻辑。请注意,func2中类似名称的foo不会高亮显示。不过,这种奢侈可以省略 使用局部作用域变量,我还希望局部初始化变量高亮显示: i用于“> 最后,重新展示奢华: 写这篇文章并不简单。我用C给出了一个大概的想法。实际上,我可以用它更好地进行Scheme/Clojure编程:

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

好吧,如果我将光标放在
func
中,我希望看到参数
foo
bar
突出显示,以便更好地遵循算法逻辑。请注意,
func2
中类似名称的
foo
不会高亮显示。不过,这种奢侈可以省略

使用局部作用域变量,我还希望局部初始化变量高亮显示:

i用于“>

最后,重新展示奢华:

写这篇文章并不简单。我用C给出了一个大概的想法。实际上,我可以用它更好地进行Scheme/Clojure编程:

例如,这应该识别
let
loop
for
doseq
绑定

我的Vimfu没有那么强大,我想我们需要

  • 解析(非regexply?)游标下函数定义中的参数。这当然是特定于语言的。我的优先级是Clojure
  • 定义语法区域以仅覆盖给定的函数/范围
  • 提供所需的语法匹配
作为一个函数,它可以映射到一个键(如果资源非常密集)或
光标移动
如果不是那么慢

好的,现在。有人写过/发现过这样的东西吗?vimscript大师对如何真正开始编写这样的脚本有想法吗


很抱歉有点离题和格式错误。请随意编辑/格式化。或投票关闭。

可以找到一个可能的解决方案。这不是最好的方法,因为它会突出显示整个文件中的每个事件,并且您每次都必须发出命令(可能可以避免第二个,不知道第一个)这比听起来要困难得多,而且对于vimscript API来说几乎是不可能的,因为你不仅需要解析文件;如果你想让它正常工作,你需要以增量的方式解析文件。这就是为什么常规语法文件仅限于你能用正则表达式做的事情——当你改变一些c语言时vim可以在不重做整个文件的情况下找出语法高亮显示中的更改


vim语法highlighter仅限于处理正则表达式,但如果您执意要这样做,您可以在vimscript中运行自己的解析器,并让它使用正则表达式中的\%l和\%c原子,生成一个按行和列引用文件中标记的缓冲区本地语法。每次更改后都必须重新运行。不幸的是“文件已更改”没有autocmd,但还有CursorHold autocmd,它在您空闲一段可配置的时间后运行。

supercool主题。这个亮点确实提高了算法的可读性。关于这方面的一些新闻?对于C/C++/Obj-C来说完全可行。我知道可以使用Python/Clang来获取当前游标的范围以及当前函数的签名。来源:。用这个写一个vim插件应该不难。我差点就否决了你发布代码图像而不是文本。。。但后来我读到了问题在vim中,这实际上是非常重要的。最大的问题是它不进行语言的语义分析,因此很难知道什么是“函数的参数列表”,特别是在语言不可知的情况下。同上,仅将突出显示的范围限定到函数。在ide中,这很简单,因为它们通常在内存中有完整的AST,但同时,编写ide无法与vim语法文件相比…@MattBriggs:嗯。Libclang是被提出的,它可以用于使用Vim-Python绑定的C/C++。对于LISPs,AST解析更容易。:)这是正确的,我们必须依赖于特定语言的脚本,但这只是我们必须接受的东西…不够自动地做事情。我同意。。。这有点疯狂。但是还有python/ruby/scheme绑定。这些语言都有第三方库。也许我应该强调的是,不必完全是VimL。