ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

C Improved

abusalimov 全部

(不再维护) 改进的C/C++/Objective-C语法,特别支持Linux内核、CPython等源代码。

标签 语言语法

详情

安装次数

  • 总数 117K
  • Win 59K
  • Mac 19K
  • Linux 39K
8月6日 8月5日 8月4日 8月3日 8月2日 8月1日 7月31日 7月30日 7月29日 7月28日 7月27日 7月26日 7月25日 7月24日 7月23日 7月22日 7月21日 7月20日 7月19日 7月18日 7月17日 7月16日 7月15日 7月14日 7月13日 7月12日 7月11日 7月10日 7月9日 7月8日 7月7日 7月6日 7月5日 7月4日 7月3日 7月2日 7月1日 6月30日 6月29日 6月28日 6月27日 6月26日 6月25日 6月24日 6月23日 6月22日
Windows 5 2 0 1 2 5 4 5 2 5 4 4 3 8 6 5 3 2 5 6 2 6 2 3 4 4 5 4 30 4 6 2 4 2 5 7 36 2 4 5 5 6 12 7 2 2
Mac 0 1 0 1 1 0 3 0 1 0 0 1 1 0 0 0 0 0 1 1 0 1 0 1 3 0 0 0 0 1 1 0 2 0 1 0 0 0 0 0 0 1 1 0 0 1
Linux 2 2 2 2 2 1 1 2 0 4 2 0 2 1 0 0 1 1 0 5 1 0 3 2 1 3 1 2 3 3 2 0 2 0 1 0 2 2 1 1 1 0 1 1 1 1

README文件

源代码
raw.​githubusercontent.​com

Sublime C Improved

本软件包为Sublime Text提供了更好的C/C++/Objective-C语言支持。

它主要关注纯C的语法标注,覆盖了Sublime Text内置的标准语法定义,尽管一旦安装它也会影响到其他C系列语言。注意,C Improved本身仅提供语法定义和一些符号索引设置,没有更多功能。也就是说,它不是一个自维持的软件包,而仅仅是标准C++软件包的补充(改进)。

改进了什么?

C Improved的大多数功能都旨在简化日常C语言开发体验。这包括从启用操作符高亮到以下更复杂的增强功能。

预处理问题

C预处理指令相对简单,可以用正则表达式等手段分析。因此,首先解决了相关问题。

宏高亮和错误处理

宏参数(包括变长参数)和参数字符串化现在都有正确的高亮显示,并处理了一些常见的语法错误。

以下是一个相对复杂的多行宏的示例。

标准C C Improved
Standard C macros C Improved macros

以下是在注释掉一个 msg... 变长参数(但注释外缺少逗号)和意外地在某些行续符反斜杠后放制表符的结果。

标准C C Improved
Standard C macros C Improved macros

这两个错误在标准软件包中被忽略,而C Improved在第一个案例中高亮显示了一个未闭合的括号作为错误,并警告关于反斜杠后的尾部空格(第二个直接紧跟着一个警告,抱怨宏参数中出现了意外的行结束符)。请参见 问题 关于 space-after-continuation 高亮。

宏内部

一个宏体(如果有必要的换行续行,则进行)已无法再对符号索引做出贡献,也无法干扰围绕宏的代码,或者无论如何打破语法高亮。

标准C C Improved
Standard C macro symbols C Improved macro symbols

在这个例子中,标准C包识别宏内的check_range(...)为函数定义,尽管它实际上是一个函数调用。这导致高亮显示不正确,并为符号列表添加了一个错误的符号。此外,紧跟宏之后的函数声明(int irq_attach(...))根本没被识别。

预处理指令的作用域

现在所有预处理指令都提供了适当的作用域meta.preprocessor),这意味着您可以使用ctrl+shift+space++space选择整个宏。这也允许整个宏体具有不同的样式(这取决于颜色方案)。

对重要项目的支持

标准C包为C标准库和POSIX中的函数提供特别支持。例如,printf函数被不同方式高亮。

然而,大多数用C编写的最重要软件项目都有自己的内部库/框架,并在其源代码中使用了某些已建立的模式和习语。这包括常见的函数和类型集合;有些宏用于定义某些对象、特殊类型的函数属性/注释等。

如果您使用Sublime Text开发以下某些项目,您会发现这些改进非常有用。

Linux内核源代码

这为内核源代码中广泛使用的某些常用宏添加了特殊处理,如EXPORT_SYMBOLLIST_HEADDEFINE_XXX,否则它们会被识别为函数,从而污染符号索引和概要。

标准C C Improved
Standard C linux support C Improved linux support

Windows驱动器

提供对于此处列出(此处)的SAL函数注释的特殊高亮(相关问题)。

CPython解释器源代码

这包括

  • Python相关常量(如PyTruePyFalse)和主要数据结构(PyObjectPyTypeObjectPyListObject等)的高亮。
  • 广泛使用的PyMODINIT_FUNCPyAPI_FUNC(...)Py_LOCAL(...)函数注释。这清除了注释函数和符号索引的高亮。
  • 使用_PyIDENTIFIER(...)宏定义的PyId_xxx内部静态字符串字面量的特殊高亮。
  • 涉及控制转移的宏的高亮(如Py_RETURN_NONE)的良好标记。
标准C C Improved
Standard C CPython support C Improved CPython support

自定义类型/函数/宏的索引

您可以调整哪些符号可用于导航,并在符号索引或概要中可见。

以下作用域和默认首选项提供

作用域名 描述 概要
ctrl+R
索引(ST3) F12
ctrl+shift+R
entity.name.type 复合类型 可见 可见
entity.name.type.declaration 类型的正向声明 可见 隐藏
entity.name.type.typedef 类型别名(typedef 可见 可见
entity.name.function 函数定义 可见 可见
entity.name.function.declaration 函数声明 可见 隐藏
entity.name.function.preprocessor 函数宏 可见 可见
entity.name.constant.preprocessor 对象宏 可见 可见

这些设置可以通过.tmPreferences文件进行更改,请参阅Packages/C Improved/Symbol Index (*).tmPreferences

已删除的功能

#if 1 ... #else条件

标准语法高亮现在将#if 1条件后的#else部分识别为注释。这是一个非常好的特性,但它相当脆弱,有众多问题,例如未终止的块(预处理条件中的开/闭花括号)。因此,为了简化问题,决定完全删除它,仅留下#if 0处理,它相对稳定,实现也较为直接。

您可以选择一个没有这个限制的分支:preprocessor-cond-scopes

局部变量的声明/初始化

C语言在某些部分可能非常复杂,例如相关于指针声明(什么是t * v?是简单的乘法还是指名为t类型的指针的声明v?)。不用多说,使用正则表达式是无法解析C语言的。因此,C Improved并不尝试识别变量声明,因此没有为它们提供不同的作用域/高亮显示。

有关这一点的讨论可以在相关的问题中找到。

安装

Package Control

安装Package Control

  • 打开命令面板(ctrl+shift+P++P
  • 选择Package Control: 安装包pkginst
  • 搜索包安装C Improvedcimp)并安装它

手动

找到Sublime Text的Packages目录(首选项 → 浏览包…)并将此仓库克隆到C Improved

git clone https://github.com/abusalimov/SublimeCImproved.git "C Improved"

用法

安装后,C Improved将在打开.c.h文件时代替标准C语法使用,除非您已经强制将这些扩展名与其它的东西绑定了。在这种情况下,您可以通过视图 → 语法 → 以当前扩展名作为…打开所有 → C Improved重新绑定它们。

从C衍生出来的其他语言(如C++和Objective C)不需要将其语法更改为特殊格式:它们通常在底层扩展source.c,现在由C Improved语法提供。