aboutsummaryrefslogtreecommitdiff
path: root/runtime/syntax/python.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/syntax/python.vim')
-rw-r--r--runtime/syntax/python.vim23
1 files changed, 13 insertions, 10 deletions
diff --git a/runtime/syntax/python.vim b/runtime/syntax/python.vim
index 61903802a6..ec3be3422b 100644
--- 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,pythonDoctest,pythonDoctestValue,@Spell
+syn match pythonFStringFieldSkip /(\_[^()]*)\|\[\_[^][]*]\|{\_[^{}]*}/
+ \ contained
+ \ contains=ALLBUT,pythonFStringField,pythonClass,pythonFunction,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