如何为cgo(golang)获取语法高亮?

5

cgo是使用Go语言中的“注释”编写的,这意味着默认情况下它会给出注释语法突出显示。在cgo文件中,最好能够正确地突出显示Golang和C语法。

package main

// ... C code or #include here ...
import "C"

... Go code here ...

示例

我希望在Visual Studio Code或ViM中实现此功能。

该如何实现?


你可以在编辑器(vim、atom、vscode等)中添加cgo文件扩展名以进行语法高亮。你使用的是哪个编辑器? - jeevatkm
你使用的编辑器支持 cgo 的语法高亮吗? - Graham
我正在使用Atom,它为.go.c.h等文件提供了语法高亮。 - jeevatkm
我正在寻找不止是.go代码高亮的功能,我正在寻找在Go文件中以注释形式编写的C代码,即cgo。例如:https://github.com/AlekSi/cgo-by-example/blob/master/main.go#L4 - Graham
我怀疑你会得到一个。大多数语法高亮器都是使用编辑器中的文件扩展名来工作的。对于.go扩展名,它将把它视为go文件。祝你好运。 - jeevatkm
GoLand(IntelliJ的Go IDE)支持cgo C前言注释的语法高亮(请参见此处),因此,我的意思是这并不像每个人都说的那样“不可能”。但是,如果VSCode也能提供这个功能就太好了,因为我用它来编写Go代码。 - Nathan F.
2个回答

3

一种方法是将C代码放在头文件中,例如example.h,然后在您的Go程序中使用:

// #include "example.h"
import "C"

打开 example.h 文件时,你可以看到语法高亮。

另外,对于 ViM 用户,可以使用 SyntaxRange 插件来高亮显示 Go 代码中的 C 代码,但配置可能不是很简单。


1
我觉得,根据您的编辑器,这可能是不可能或者毫无意义的困难。
唯一能区分普通注释块和cgo使用的注释块的方法是,cgo块紧随其后有import "C"。根据您的编辑器所使用的语法高亮词法分析器的构建方式,它可能能够检测到,也可能无法检测到。
一个可能的部分解决方案是编写一个简化的C高亮器子集,仅影响明显的代码,然后将其应用于所有注释块。虽然不是非常好的解决方案,但总比没有强。
祝你好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接