最近要写.g4文件,上网找antlr的Emacs支持,发现内置有一个antlr-mode,但效果好像不是很好(也许是我配置的问题?)最后在GitHub找到了AntlrVSIX,一个VS的插件。正当打算关闭标签页的时候,突然看到支持LSP。于是就折腾了一下。(官方其实也有说支持Emacs)
官方的教程: AntlrVSIX/Emacs at master · kaby76/AntlrVSIX (github.com)
官方的实在是太麻烦了,于是我写了:
(straight-use-package
'(el-patch :type git :host github :repo "kaby76/AntlrVSIX"))
和
(add-to-list 'lsp-language-id-configuration
'(antlr-mode . "antlr"))
(lsp-register-client
(make-lsp-client :new-connection (lsp-stdio-connection "~/.emacs.d/straight/repos/AntlrVSIX/Server/bin/Release/Server.exe") ;; change if needed!!!
:activation-fn (lsp-activate-on "antlr")
:server-id 'AntlrVSIX))
其中lsp-stdio-connection的路径要给到Server.exe。至于Server.exe,则需要用dotnet手动编译一下AntlrVSIX项目下的Server,建议用Release的配置。
(本来有图片的但是新人只能添加一条媒体条目TaT)
图中编译出来的Server.exe就是我们需要的目标。
另外,这个文件夹可以单独分出来,不影响运行。所以其实也可以编译一次后就将AntlrVSIX删掉。
还有,不知道为什么Emacs不支持识别.g4文件,所以加上:
;; recognize *.g4 as an antlr file
(add-to-list 'auto-mode-alist '("\\.g4\\'" . antlr-mode))
随便打开一个文件写一点东西,效果如下:
(本来有图片的但是新人只能添加一条媒体条目TaT)
还是蛮不错的。
附注:官方给出的features列表:
(本来有图片的但是新人只能添加一条媒体条目TaT)
附注2:本人萌新一枚,初入Emacs,请各位大佬多多批评指教!