The best Python language definition for Sublime Text - ever. Includes full support for Unicode, as well as both Python 2 and Python 3 syntax. Check out the Neon Color Scheme for highlighting.
A better Python .tmLanguage
syntax highlighting definition for Sublime Text and TextMate. It includes support for both Python 2 and Python 3, and unlike any other Python syntax definition now fully supports Unicode identifiers anywhere in your code! It also provides its own improved regex syntax definition for inline highlighting of raw string literals.
Inspired by:
Python.tmLanguage
filesas well as a number of my own changes to make things more consistent and understandable. For customized syntax highlighting taking advantage of all the new scopes, use PythonImproved with the Neon Color Scheme, or modify your own favorite color scheme with the scopes below.
If you haven't already, install Package Control, then select Python Improved
from the Package Control: Install Package
option in the Command Palette. To use PythonImproved as your default Python syntax, open a .py
file, then select View -> Syntax -> Open all with current extension as... -> PythonImproved
.
While I haven't yet tried to install PythonImproved with TextMate, I can't think of a good reason as to why it wouldn't work. You could try putting it in the same directory as the standard Python.tmbundle
package, in the Syntaxes
subdirectory. Then, just pick PythonImproved
from the syntax menu.
If you prefer to modify your own color scheme, here is a list of new/modified scopes, along with some examples. It's not perfectly complete, but it's a start.
support.ipython.in
and support.ipython.out
: IPython In [1]:
/Out [1]:
fields — designed for use with SublimeREPL. The cell number can be themed with a different color using support.ipython.cell-number
.constant.numeric.integer.(long).binary.python
: binary literals 0b00101010
, 0b00101010L
keyword.control.import.python
now contains import
, from
, and as
support.type.exception.python
now matches any identifier that ends with Exception
or Error
, not just the built-in ones like IndentationError
or RuntimeException
, allowing for the highlighting of custom exceptions such as those included in third-party modules.punctuation.separator.annotation.python
, punctuation.separator.annotation.result.python
, punctuation.definition.parameters-group.begin.python
, and punctuation.definition.parameters-group.end.python
.def myfunc(self, # gotta have self
param1="value", # values are cool
param2=True, # or False, whatever
*args, # I'm here for an argument
**kwargs): # you never know
string.quoted.(single|double).(block|single-line).(bytes|bytes-raw|bytes-raw-regex).python
self|cls
in parameter strings: variable.parameter.function.(keyword|language)
comment.line.note.python
is a comment line that contains (BUG|FIXME|TODO|XXX)
at the beginning. comment.line.note.notation.python
matches the actual word itself, so you can differentially highlight the word and the whole line:constant.other.allcaps.python
captures variable names that are in all caps (OPENING_PORT
, for example), assuming the convention that these are generally treated as constants in the code. Matches CONSTANT
, class.CONSTANT
and the CONSTANT
part of CLASS.CONSTANT
, but not CLASS.function()
, class.FUNCTION()
, or FUNCTION()
.0o123
is matched as well as the old-style 0123
any()
, dict()
, len()
, raw_input()
, etc. now have their arguments highlighted just like any other function. Many thanks to @facelessuser for the regex, and @FichteFoll for valuable discussion. For those working with Python 2, print
is still a standalone keyword (as are assert
and del
).support.function.magic
and support.function.builtin
have now been split in two — name
and call
, so that __init__
(support.function.magic.name.python
), for example, can be themed differently than __init__()
(support.function.magic.call.python
).support.variable.magic
).support.type
now contains only what's defined in https://docs.python.org/X/library/functions.html and stdtypes.html (where X
is 2
or 3
) where the item is a class. They are highlighted as such only if not followed by an opening parenthesis — if it is, it's highlighted as support.function.builtin.call
. This addresses #16.\n
, \'
, \\
, etc.) are now individually named as constant.character.escape.*
, where *
is newline
, single-quote
, backslash
, etc..YAML-tmLanguage
file in the repo, which I use for my day-to-day work (I really hate debugging regexes embedded in XML). Install PackageDev
for syntax highlighting, and tools for converting between YAML, JSON, and XML/Plist formats. Neon of course has great coloring for the .YAML-tmLanguage
format, and especially the regexes :)Regular Expressions (Python Improved).tmLanguage
file, instead of the builtin Python regular expressions definition. If you're using Neon for syntax highlighting (or any color scheme that highlights regexes), use a lowercase r
to denote your string as containing a regex (i.e., r"\b(?i:(0[o]?[0-7]+))"
). However, if you're just using a raw string literal to, for example, define a Windows path and you don't want regex highlighing for all the back slashes and whatnot, use an uppercase R
(R"C:\Users\MattDMo"
). Python can't tell the difference, but it will look nicer in your editor..sublime-syntax
files, I'm going to begin transitioning PI over to that format. If you'd like to contribute, chime in on this issue. One major advantage will be fixing this bug with raw string literals.If you have questions, concerns, or suggested improvements, I'd love to hear from you! Feel free to open an issue or send a pull request and I'll get back to you as soon as I can. You can also email me at [email protected] or find me on Twitter @MattDMo.
© 2013-2022 Matt Morrison [email protected].
This is free software. It is licensed under the MIT License. Feel free to use this in your own work. However, if you modify and/or redistribute it, please attribute me in some way, and it would be great if you distribute your work under this or a similar license, but it's not required.. A shout-out or a beer would be appreciated.