commit 7175fe87dc85e5c981cc837bd468bcebc5094117
parent 069be911064d0e64f1efc13348dbb878afaf347f
Author: zeertzjq <zeertzjq@outlook.com>
Date: Sat, 6 Sep 2025 08:03:37 +0800
Merge pull request #35645 from zeertzjq/vim-d2b28dd
vim-patch: Python syntax updates
Diffstat:
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/runtime/syntax/python.vim b/runtime/syntax/python.vim
@@ -1,7 +1,7 @@
" Vim syntax file
" Language: Python
" Maintainer: Zvezdan Petkovic <zpetkovic@acm.org>
-" Last Change: 2025 Aug 23
+" Last Change: 2025 Sep 05
" Credits: Neil Schemenauer <nas@python.ca>
" Dmitry Vasiliev
" Rob B
@@ -218,21 +218,24 @@ syn region pythonRawBytes
" F-string replacement fields
"
-" - Matched parentheses, brackets and braces are ignored
-" - A bare # is ignored to end of line
-" - A bare = (surrounded by optional whitespace) enables debugging
-" - A bare ! prefixes a conversion field
+" - Matched parentheses, brackets and braces are skipped
+" - A bare = (followed by optional whitespace) enables debugging
+" - A bare ! prefixes a conversion field (followed by optional whitespace)
" - A bare : begins a format specification
-" - Matched braces inside a format specification are ignored
+" - Matched braces inside a format specification are skipped
"
syn region pythonFStringField
\ matchgroup=pythonFStringDelimiter
\ start=/{/
- \ skip=/([^)]*)\|\[[^]]*]\|{[^}]*}\|#.*$/
- \ end=/\%(\s*=\s*\)\=\%(!\a\)\=\%(:\%({[^}]*}\|[^}]*\)\+\)\=}/
+ \ end=/\%(=\s*\)\=\%(!\a\s*\)\=\%(:\%({\_[^}]*}\|[^{}]*\)\+\)\=}/
\ contained
-" Doubled braces and Unicode escapes are not replacement fields
-syn match pythonFStringSkip /{{\|\\N{/ transparent contained contains=NONE
+ \ contains=ALLBUT,pythonFStringField,pythonClass,pythonFunction,pythonType,pythonDoctest,pythonDoctestValue,@Spell
+syn match pythonFStringFieldSkip /(\_[^()]*)\|\[\_[^][]*]\|{\_[^{}]*}/
+ \ contained
+ \ contains=ALLBUT,pythonFStringField,pythonClass,pythonFunction,pythonType,pythonDoctest,pythonDoctestValue,@Spell
+
+" Doubled braces are not replacement fields
+syn match pythonFStringSkip /{{/ transparent contained contains=NONE
syn match pythonEscape +\\[abfnrtv'"\\]+ contained
syn match pythonEscape "\\\o\{1,3}" contained