Sublime text 是否可以通过插件实现动态语法着色?
例如:
在编辑器里输入自定函数
(defun foo(value)
code)
当再一次输入(foo value)
的时候,"foo
"被着色为与内建函数相同的配色.
(抱歉,我之前用的例子不当,我发现在Python语法中已经能将foo(value)
直接显示配色,虽然foo不一定已经被自定或者内建,上面的是lisp的例子,在st2里面还不能实现)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
应该可以,这里就自己卖弄下了,大家别笑。以前搞过一个IDE的语法高亮,基于QScintilla的,当时也简单看了下ST的类似实现,对于ST或支持语法高亮的IDE的这种语法上色大概有个了解。语法着色的时候,往往分成两部分,一部分是关键词的语法上色,一部分是根据上下文的静态分析,基于关键字的语法上色比较简单,往往是对token的直接上色,比如高亮C++的时候,int, return, static_cast时,这些就是token,这些往往会被着色成关键字,比如你输入的def, def就是一个关键字,会被着色。另外IDE会根据语法做些静态分析(这个取决于IDE的时候,不是每个IDE都会有),就是做些静态分析,比如foo后面是由参数的,比如
而你调用的时候是没参数的,比如foo(),这时有些IDE会检查声明和实现的接口是否一致,如果不一致可能会显示一些错误信息,比如参数不匹配等,所以这些取决于Editor对token/语法的解释和处理。
所以对于你说的情况
1) foo是可以高亮的,也可以设置成built-in的函数,这个取决于ST的lexer插件的解析。
2) ST是有一套接口可以自定义扩展的,所以有了扩展的ST的实现,所以你才会看看到有基于ST的erlang/go的Editor,实现了key word的关键字。
上面这个就是我基于QScintilla做的一个DSL语言的Editor,支持语法的高亮。
这里已经实现了注释的颜色灰色显示, key用深蓝色,value用浅绿色,title大号字体显示。不过这个是个DSL的语言,呵呵。