Sublime text 是否可以通过插件实现动态语法着色?

发布于 2022-09-01 05:42:42 字数 266 浏览 22 评论 0

例如:
在编辑器里输入自定函数

(defun foo(value)
    code)

当再一次输入(foo value)的时候,"foo"被着色为与内建函数相同的配色.
(抱歉,我之前用的例子不当,我发现在Python语法中已经能将foo(value)直接显示配色,虽然foo不一定已经被自定或者内建,上面的是lisp的例子,在st2里面还不能实现)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

应该可以,这里就自己卖弄下了,大家别笑。以前搞过一个IDE的语法高亮,基于QScintilla的,当时也简单看了下ST的类似实现,对于ST或支持语法高亮的IDE的这种语法上色大概有个了解。语法着色的时候,往往分成两部分,一部分是关键词的语法上色,一部分是根据上下文的静态分析,基于关键字的语法上色比较简单,往往是对token的直接上色,比如高亮C++的时候,int, return, static_cast时,这些就是token,这些往往会被着色成关键字,比如你输入的def, def就是一个关键字,会被着色。另外IDE会根据语法做些静态分析(这个取决于IDE的时候,不是每个IDE都会有),就是做些静态分析,比如foo后面是由参数的,比如

def foo(value):
     code

而你调用的时候是没参数的,比如foo(),这时有些IDE会检查声明和实现的接口是否一致,如果不一致可能会显示一些错误信息,比如参数不匹配等,所以这些取决于Editor对token/语法的解释和处理。
所以对于你说的情况
1) foo是可以高亮的,也可以设置成built-in的函数,这个取决于ST的lexer插件的解析。
2) ST是有一套接口可以自定义扩展的,所以有了扩展的ST的实现,所以你才会看看到有基于ST的erlang/go的Editor,实现了key word的关键字。
卖弄下自己写的Editor的语法着色
上面这个就是我基于QScintilla做的一个DSL语言的Editor,支持语法的高亮。

这里已经实现了注释的颜色灰色显示, key用深蓝色,value用浅绿色,title大号字体显示。不过这个是个DSL的语言,呵呵。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文