首页 > 编程问答 >如何让SublimeText支持Python 3的注释?

如何让SublimeText支持Python 3的注释?

时间:2024-07-23 12:20:50浏览次数:10  
标签:python syntax-highlighting sublimetext python-typing

我测试了 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 类型提示语法高亮的方法:

  1. 找到 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 压缩包。 你可以使用任何解压缩软件打开它。

  1. 打开 "Python.tmLanguage" 文件进行编辑。

  2. 找到 "Function" 的定义块。 你可以使用搜索功能 (Ctrl+F / Cmd+F) 查找 <key>name</key><string>Function</string>

  3. 修改 "end" 键对应的正则表达式。 将原来的表达式:

xml <key>end</key> <string>(\))\s*(?:(\:)|(.*$\n?))</string>

替换为:

xml <key>end</key> <string>(\))\s*(?:-&gt;\s*[A-Za-z_][A-Za-z0-9\[\], ]*\s*)?(?:(\:)|(.*$\n?))</string>

这个新的正则表达式添加了对类型提示语法的支持,包括: - -> 符号 - 类型名称(例如 str , int , List[str] ) - 可选的空格

  1. 保存修改后的 "Python.tmLanguage" 文件。

  2. 重启 Sublime Text。

现在,Sublime Text 应该能够正确识别 Python 3 的类型提示语法并进行高亮显示。

注意: 修改核心语法文件可能会导致 Sublime Text 更新出现问题。 最佳做法是将修改后的文件保存在用户自定义的包中,以避免与未来的更新冲突。 你可以在 Sublime Text 的菜单中选择 "Preferences" -> "Browse Packages..." 打开用户自定义包目录。

标签:python,syntax-highlighting,sublimetext,python-typing
From: 18407025

相关文章

  • 如何用可变长度注释Python列表
    如何为可变长度或None的Python列表编写注释?当我这样写时,它会返回一个错误。defsome_function(params:list[str,...])#thisgiveserror:`TypeError:'type'objectisnotsubscriptable`defsome_function(params:List[str,...])#thisalsogiveserro......
  • Python 协议和 Django 模型
    假设我有一个简单的协议A和一个未能实现该协议的类B:fromtypingimportProtocolclassA(Protocol):deffoo(self)->str:...classB:pass当下面的代码进行类型检查时,Mypy将正确地抱怨x:A=B()mypy.error:Incompatibletypes......
  • Python字段的字符串注释
    Python是否支持类字段的任何类型的字符串注释?例如,在Golang中,我可以定义这样的结构,带有可选的字符串标签:typeUserstruct{Namestring`example:"name"`}我需要在Python中定义一个新类,其中包含包含点.的字段名称。我希望可能有某种方法来注释字段,或者......
  • 具有未定义变量和注释的有效 Python 行
    我来了一篇文章,其中包含未定义的变量名称和某些类型注释。该行有效。它有什么作用以及可能的用途是什么?withundefinedvariablenamewithsometypeannotation.Thelineisvalid.Whatitdoesandwhatarepossibleusages?>>>x:int>>>xTraceback(mostr......
  • 使用 Python 通过逻辑应用运行长时间运行的 Azure Functions
    我已经尝试解决这个问题有一段时间了,但我似乎找不到解决方案。因此,正如标题所示,我试图通过函数在逻辑应用程序中运行长时间运行的操作。我有一个python代码,可以比较2个excel文件并进行一些转换。它工作正常,但是,Excel文件包含近20k行(它是动态的,将来会添加更多行),因此......
  • 使用递归函数计算阶乘时,我在 python 中遇到类型错误
    defcalc_fact(n):如果(n==1或n==0):返回1别的:n*calc_fact(n-1)print(calc_fact(5))试图创建函数来计算阶乘,不支持类型错误操作数*:对于int或Nonetype我不知道为什么谢谢Python代码中出现“类型错误:不支持的操作数类型为*:'int'和'NoneType'”表明你......
  • 如何调试 python Flask [84] [CRITICAL] WORKER TIMEOUT?
    调试:gtts.tts:保存到temp.mp37月22日09:10:56PM[2024-07-2215:40:56+0000][84][严重]工作超时(pid:87)|||7月22日09:10:56PM[2024-07-2215:40:56+0000][87][INFO]工人退出(pid:87)7月22日09:10:57PM[2024-07-2215:40:57+0000][95][INF......
  • 类型错误:无法将函数返回值转换为 Python 类型!签名是 () -> 处理 anaconda spider
    这是代码:importosimportrandomimportnumpyasnpimportpandasaspdimporttensorflowastffromtensorflow.kerasimportbackendasKfromtensorflow.keras.layersimportDense,Dropout,Flatten,Conv2D,MaxPool2D,Input......
  • python进阶---闭包与装饰器
    一、闭包        在Python中,闭包是指一个函数内部定义的函数,这个内部函数可以访问并修改其外部函数的局部变量,即使外部函数已经执行完毕。闭包可以通过多层函数嵌套来实现。    闭包的三要素:    1、外部函数嵌套内部函数    2、外部函数返......
  • 强制从当前包自动导入的 Python 以此包的名称为前缀
    我在VSCode中使用Python和Pylance扩展。在我正在编辑的自己的包中,自动添加的导入(设置“导入格式:绝对”)如下所示:frommydirectory.myfileimportmyclass但是,我的Python包正在被被一个(非常愚蠢且不可协商的)外部系统消耗,该系统拒绝正确解释它,除非导入的格式特别......