BBEdit 在语法着色时如何定义“预定义符号”?

BBEdit 在语法着色时如何定义“预定义符号”?

文本编辑器 BBEdit 为各种类别的源代码提供了语法着色选项,包括纯文本、注释、字符串、语言关键字等。其中一个类别是“预定义符号”,在 BBEdit 文档中定义为

预定义符号不是语言关键字的术语,而是由语言的参考实现预定义的,或者是语言的标准库/框架支持的一部分,或者对使用该语言编写代码的开发人员具有其他特殊含义。

当我在 BBEdit 中编辑 Python 文件时,我发现哪些符号会以这种样式着色是不可预测的。例如,内置常量NotImplementedEllipsis不会被着色为预定义符号,而像index或这样的词count,据我所知,在 Python 中没有固有的特殊含义,却会被着色。

BBEdit 如何决定以这种风格突出显示哪些符号?这可以在某处查看吗?更好的是,可以编辑吗?

答案1

Python 语言模型在 中定义。我将文档的和部分/Applications/BBEdit.app/Contents/PlugIns/Language Modules/Python.bblm/Contents/Info.plist中的符号与 Python 保留关键字和内置命令列表进行了比较。BBLMKeywordListBBLMPredefinedNamesList

语法着色列表中未出现几个 Python 关键字/内置函数,包括async、、、、和一些await更晦涩难懂的内容。我认为这些都是 Python3 功能,我知道直到 v3.7 才将它们添加为保留关键字,因此 BBEdit 的 Python 语法着色可能已经有一段时间没有更新以反映新的标记了。__debug__EllipsisNotImplementedasyncawait

但让我更感兴趣的是,还有大约一百件物品,出现在语法颜色列表中,但不是Python 关键字或内置命令:

  • 比较和成员方法:__cmp__,,,,,,,,__contains__​​__eq____ge____gt____le____lt____ne__
  • 迭代器方法__iter____next__
  • 序列方法:countindex(但不是可变序列方法,例如,,extend... )reverseinsert
  • 字符串方法:capitalize,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,(但不包括,,casefold或方法)​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​centercountencodeendswithexpandtabsfindformatformat_mapindexisalnumisalphaisasciiisdecimalisdigitisidentifierislowerisnumericisprintableisspaceistitleisupperjoinljustlowerlstripmaketranspartitionreplacerfindrindexrjustrpartitionrsplitrstripsplitsplitlinesstartswithstripswapcasetitletranslateupperzfillbytesbytesarraymemoryview
  • 设置方法:add,,,,,,,,,,,,,,,,clear​​​​​​​​​​​​copydifferencedifference_updatediscardintersectionintersection_updateisdisjointissubsetissupersetpopremovesymmetric_differencesymmetric_difference_updateunion
  • 字典方法:copy,,,,,,,,,fromkeys​​​​​getitemskeyspopitemsetdefaultupdatevalues
  • 上下文管理器方法__enter____exit__
  • 数字模块和类型:ComplexdecimalDecimalFractionfractionsIntegralNumbernumbers,(但不Rational包括,或)Realcmathrandomstatistics
  • 模块和类属性:__bases__,,,,,,__class____dict____mro____qualname____subclasses__
  • 常用约定:(self但不是cls

这些 token 中的绝大多数都是在内置类型Python 文档页面——但如上所述,还有许多其他类似的方法不是包括(例如MutableSequences或二进制序列,例如bytes)。我不知道选择所包含的特定标记的逻辑。

有一个 README 文件位于,/Users/[username]/Library/Application Support/BBEdit/Read Me.txt其中描述了如何向 BBEdit 添加自定义语言模型,其中包括一条注释

**注意**:不要打开 BBEdit 应用程序包来提取或修改其中的语言模块。那样会很疯狂。

但是,尽管这个警告可能是合理的,我仍然想删除所有这些不是关键字或语言内置函数的额外标记,以免它们被语法着色,所以我想我即将发现多少疯狂就是这样的……

相关内容