我测试了 SublimeText 2 和 3,两者都有错误:
如果您测试此代码,您会注意到
:
之后的所有代码都不会正确突出显示语法。
def foo(a, b) -> str:
# Nothing gets properly colored from here
# A bunch of code…
return "bar"
我发现了一些链接,解释了如何添加您自己的语法突出显示规则,但我没有找到如何修改那些已经实现的规则以尝试修复它们。
编辑: 现在知道在哪里修改默认语法突出显示规则感谢 MattDMo,我尝试更改我的文件第 385 行
<key>end</key>
<string>(\))\s*(?:(\:)|(.*$\n?))</string>
到
<key>end</key>
<string>(\))\s*(?:\->\s*[A-Za-z_][A-Za-z0-9_]*\s*)?(?:(\:)|(.*$\n?))</string>
但它不起作用。
你遇到的问题是 Sublime Text 使用正则表达式来定义语法高亮规则,而你的修改并没有完全捕捉到 Python 3 类型提示的语法。
以下是一种修复 Python 3 类型提示语法高亮的方法:
- 找到 Sublime Text 的 Python 语法定义文件。
这个文件的位置可能因操作系统而异,但通常可以在 Sublime Text 的安装目录下的 "Packages" 文件夹中找到,名为 "Python.sublime-package"。
-
Windows:
C:\Users\{用户名}\AppData\Roaming\Sublime Text 3\Packages\Python.sublime-package
-
macOS:
~/Library/Application Support/Sublime Text 3/Packages/Python.sublime-package
-
Linux:
~/.config/sublime-text-3/Packages/Python.sublime-package
注意: ".sublime-package" 文件实际上是一个 zip 压缩包。 你可以使用任何解压缩软件打开它。
-
打开 "Python.tmLanguage" 文件进行编辑。
-
找到 "Function" 的定义块。 你可以使用搜索功能 (Ctrl+F / Cmd+F) 查找
<key>name</key><string>Function</string>
。 -
修改 "end" 键对应的正则表达式。 将原来的表达式:
xml
<key>end</key>
<string>(\))\s*(?:(\:)|(.*$\n?))</string>
替换为:
xml
<key>end</key>
<string>(\))\s*(?:->\s*[A-Za-z_][A-Za-z0-9\[\], ]*\s*)?(?:(\:)|(.*$\n?))</string>
这个新的正则表达式添加了对类型提示语法的支持,包括:
-
->
符号
- 类型名称(例如
str
,
int
,
List[str]
)
- 可选的空格
-
保存修改后的 "Python.tmLanguage" 文件。
-
重启 Sublime Text。
现在,Sublime Text 应该能够正确识别 Python 3 的类型提示语法并进行高亮显示。
注意: 修改核心语法文件可能会导致 Sublime Text 更新出现问题。 最佳做法是将修改后的文件保存在用户自定义的包中,以避免与未来的更新冲突。 你可以在 Sublime Text 的菜单中选择 "Preferences" -> "Browse Packages..." 打开用户自定义包目录。
标签:python,syntax-highlighting,sublimetext,python-typing From: 18407025