diff options
| author | zeertzjq <zeertzjq@outlook.com> | 2025-09-05 17:58:57 +0800 |
|---|---|---|
| committer | zeertzjq <zeertzjq@outlook.com> | 2025-09-06 07:07:34 +0800 |
| commit | 665d5d80ac0be2c26c12dedd305329370110deaf (patch) | |
| tree | 11e023cb82a928eefdf9773b7a2ba3e614741522 /runtime/syntax/python.vim | |
| parent | 069be911064d0e64f1efc13348dbb878afaf347f (diff) | |
vim-patch:d2b28dd: runtime(python): add syntax support inside f-strings
fixes: vim/vim#14033
closes: vim/vim#17962
https://github.com/vim/vim/commit/d2b28ddfc2a7350c2f63b75d06cc53d17b3a66ff
Co-authored-by: Rob B <github@0x7e.net>
Diffstat (limited to 'runtime/syntax/python.vim')
| -rw-r--r-- | runtime/syntax/python.vim | 23 |
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 |
