mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	vim-patch:partial:dd60c365cd26 (#22437)
vim-patch:partial:dd60c365cd26
Update runtime files
dd60c365cd
Co-authored-by: Bram Moolenaar <Bram@vim.org>
Skip: eval.txt, repeat.txt (needs `getscriptinfo()`)
			
			
This commit is contained in:
		| @@ -1,7 +1,7 @@ | ||||
| " Vim syntax file | ||||
| " Language:	Python | ||||
| " Maintainer:	Zvezdan Petkovic <zpetkovic@acm.org> | ||||
| " Last Change:	2022 Jun 28 | ||||
| " Last Change:	2023 Feb 26 | ||||
| " Credits:	Neil Schemenauer <nas@python.ca> | ||||
| "		Dmitry Vasiliev | ||||
| " | ||||
| @@ -35,12 +35,26 @@ | ||||
| " | ||||
| "   let python_highlight_all = 1 | ||||
| " | ||||
| " The use of Python 2 compatible syntax highlighting can be enforced. | ||||
| " The straddling code (Python 2 and 3 compatible), up to Python 3.5, | ||||
| " will be also supported. | ||||
| " | ||||
| "   let python_use_python2_syntax = 1 | ||||
| " | ||||
| " This option will exclude all modern Python 3.6 or higher features. | ||||
| " | ||||
|  | ||||
| " quit when a syntax file was already loaded. | ||||
| if exists("b:current_syntax") | ||||
|   finish | ||||
| endif | ||||
|  | ||||
| " Use of Python 2 and 3.5 or lower requested. | ||||
| if exists("python_use_python2_syntax") | ||||
|   runtime! syntax/python2.vim | ||||
|   finish | ||||
| endif | ||||
|  | ||||
| " We need nocompatible mode in order to continue lines with backslashes. | ||||
| " Original setting will be restored. | ||||
| let s:cpo_save = &cpo | ||||
| @@ -91,8 +105,8 @@ syn keyword pythonInclude	from import | ||||
| syn keyword pythonAsync		async await | ||||
|  | ||||
| " Soft keywords | ||||
| " These keywords do not mean anything unless used in the right context | ||||
| " See https://docs.python.org/3/reference/lexical_analysis.html#soft-keywords  | ||||
| " These keywords do not mean anything unless used in the right context. | ||||
| " See https://docs.python.org/3/reference/lexical_analysis.html#soft-keywords | ||||
| " for more on this. | ||||
| syn match   pythonConditional   "^\s*\zscase\%(\s\+.*:.*$\)\@=" | ||||
| syn match   pythonConditional   "^\s*\zsmatch\%(\s\+.*:\s*\%(#.*\)\=$\)\@=" | ||||
|   | ||||
							
								
								
									
										345
									
								
								runtime/syntax/python2.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										345
									
								
								runtime/syntax/python2.vim
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,345 @@ | ||||
| " Vim syntax file | ||||
| " Language:	Python 2 | ||||
| " Maintainer:	Zvezdan Petkovic <zpetkovic@acm.org> | ||||
| " Last Change:	2016 Oct 29 | ||||
| " Credits:	Neil Schemenauer <nas@python.ca> | ||||
| "		Dmitry Vasiliev | ||||
| " | ||||
| "		This version is a major rewrite by Zvezdan Petkovic. | ||||
| " | ||||
| "		- introduced highlighting of doctests | ||||
| "		- updated keywords, built-ins, and exceptions | ||||
| "		- corrected regular expressions for | ||||
| " | ||||
| "		  * functions | ||||
| "		  * decorators | ||||
| "		  * strings | ||||
| "		  * escapes | ||||
| "		  * numbers | ||||
| "		  * space error | ||||
| " | ||||
| "		- corrected synchronization | ||||
| "		- more highlighting is ON by default, except | ||||
| "		- space error highlighting is OFF by default | ||||
| " | ||||
| " Optional highlighting can be controlled using these variables. | ||||
| " | ||||
| "   let python_no_builtin_highlight = 1 | ||||
| "   let python_no_doctest_code_highlight = 1 | ||||
| "   let python_no_doctest_highlight = 1 | ||||
| "   let python_no_exception_highlight = 1 | ||||
| "   let python_no_number_highlight = 1 | ||||
| "   let python_space_error_highlight = 1 | ||||
| " | ||||
| " All the options above can be switched on together. | ||||
| " | ||||
| "   let python_highlight_all = 1 | ||||
| " | ||||
| """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | ||||
| " NOTE: This file is a copy of the last commit of runtime/syntax/python.vim | ||||
| " that still supported Python 2. There is support for Python 3, up to 3.5, | ||||
| " and it was kept in the file as is, because it supports the straddling code | ||||
| " (Python 2 and 3 compatible) better. | ||||
| """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | ||||
|  | ||||
| " quit when a syntax file was already loaded. | ||||
| if exists("b:current_syntax") | ||||
|   finish | ||||
| endif | ||||
|  | ||||
| " We need nocompatible mode in order to continue lines with backslashes. | ||||
| " Original setting will be restored. | ||||
| let s:cpo_save = &cpo | ||||
| set cpo&vim | ||||
|  | ||||
| if exists("python_no_doctest_highlight") | ||||
|   let python_no_doctest_code_highlight = 1 | ||||
| endif | ||||
|  | ||||
| if exists("python_highlight_all") | ||||
|   if exists("python_no_builtin_highlight") | ||||
|     unlet python_no_builtin_highlight | ||||
|   endif | ||||
|   if exists("python_no_doctest_code_highlight") | ||||
|     unlet python_no_doctest_code_highlight | ||||
|   endif | ||||
|   if exists("python_no_doctest_highlight") | ||||
|     unlet python_no_doctest_highlight | ||||
|   endif | ||||
|   if exists("python_no_exception_highlight") | ||||
|     unlet python_no_exception_highlight | ||||
|   endif | ||||
|   if exists("python_no_number_highlight") | ||||
|     unlet python_no_number_highlight | ||||
|   endif | ||||
|   let python_space_error_highlight = 1 | ||||
| endif | ||||
|  | ||||
| " Keep Python keywords in alphabetical order inside groups for easy | ||||
| " comparison with the table in the 'Python Language Reference' | ||||
| " https://docs.python.org/2/reference/lexical_analysis.html#keywords, | ||||
| " https://docs.python.org/3/reference/lexical_analysis.html#keywords. | ||||
| " Groups are in the order presented in NAMING CONVENTIONS in syntax.txt. | ||||
| " Exceptions come last at the end of each group (class and def below). | ||||
| " | ||||
| " Keywords 'with' and 'as' are new in Python 2.6 | ||||
| " (use 'from __future__ import with_statement' in Python 2.5). | ||||
| " | ||||
| " Some compromises had to be made to support both Python 3 and 2. | ||||
| " We include Python 3 features, but when a definition is duplicated, | ||||
| " the last definition takes precedence. | ||||
| " | ||||
| " - 'False', 'None', and 'True' are keywords in Python 3 but they are | ||||
| "   built-ins in 2 and will be highlighted as built-ins below. | ||||
| " - 'exec' is a built-in in Python 3 and will be highlighted as | ||||
| "   built-in below. | ||||
| " - 'nonlocal' is a keyword in Python 3 and will be highlighted. | ||||
| " - 'print' is a built-in in Python 3 and will be highlighted as | ||||
| "   built-in below (use 'from __future__ import print_function' in 2) | ||||
| " - async and await were added in Python 3.5 and are soft keywords. | ||||
| " | ||||
| syn keyword pythonStatement	False None True | ||||
| syn keyword pythonStatement	as assert break continue del exec global | ||||
| syn keyword pythonStatement	lambda nonlocal pass print return with yield | ||||
| syn keyword pythonStatement	class def nextgroup=pythonFunction skipwhite | ||||
| syn keyword pythonConditional	elif else if | ||||
| syn keyword pythonRepeat	for while | ||||
| syn keyword pythonOperator	and in is not or | ||||
| syn keyword pythonException	except finally raise try | ||||
| syn keyword pythonInclude	from import | ||||
| syn keyword pythonAsync		async await | ||||
|  | ||||
| " Decorators (new in Python 2.4) | ||||
| " A dot must be allowed because of @MyClass.myfunc decorators. | ||||
| syn match   pythonDecorator	"@" display contained | ||||
| syn match   pythonDecoratorName	"@\s*\h\%(\w\|\.\)*" display contains=pythonDecorator | ||||
|  | ||||
| " Python 3.5 introduced the use of the same symbol for matrix multiplication: | ||||
| " https://www.python.org/dev/peps/pep-0465/.  We now have to exclude the | ||||
| " symbol from highlighting when used in that context. | ||||
| " Single line multiplication. | ||||
| syn match   pythonMatrixMultiply | ||||
|       \ "\%(\w\|[])]\)\s*@" | ||||
|       \ contains=ALLBUT,pythonDecoratorName,pythonDecorator,pythonFunction,pythonDoctestValue | ||||
|       \ transparent | ||||
| " Multiplication continued on the next line after backslash. | ||||
| syn match   pythonMatrixMultiply | ||||
|       \ "[^\\]\\\s*\n\%(\s*\.\.\.\s\)\=\s\+@" | ||||
|       \ contains=ALLBUT,pythonDecoratorName,pythonDecorator,pythonFunction,pythonDoctestValue | ||||
|       \ transparent | ||||
| " Multiplication in a parenthesized expression over multiple lines with @ at | ||||
| " the start of each continued line; very similar to decorators and complex. | ||||
| syn match   pythonMatrixMultiply | ||||
|       \ "^\s*\%(\%(>>>\|\.\.\.\)\s\+\)\=\zs\%(\h\|\%(\h\|[[(]\).\{-}\%(\w\|[])]\)\)\s*\n\%(\s*\.\.\.\s\)\=\s\+@\%(.\{-}\n\%(\s*\.\.\.\s\)\=\s\+@\)*" | ||||
|       \ contains=ALLBUT,pythonDecoratorName,pythonDecorator,pythonFunction,pythonDoctestValue | ||||
|       \ transparent | ||||
|  | ||||
| syn match   pythonFunction	"\h\w*" display contained | ||||
|  | ||||
| syn match   pythonComment	"#.*$" contains=pythonTodo,@Spell | ||||
| syn keyword pythonTodo		FIXME NOTE NOTES TODO XXX contained | ||||
|  | ||||
| " Triple-quoted strings can contain doctests. | ||||
| syn region  pythonString matchgroup=pythonQuotes | ||||
|       \ start=+[uU]\=\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1" | ||||
|       \ contains=pythonEscape,@Spell | ||||
| syn region  pythonString matchgroup=pythonTripleQuotes | ||||
|       \ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend | ||||
|       \ contains=pythonEscape,pythonSpaceError,pythonDoctest,@Spell | ||||
| syn region  pythonRawString matchgroup=pythonQuotes | ||||
|       \ start=+[uU]\=[rR]\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1" | ||||
|       \ contains=@Spell | ||||
| syn region  pythonRawString matchgroup=pythonTripleQuotes | ||||
|       \ start=+[uU]\=[rR]\z('''\|"""\)+ end="\z1" keepend | ||||
|       \ contains=pythonSpaceError,pythonDoctest,@Spell | ||||
|  | ||||
| syn match   pythonEscape	+\\[abfnrtv'"\\]+ contained | ||||
| syn match   pythonEscape	"\\\o\{1,3}" contained | ||||
| syn match   pythonEscape	"\\x\x\{2}" contained | ||||
| syn match   pythonEscape	"\%(\\u\x\{4}\|\\U\x\{8}\)" contained | ||||
| " Python allows case-insensitive Unicode IDs: http://www.unicode.org/charts/ | ||||
| syn match   pythonEscape	"\\N{\a\+\%(\s\a\+\)*}" contained | ||||
| syn match   pythonEscape	"\\$" | ||||
|  | ||||
| " It is very important to understand all details before changing the | ||||
| " regular expressions below or their order. | ||||
| " The word boundaries are *not* the floating-point number boundaries | ||||
| " because of a possible leading or trailing decimal point. | ||||
| " The expressions below ensure that all valid number literals are | ||||
| " highlighted, and invalid number literals are not.  For example, | ||||
| " | ||||
| " - a decimal point in '4.' at the end of a line is highlighted, | ||||
| " - a second dot in 1.0.0 is not highlighted, | ||||
| " - 08 is not highlighted, | ||||
| " - 08e0 or 08j are highlighted, | ||||
| " | ||||
| " and so on, as specified in the 'Python Language Reference'. | ||||
| " https://docs.python.org/2/reference/lexical_analysis.html#numeric-literals | ||||
| " https://docs.python.org/3/reference/lexical_analysis.html#numeric-literals | ||||
| if !exists("python_no_number_highlight") | ||||
|   " numbers (including longs and complex) | ||||
|   syn match   pythonNumber	"\<0[oO]\=\o\+[Ll]\=\>" | ||||
|   syn match   pythonNumber	"\<0[xX]\x\+[Ll]\=\>" | ||||
|   syn match   pythonNumber	"\<0[bB][01]\+[Ll]\=\>" | ||||
|   syn match   pythonNumber	"\<\%([1-9]\d*\|0\)[Ll]\=\>" | ||||
|   syn match   pythonNumber	"\<\d\+[jJ]\>" | ||||
|   syn match   pythonNumber	"\<\d\+[eE][+-]\=\d\+[jJ]\=\>" | ||||
|   syn match   pythonNumber | ||||
| 	\ "\<\d\+\.\%([eE][+-]\=\d\+\)\=[jJ]\=\%(\W\|$\)\@=" | ||||
|   syn match   pythonNumber | ||||
| 	\ "\%(^\|\W\)\zs\d*\.\d\+\%([eE][+-]\=\d\+\)\=[jJ]\=\>" | ||||
| endif | ||||
|  | ||||
| " Group the built-ins in the order in the 'Python Library Reference' for | ||||
| " easier comparison. | ||||
| " https://docs.python.org/2/library/constants.html | ||||
| " https://docs.python.org/3/library/constants.html | ||||
| " http://docs.python.org/2/library/functions.html | ||||
| " http://docs.python.org/3/library/functions.html | ||||
| " http://docs.python.org/2/library/functions.html#non-essential-built-in-functions | ||||
| " http://docs.python.org/3/library/functions.html#non-essential-built-in-functions | ||||
| " Python built-in functions are in alphabetical order. | ||||
| if !exists("python_no_builtin_highlight") | ||||
|   " built-in constants | ||||
|   " 'False', 'True', and 'None' are also reserved words in Python 3 | ||||
|   syn keyword pythonBuiltin	False True None | ||||
|   syn keyword pythonBuiltin	NotImplemented Ellipsis __debug__ | ||||
|   " built-in functions | ||||
|   syn keyword pythonBuiltin	abs all any bin bool bytearray callable chr | ||||
|   syn keyword pythonBuiltin	classmethod compile complex delattr dict dir | ||||
|   syn keyword pythonBuiltin	divmod enumerate eval filter float format | ||||
|   syn keyword pythonBuiltin	frozenset getattr globals hasattr hash | ||||
|   syn keyword pythonBuiltin	help hex id input int isinstance | ||||
|   syn keyword pythonBuiltin	issubclass iter len list locals map max | ||||
|   syn keyword pythonBuiltin	memoryview min next object oct open ord pow | ||||
|   syn keyword pythonBuiltin	print property range repr reversed round set | ||||
|   syn keyword pythonBuiltin	setattr slice sorted staticmethod str | ||||
|   syn keyword pythonBuiltin	sum super tuple type vars zip __import__ | ||||
|   " Python 2 only | ||||
|   syn keyword pythonBuiltin	basestring cmp execfile file | ||||
|   syn keyword pythonBuiltin	long raw_input reduce reload unichr | ||||
|   syn keyword pythonBuiltin	unicode xrange | ||||
|   " Python 3 only | ||||
|   syn keyword pythonBuiltin	ascii bytes exec | ||||
|   " non-essential built-in functions; Python 2 only | ||||
|   syn keyword pythonBuiltin	apply buffer coerce intern | ||||
|   " avoid highlighting attributes as builtins | ||||
|   syn match   pythonAttribute	/\.\h\w*/hs=s+1 | ||||
| 	\ contains=ALLBUT,pythonBuiltin,pythonFunction,pythonAsync | ||||
| 	\ transparent | ||||
| endif | ||||
|  | ||||
| " From the 'Python Library Reference' class hierarchy at the bottom. | ||||
| " http://docs.python.org/2/library/exceptions.html | ||||
| " http://docs.python.org/3/library/exceptions.html | ||||
| if !exists("python_no_exception_highlight") | ||||
|   " builtin base exceptions (used mostly as base classes for other exceptions) | ||||
|   syn keyword pythonExceptions	BaseException Exception | ||||
|   syn keyword pythonExceptions	ArithmeticError BufferError | ||||
|   syn keyword pythonExceptions	LookupError | ||||
|   " builtin base exceptions removed in Python 3 | ||||
|   syn keyword pythonExceptions	EnvironmentError StandardError | ||||
|   " builtin exceptions (actually raised) | ||||
|   syn keyword pythonExceptions	AssertionError AttributeError | ||||
|   syn keyword pythonExceptions	EOFError FloatingPointError GeneratorExit | ||||
|   syn keyword pythonExceptions	ImportError IndentationError | ||||
|   syn keyword pythonExceptions	IndexError KeyError KeyboardInterrupt | ||||
|   syn keyword pythonExceptions	MemoryError NameError NotImplementedError | ||||
|   syn keyword pythonExceptions	OSError OverflowError ReferenceError | ||||
|   syn keyword pythonExceptions	RuntimeError StopIteration SyntaxError | ||||
|   syn keyword pythonExceptions	SystemError SystemExit TabError TypeError | ||||
|   syn keyword pythonExceptions	UnboundLocalError UnicodeError | ||||
|   syn keyword pythonExceptions	UnicodeDecodeError UnicodeEncodeError | ||||
|   syn keyword pythonExceptions	UnicodeTranslateError ValueError | ||||
|   syn keyword pythonExceptions	ZeroDivisionError | ||||
|   " builtin OS exceptions in Python 3 | ||||
|   syn keyword pythonExceptions	BlockingIOError BrokenPipeError | ||||
|   syn keyword pythonExceptions	ChildProcessError ConnectionAbortedError | ||||
|   syn keyword pythonExceptions	ConnectionError ConnectionRefusedError | ||||
|   syn keyword pythonExceptions	ConnectionResetError FileExistsError | ||||
|   syn keyword pythonExceptions	FileNotFoundError InterruptedError | ||||
|   syn keyword pythonExceptions	IsADirectoryError NotADirectoryError | ||||
|   syn keyword pythonExceptions	PermissionError ProcessLookupError | ||||
|   syn keyword pythonExceptions	RecursionError StopAsyncIteration | ||||
|   syn keyword pythonExceptions	TimeoutError | ||||
|   " builtin exceptions deprecated/removed in Python 3 | ||||
|   syn keyword pythonExceptions	IOError VMSError WindowsError | ||||
|   " builtin warnings | ||||
|   syn keyword pythonExceptions	BytesWarning DeprecationWarning FutureWarning | ||||
|   syn keyword pythonExceptions	ImportWarning PendingDeprecationWarning | ||||
|   syn keyword pythonExceptions	RuntimeWarning SyntaxWarning UnicodeWarning | ||||
|   syn keyword pythonExceptions	UserWarning Warning | ||||
|   " builtin warnings in Python 3 | ||||
|   syn keyword pythonExceptions	ResourceWarning | ||||
| endif | ||||
|  | ||||
| if exists("python_space_error_highlight") | ||||
|   " trailing whitespace | ||||
|   syn match   pythonSpaceError	display excludenl "\s\+$" | ||||
|   " mixed tabs and spaces | ||||
|   syn match   pythonSpaceError	display " \+\t" | ||||
|   syn match   pythonSpaceError	display "\t\+ " | ||||
| endif | ||||
|  | ||||
| " Do not spell doctests inside strings. | ||||
| " Notice that the end of a string, either ''', or """, will end the contained | ||||
| " doctest too.  Thus, we do *not* need to have it as an end pattern. | ||||
| if !exists("python_no_doctest_highlight") | ||||
|   if !exists("python_no_doctest_code_highlight") | ||||
|     syn region pythonDoctest | ||||
| 	  \ start="^\s*>>>\s" end="^\s*$" | ||||
| 	  \ contained contains=ALLBUT,pythonDoctest,pythonFunction,@Spell | ||||
|     syn region pythonDoctestValue | ||||
| 	  \ start=+^\s*\%(>>>\s\|\.\.\.\s\|"""\|'''\)\@!\S\++ end="$" | ||||
| 	  \ contained | ||||
|   else | ||||
|     syn region pythonDoctest | ||||
| 	  \ start="^\s*>>>" end="^\s*$" | ||||
| 	  \ contained contains=@NoSpell | ||||
|   endif | ||||
| endif | ||||
|  | ||||
| " Sync at the beginning of class, function, or method definition. | ||||
| syn sync match pythonSync grouphere NONE "^\%(def\|class\)\s\+\h\w*\s*[(:]" | ||||
|  | ||||
| " The default highlight links.  Can be overridden later. | ||||
| hi def link pythonStatement		Statement | ||||
| hi def link pythonConditional		Conditional | ||||
| hi def link pythonRepeat		Repeat | ||||
| hi def link pythonOperator		Operator | ||||
| hi def link pythonException		Exception | ||||
| hi def link pythonInclude		Include | ||||
| hi def link pythonAsync			Statement | ||||
| hi def link pythonDecorator		Define | ||||
| hi def link pythonDecoratorName		Function | ||||
| hi def link pythonFunction		Function | ||||
| hi def link pythonComment		Comment | ||||
| hi def link pythonTodo			Todo | ||||
| hi def link pythonString		String | ||||
| hi def link pythonRawString		String | ||||
| hi def link pythonQuotes		String | ||||
| hi def link pythonTripleQuotes		pythonQuotes | ||||
| hi def link pythonEscape		Special | ||||
| if !exists("python_no_number_highlight") | ||||
|   hi def link pythonNumber		Number | ||||
| endif | ||||
| if !exists("python_no_builtin_highlight") | ||||
|   hi def link pythonBuiltin		Function | ||||
| endif | ||||
| if !exists("python_no_exception_highlight") | ||||
|   hi def link pythonExceptions		Structure | ||||
| endif | ||||
| if exists("python_space_error_highlight") | ||||
|   hi def link pythonSpaceError		Error | ||||
| endif | ||||
| if !exists("python_no_doctest_highlight") | ||||
|   hi def link pythonDoctest		Special | ||||
|   hi def link pythonDoctestValue	Define | ||||
| endif | ||||
|  | ||||
| let b:current_syntax = "python" | ||||
|  | ||||
| let &cpo = s:cpo_save | ||||
| unlet s:cpo_save | ||||
|  | ||||
| " vim:set sw=2 sts=2 ts=8 noet: | ||||
							
								
								
									
										17
									
								
								runtime/syntax/quarto.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								runtime/syntax/quarto.vim
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| " Language: Quarto (Markdown with chunks of R, Python and other languages) | ||||
| " Provisory Maintainer: Jakson Aquino <jalvesaq@gmail.com> | ||||
| " Homepage: https://github.com/jalvesaq/R-Vim-runtime | ||||
| " Last Change: Fri Feb 24, 2023  08:26AM | ||||
| " | ||||
| " The developers of tools for Quarto maintain Vim runtime files in their | ||||
| " Github repository and, if required, I will hand over the maintenance of | ||||
| " this script for them. | ||||
|  | ||||
| runtime syntax/rmd.vim | ||||
|  | ||||
| syn match quartoShortarg /\S\+/ contained | ||||
| syn keyword quartoShortkey var meta env pagebreak video include contained | ||||
| syn region quartoShortcode matchgroup=PreProc start='{{< ' end=' >}}' contains=quartoShortkey,quartoShortarg transparent keepend | ||||
|  | ||||
| hi def link quartoShortkey Include | ||||
| hi def link quartoShortarg String | ||||
| @@ -5,7 +5,7 @@ | ||||
| " 		      Tom Payne <tom@tompayne.org> | ||||
| " Contributor:        Johannes Ranke <jranke@uni-bremen.de> | ||||
| " Homepage:           https://github.com/jalvesaq/R-Vim-runtime | ||||
| " Last Change:	      Sun Mar 28, 2021  01:47PM | ||||
| " Last Change:	      Thu Nov 17, 2022  10:13PM | ||||
| " Filenames:	      *.R *.r *.Rhistory *.Rt | ||||
| " | ||||
| " NOTE: The highlighting of R functions might be defined in | ||||
| @@ -65,41 +65,35 @@ if g:r_syntax_hl_roxygen | ||||
|   " roxygen line containing only a roxygen comment marker, optionally followed | ||||
|   " by whitespace is called an empty roxygen line. | ||||
|  | ||||
|   syn match rOCommentKey "^\s*#\{1,2}'" contained | ||||
|   syn region rOExamples start="^\s*#\{1,2}' @examples.*"rs=e+1,hs=e+1 end="^\(#\{1,2}' @.*\)\@=" end="^\(#\{1,2}'\)\@!" contained contains=rOTag fold | ||||
|    | ||||
|   " R6 classes may contain roxygen lines independent of roxygen blocks | ||||
|   syn region rOR6Class start=/R6Class(/ end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold | ||||
|   syn match rOR6Block "#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained | ||||
|   syn match rOR6Block "^\s*#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained | ||||
|  | ||||
|   " First we match all roxygen blocks as containing only a title. In case an | ||||
|   " empty roxygen line ending the title or a tag is found, this will be | ||||
|   " overridden later by the definitions of rOBlock. | ||||
|   syn match rOTitleBlock "\%^\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag | ||||
|   syn match rOTitleBlock "^\s*\n\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag | ||||
|   syn match rOTitleBlock "\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag | ||||
|  | ||||
|   " A title as part of a block is always at the beginning of the block, i.e. | ||||
|   " either at the start of a file or after a completely empty line. | ||||
|   syn match rOTitle "\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag | ||||
|   syn match rOTitle "^\s*\n\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag | ||||
|   syn match rOTitle "\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag | ||||
|   syn match rOTitleTag contained "@title" | ||||
|  | ||||
|   " When a roxygen block has a title and additional content, the title | ||||
|   " consists of one or more roxygen lines (as little as possible are matched), | ||||
|   " followed either by an empty roxygen line | ||||
|   syn region rOBlock start="\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold | ||||
|   syn region rOBlock start="^\s*\n\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold | ||||
|   syn region rOBlock start="\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold | ||||
|  | ||||
|   " or by a roxygen tag (we match everything starting with @ but not @@ which is used as escape sequence for a literal @). | ||||
|   syn region rOBlock start="\%^\(\s*#\{1,2}' .*\n\)\{-}\s*#\{1,2}' @\(@\)\@!" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold | ||||
|   syn region rOBlock start="^\s*\n\(\s*#\{1,2}' .*\n\)\{-}\s*#\{1,2}' @\(@\)\@!" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold | ||||
|   syn region rOBlock start="\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{-}\s*#\{1,2}' @\(@\)\@!" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold | ||||
|  | ||||
|   " If a block contains an @rdname, @describeIn tag, it may have paragraph breaks, but does not have a title | ||||
|   syn region rOBlockNoTitle start="\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @rdname" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold | ||||
|   syn region rOBlockNoTitle start="^\s*\n\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @rdname" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold | ||||
|   syn region rOBlockNoTitle start="\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @describeIn" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold | ||||
|   syn region rOBlockNoTitle start="^\s*\n\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @describeIn" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold | ||||
|  | ||||
|   syn match rOCommentKey "^\s*#\{1,2}'" contained | ||||
|   syn region rOExamples start="^\s*#\{1,2}' @examples.*"rs=e+1,hs=e+1 end="^\(#\{1,2}' @.*\)\@=" end="^\(#\{1,2}'\)\@!" contained contains=rOTag fold | ||||
|  | ||||
|   " R6 classes may contain roxygen lines independent of roxygen blocks | ||||
|   syn region rOR6Class start=/R6Class(/ end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold | ||||
|   syn match rOR6Block "#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained | ||||
|   syn match rOR6Block "^\s*#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained | ||||
|   syn region rOBlockNoTitle start="\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @rdname" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold | ||||
|   syn region rOBlockNoTitle start="\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @describeIn" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold | ||||
|  | ||||
|   " rOTag list originally generated from the lists that were available in | ||||
|   " https://github.com/klutometis/roxygen/R/rd.R and | ||||
| @@ -245,14 +239,15 @@ syn match rOperator    "&" | ||||
| syn match rOperator    '-' | ||||
| syn match rOperator    '\*' | ||||
| syn match rOperator    '+' | ||||
| if &filetype != "rmd" && &filetype != "rrst" | ||||
|   syn match rOperator    "[|!<>^~/:]" | ||||
| else | ||||
| if &filetype == "quarto" || &filetype == "rmd" || &filetype == "rrst" | ||||
|   syn match rOperator    "[|!<>^~`/:]" | ||||
| else | ||||
|   syn match rOperator    "[|!<>^~/:]" | ||||
| endif | ||||
| syn match rOperator    "%\{2}\|%\S\{-}%" | ||||
| syn match rOperator '\([!><]\)\@<==' | ||||
| syn match rOperator '==' | ||||
| syn match rOperator '|>' | ||||
| syn match rOpError  '\*\{3}' | ||||
| syn match rOpError  '//' | ||||
| syn match rOpError  '&&&' | ||||
| @@ -318,10 +313,13 @@ if &filetype == "rhelp" | ||||
| endif | ||||
|  | ||||
| " Type | ||||
| syn match rType "\\" | ||||
| syn keyword rType array category character complex double function integer list logical matrix numeric vector data.frame | ||||
|  | ||||
| " Name of object with spaces | ||||
| if &filetype != "rmd" && &filetype != "rrst" | ||||
| if &filetype == "rmd" || &filetype == "rrst" || &filetype == "quarto" | ||||
|   syn region rNameWSpace start="`" end="`" contains=rSpaceFun containedin=rmdrChunk | ||||
| else | ||||
|   syn region rNameWSpace start="`" end="`" contains=rSpaceFun | ||||
| endif | ||||
|  | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| " markdown Text with R statements | ||||
| " Language: markdown with R code chunks | ||||
| " Language: Markdown with chunks of R, Python and other languages | ||||
| " Maintainer: Jakson Aquino <jalvesaq@gmail.com> | ||||
| " Homepage: https://github.com/jalvesaq/R-Vim-runtime | ||||
| " Last Change: Wed Apr 21, 2021  09:55AM | ||||
| " Last Change: Fri Feb 24, 2023  08:28AM | ||||
| " | ||||
| "   For highlighting pandoc extensions to markdown like citations and TeX and | ||||
| "   many other advanced features like folding of markdown sections, it is | ||||
| @@ -13,63 +13,120 @@ if exists("b:current_syntax") | ||||
|   finish | ||||
| endif | ||||
|  | ||||
| let s:cpo_save = &cpo | ||||
| set cpo&vim | ||||
|  | ||||
| " Highlight the header of the chunks as R code | ||||
| let g:rmd_syn_hl_chunk = get(g:, 'rmd_syn_hl_chunk', 0) | ||||
|  | ||||
| " Pandoc-syntax has more features, but it is slower. | ||||
| " https://github.com/vim-pandoc/vim-pandoc-syntax | ||||
| let g:pandoc#syntax#codeblocks#embeds#langs = get(g:, 'pandoc#syntax#codeblocks#embeds#langs', ['r']) | ||||
|  | ||||
| " Don't waste time loading syntax that will be discarded: | ||||
| let s:save_pandoc_lngs = get(g:, 'pandoc#syntax#codeblocks#embeds#langs', []) | ||||
| let g:pandoc#syntax#codeblocks#embeds#langs = [] | ||||
|  | ||||
| " Step_1: Source pandoc.vim if it is installed: | ||||
| runtime syntax/pandoc.vim | ||||
| if exists("b:current_syntax") | ||||
|   " Recognize inline R code | ||||
|   syn region rmdrInline matchgroup=rmdInlineDelim start="`r "  end="`" contains=@R containedin=pandocLaTeXRegion,yamlFlowString keepend | ||||
|   hi def link rmdInlineDelim Delimiter | ||||
|  | ||||
|   " Fix recognition of language chunks (code adapted from pandoc, 2021-03-28) | ||||
|   " Knitr requires braces in the block's header | ||||
|   for s:lng in g:pandoc#syntax#codeblocks#embeds#langs | ||||
|     let s:nm = matchstr(s:lng, '^[^=]*') | ||||
|     exe 'syn clear pandocDelimitedCodeBlock_'.s:nm | ||||
|     exe 'syn clear pandocDelimitedCodeBlockinBlockQuote_'.s:nm | ||||
|     if g:rmd_syn_hl_chunk | ||||
|       exe 'syn region rmd'.s:nm.'ChunkDelim matchgroup=rmdCodeDelim start="^\s*```\s*{\s*'.s:nm.'\>" matchgroup=rmdCodeDelim end="}$" keepend containedin=rmd'.s:nm.'Chunk contains=@R' | ||||
|       exe 'syn region rmd'.s:nm.'Chunk start="^\s*```\s*{\s*'.s:nm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=rmd'.s:nm.'ChunkDelim,@'.toupper(s:nm) | ||||
|     else | ||||
|       exe 'syn region rmd'.s:nm.'Chunk matchgroup=rmdCodeDelim start="^\s*```\s*{\s*'.s:nm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=@'.toupper(s:nm) | ||||
|     endif | ||||
|   endfor | ||||
|   unlet s:lng | ||||
|   unlet s:nm | ||||
|   hi def link rmdInlineDelim Delimiter | ||||
|   hi def link rmdCodeDelim Delimiter | ||||
|   let b:current_syntax = "rmd" | ||||
|   finish | ||||
| endif | ||||
|  | ||||
| " Configuration if not using pandoc syntax: | ||||
| " Add syntax highlighting of YAML header | ||||
| let g:rmd_syn_hl_yaml = get(g:, 'rmd_syn_hl_yaml', 1) | ||||
| " Add syntax highlighting of citation keys | ||||
| let g:rmd_syn_hl_citations = get(g:, 'rmd_syn_hl_citations', 1) | ||||
|  | ||||
| let s:cpo_save = &cpo | ||||
| set cpo&vim | ||||
|  | ||||
| " R chunks will not be highlighted by syntax/markdown because their headers | ||||
| " follow a non standard pattern: "```{lang" instead of "^```lang". | ||||
| " Make a copy of g:markdown_fenced_languages to highlight the chunks later: | ||||
| if exists('g:markdown_fenced_languages') | ||||
|   if !exists('g:rmd_fenced_languages') | ||||
|     let g:rmd_fenced_languages = deepcopy(g:markdown_fenced_languages) | ||||
|     let g:markdown_fenced_languages = [] | ||||
|   if hlexists('pandocDelimitedCodeBlock') | ||||
|     syn clear pandocDelimitedCodeBlock | ||||
|   endif | ||||
|  | ||||
|   if len(s:save_pandoc_lngs) > 0 && !exists('g:rmd_fenced_languages') | ||||
|     let g:rmd_fenced_languages = deepcopy(s:save_pandoc_lngs) | ||||
|   endif | ||||
|  | ||||
|   " Recognize inline R code | ||||
|   syn region rmdrInline matchgroup=rmdInlineDelim start="`r "  end="`" contains=@Rmdr containedin=pandocLaTeXRegion,yamlFlowString keepend | ||||
| else | ||||
|   let g:rmd_fenced_languages = ['r'] | ||||
|   " Step_2: Source markdown.vim if pandoc.vim is not installed | ||||
|  | ||||
|   " Configuration if not using pandoc syntax: | ||||
|   " Add syntax highlighting of YAML header | ||||
|   let g:rmd_syn_hl_yaml = get(g:, 'rmd_syn_hl_yaml', 1) | ||||
|   " Add syntax highlighting of citation keys | ||||
|   let g:rmd_syn_hl_citations = get(g:, 'rmd_syn_hl_citations', 1) | ||||
|  | ||||
|   " R chunks will not be highlighted by syntax/markdown because their headers | ||||
|   " follow a non standard pattern: "```{lang" instead of "^```lang". | ||||
|   " Make a copy of g:markdown_fenced_languages to highlight the chunks later: | ||||
|   if exists('g:markdown_fenced_languages') && !exists('g:rmd_fenced_languages') | ||||
|     let g:rmd_fenced_languages = deepcopy(g:markdown_fenced_languages) | ||||
|   endif | ||||
|  | ||||
|   if exists('g:markdown_fenced_languages') && len(g:markdown_fenced_languages) > 0 | ||||
|     let s:save_mfl = deepcopy(g:markdown_fenced_languages) | ||||
|   endif | ||||
|   " Don't waste time loading syntax that will be discarded: | ||||
|   let g:markdown_fenced_languages = [] | ||||
|   runtime syntax/markdown.vim | ||||
|   if exists('s:save_mfl') > 0 | ||||
|     let g:markdown_fenced_languages = deepcopy(s:save_mfl) | ||||
|     unlet s:save_mfl | ||||
|   endif | ||||
|   syn region rmdrInline matchgroup=rmdInlineDelim start="`r "  end="`" contains=@Rmdr keepend | ||||
|  | ||||
|   " Step_2a: Add highlighting for both YAML and citations which are pandoc | ||||
|   " specific, but also used in Rmd files | ||||
|  | ||||
|   " You don't need this if either your markdown/syntax.vim already highlights | ||||
|   " the YAML header or you are writing standard markdown | ||||
|   if g:rmd_syn_hl_yaml | ||||
|     " Basic highlighting of YAML header | ||||
|     syn match rmdYamlFieldTtl /^\s*\zs\w\%(-\|\w\)*\ze:/ contained | ||||
|     syn match rmdYamlFieldTtl /^\s*-\s*\zs\w\%(-\|\w\)*\ze:/ contained | ||||
|     syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start='"' skip='\\"' end='"' contains=yamlEscape,rmdrInline contained | ||||
|     syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start="'" skip="''"  end="'" contains=yamlSingleEscape,rmdrInline contained | ||||
|     syn match  yamlEscape contained '\\\%([\\"abefnrtv\^0_ NLP\n]\|x\x\x\|u\x\{4}\|U\x\{8}\)' | ||||
|     syn match  yamlSingleEscape contained "''" | ||||
|     syn match yamlComment /#.*/ contained | ||||
|     " A second colon is a syntax error, unles within a string or following !expr | ||||
|     syn match yamlColonError /:\s*[^'^"^!]*:/ contained | ||||
|     if &filetype == 'quarto' | ||||
|       syn region pandocYAMLHeader matchgroup=rmdYamlBlockDelim start=/\%(\%^\|\_^\s*\n\)\@<=\_^-\{3}\ze\n.\+/ end=/^---$/ keepend contains=rmdYamlFieldTtl,yamlFlowString,yamlComment,yamlColonError | ||||
|     else | ||||
|       syn region pandocYAMLHeader matchgroup=rmdYamlBlockDelim start=/\%(\%^\|\_^\s*\n\)\@<=\_^-\{3}\ze\n.\+/ end=/^\([-.]\)\1\{2}$/ keepend contains=rmdYamlFieldTtl,yamlFlowString,yamlComment,yamlColonError | ||||
|     endif | ||||
|     hi def link rmdYamlBlockDelim Delimiter | ||||
|     hi def link rmdYamlFieldTtl Identifier | ||||
|     hi def link yamlFlowString String | ||||
|     hi def link yamlComment Comment | ||||
|     hi def link yamlColonError Error | ||||
|   endif | ||||
|  | ||||
|   " You don't need this if either your markdown/syntax.vim already highlights | ||||
|   " citations or you are writing standard markdown | ||||
|   if g:rmd_syn_hl_citations | ||||
|     " From vim-pandoc-syntax | ||||
|     " parenthetical citations | ||||
|     syn match pandocPCite /\^\@<!\[[^\[\]]\{-}-\{0,1}@[[:alnum:]_][[:alnum:]à-öø-ÿÀ-ÖØ-ß_:.#$%&\-+?<>~\/]*.\{-}\]/ contains=pandocEmphasis,pandocStrong,pandocLatex,pandocCiteKey,@Spell,pandocAmpersandEscape display | ||||
|     " in-text citations with location | ||||
|     syn match pandocICite /@[[:alnum:]_][[:alnum:]à-öø-ÿÀ-ÖØ-ß_:.#$%&\-+?<>~\/]*\s\[.\{-1,}\]/ contains=pandocCiteKey,@Spell display | ||||
|     " cite keys | ||||
|     syn match pandocCiteKey /\(-\=@[[:alnum:]_][[:alnum:]à-öø-ÿÀ-ÖØ-ß_:.#$%&\-+?<>~\/]*\)/ containedin=pandocPCite,pandocICite contains=@NoSpell display | ||||
|     syn match pandocCiteAnchor /[-@]/ contained containedin=pandocCiteKey display | ||||
|     syn match pandocCiteLocator /[\[\]]/ contained containedin=pandocPCite,pandocICite | ||||
|     hi def link pandocPCite Operator | ||||
|     hi def link pandocICite Operator | ||||
|     hi def link pandocCiteKey Label | ||||
|     hi def link pandocCiteAnchor Operator | ||||
|     hi def link pandocCiteLocator Operator | ||||
|   endif | ||||
| endif | ||||
|  | ||||
| runtime syntax/markdown.vim | ||||
| " Step_3: Highlight code blocks. | ||||
|  | ||||
| syn region rmdCodeBlock matchgroup=rmdCodeDelim start="^\s*```\s*{.*}$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend | ||||
| syn region rmdCodeBlock matchgroup=rmdCodeDelim start="^\s*```.+$" matchgroup=rmdCodeDelim end="^```$" keepend | ||||
| hi link rmdCodeBlock Special | ||||
|  | ||||
| " Now highlight chunks: | ||||
| syn region knitrBodyOptions start='^#| ' end='$' contained  containedin=rComment,pythonComment contains=knitrBodyVar,knitrBodyValue transparent | ||||
| syn match knitrBodyValue ': \zs.*\ze$' keepend contained containedin=knitrBodyOptions | ||||
| syn match knitrBodyVar '| \zs\S\{-}\ze:' contained containedin=knitrBodyOptions | ||||
|  | ||||
| let g:rmd_fenced_languages = get(g:, 'rmd_fenced_languages', ['r']) | ||||
| for s:type in g:rmd_fenced_languages | ||||
|   if s:type =~ '=' | ||||
|     let s:ft = substitute(s:type, '.*=', '', '') | ||||
| @@ -81,58 +138,40 @@ for s:type in g:rmd_fenced_languages | ||||
|   unlet! b:current_syntax | ||||
|   exe 'syn include @Rmd'.s:nm.' syntax/'.s:ft.'.vim' | ||||
|   if g:rmd_syn_hl_chunk | ||||
|     exe 'syn region rmd'.s:nm.'ChunkDelim matchgroup=rmdCodeDelim start="^\s*```\s*{\s*'.s:nm.'\>" matchgroup=rmdCodeDelim end="}$" keepend containedin=rmd'.s:nm.'Chunk contains=@Rmdr' | ||||
|     exe 'syn region rmd'.s:nm.'Chunk start="^\s*```\s*{\s*'.s:nm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=rmd'.s:nm.'ChunkDelim,@Rmd'.s:nm | ||||
|     exe 'syn match knitrChunkDelim /```\s*{\s*'.s:nm.'/ contained containedin=knitrChunkBrace contains=knitrChunkLabel' | ||||
|     exe 'syn match knitrChunkLabelDelim /```\s*{\s*'.s:nm.',\=\s*[-[:alnum:]]\{-1,}[,}]/ contained containedin=knitrChunkBrace' | ||||
|     syn match knitrChunkDelim /}\s*$/ contained containedin=knitrChunkBrace | ||||
|     exe 'syn match knitrChunkBrace /```\s*{\s*'.s:nm.'.*$/ contained containedin=rmd'.s:nm.'Chunk contains=knitrChunkDelim,knitrChunkLabelDelim,@Rmd'.s:nm | ||||
|     exe 'syn region rmd'.s:nm.'Chunk start="^\s*```\s*{\s*=\?'.s:nm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=knitrChunkBrace,@Rmd'.s:nm | ||||
|  | ||||
|     hi link knitrChunkLabel Identifier | ||||
|     hi link knitrChunkDelim rmdCodeDelim | ||||
|     hi link knitrChunkLabelDelim rmdCodeDelim | ||||
|   else | ||||
|     exe 'syn region rmd'.s:nm.'Chunk matchgroup=rmdCodeDelim start="^\s*```\s*{\s*'.s:nm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=@Rmd'.s:nm | ||||
|     exe 'syn region rmd'.s:nm.'Chunk matchgroup=rmdCodeDelim start="^\s*```\s*{\s*=\?'.s:nm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=@Rmd'.s:nm | ||||
|   endif | ||||
| endfor | ||||
| unlet! s:type | ||||
|  | ||||
| " Recognize inline R code | ||||
| syn region rmdrInline matchgroup=rmdInlineDelim start="`r "  end="`" contains=@Rmdr keepend | ||||
| " Step_4: Highlight code recognized by pandoc but not defined in pandoc.vim yet: | ||||
| syn match pandocDivBegin '^:::\+ {.\{-}}' contains=pandocHeaderAttr | ||||
| syn match pandocDivEnd '^:::\+$' | ||||
|  | ||||
| hi def link knitrBodyVar PreProc | ||||
| hi def link knitrBodyValue Constant | ||||
| hi def link knitrBodyOptions rComment | ||||
| hi def link pandocDivBegin Delimiter | ||||
| hi def link pandocDivEnd Delimiter | ||||
| hi def link rmdInlineDelim Delimiter | ||||
| hi def link rmdCodeDelim Delimiter | ||||
|  | ||||
| " You don't need this if either your markdown/syntax.vim already highlights | ||||
| " the YAML header or you are writing standard markdown | ||||
| if g:rmd_syn_hl_yaml | ||||
|   " Minimum highlighting of yaml header | ||||
|   syn match rmdYamlFieldTtl /^\s*\zs\w*\ze:/ contained | ||||
|   syn match rmdYamlFieldTtl /^\s*-\s*\zs\w*\ze:/ contained | ||||
|   syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start='"' skip='\\"' end='"' contains=yamlEscape,rmdrInline contained | ||||
|   syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start="'" skip="''"  end="'" contains=yamlSingleEscape,rmdrInline contained | ||||
|   syn match  yamlEscape contained '\\\%([\\"abefnrtv\^0_ NLP\n]\|x\x\x\|u\x\{4}\|U\x\{8}\)' | ||||
|   syn match  yamlSingleEscape contained "''" | ||||
|   syn region pandocYAMLHeader matchgroup=rmdYamlBlockDelim start=/\%(\%^\|\_^\s*\n\)\@<=\_^-\{3}\ze\n.\+/ end=/^\([-.]\)\1\{2}$/ keepend contains=rmdYamlFieldTtl,yamlFlowString | ||||
|   hi def link rmdYamlBlockDelim Delimiter | ||||
|   hi def link rmdYamlFieldTtl Identifier | ||||
|   hi def link yamlFlowString String | ||||
| if len(s:save_pandoc_lngs) | ||||
|   let g:pandoc#syntax#codeblocks#embeds#langs = s:save_pandoc_lngs | ||||
| endif | ||||
|  | ||||
| " You don't need this if either your markdown/syntax.vim already highlights | ||||
| " citations or you are writing standard markdown | ||||
| if g:rmd_syn_hl_citations | ||||
|   " From vim-pandoc-syntax | ||||
|   " parenthetical citations | ||||
|   syn match pandocPCite /\^\@<!\[[^\[\]]\{-}-\{0,1}@[[:alnum:]_][[:alnum:]à-öø-ÿÀ-ÖØ-ß_:.#$%&\-+?<>~\/]*.\{-}\]/ contains=pandocEmphasis,pandocStrong,pandocLatex,pandocCiteKey,@Spell,pandocAmpersandEscape display | ||||
|   " in-text citations with location | ||||
|   syn match pandocICite /@[[:alnum:]_][[:alnum:]à-öø-ÿÀ-ÖØ-ß_:.#$%&\-+?<>~\/]*\s\[.\{-1,}\]/ contains=pandocCiteKey,@Spell display | ||||
|   " cite keys | ||||
|   syn match pandocCiteKey /\(-\=@[[:alnum:]_][[:alnum:]à-öø-ÿÀ-ÖØ-ß_:.#$%&\-+?<>~\/]*\)/ containedin=pandocPCite,pandocICite contains=@NoSpell display | ||||
|   syn match pandocCiteAnchor /[-@]/ contained containedin=pandocCiteKey display | ||||
|   syn match pandocCiteLocator /[\[\]]/ contained containedin=pandocPCite,pandocICite | ||||
|   hi def link pandocPCite Operator | ||||
|   hi def link pandocICite Operator | ||||
|   hi def link pandocCiteKey Label | ||||
|   hi def link pandocCiteAnchor Operator | ||||
|   hi def link pandocCiteLocator Operator | ||||
| endif | ||||
|  | ||||
| let b:current_syntax = "rmd" | ||||
|  | ||||
| unlet s:save_pandoc_lngs | ||||
| let &cpo = s:cpo_save | ||||
| unlet s:cpo_save | ||||
|  | ||||
| let b:current_syntax = "rmd" | ||||
|  | ||||
| " vim: ts=8 sw=2 | ||||
|   | ||||
| @@ -2,8 +2,8 @@ | ||||
| " Language:		shell (sh) Korn shell (ksh) bash (sh) | ||||
| " Maintainer:		Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> | ||||
| " Previous Maintainer:	Lennart Schultz <Lennart.Schultz@ecmwf.int> | ||||
| " Last Change:		Dec 20, 2022 | ||||
| " Version:		205 | ||||
| " Last Change:		Feb 11, 2023 | ||||
| " Version:		207 | ||||
| " URL:		http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH | ||||
| " For options and settings, please use:      :help ft-sh-syntax | ||||
| " This file includes many ideas from Eric Brunet (eric.brunet@ens.fr) and heredoc fixes from Felipe Contreras | ||||
| @@ -166,7 +166,7 @@ if exists("b:is_kornshell") || exists("b:is_bash") | ||||
|  syn cluster shLoopoList	add=shForPP | ||||
| endif | ||||
| syn cluster shPPSLeftList	contains=shAlias,shArithmetic,shCmdParenRegion,shCommandSub,shCtrlSeq,shDeref,shDerefSimple,shDoubleQuote,shEcho,shEscape,shExDoubleQuote,shExpr,shExSingleQuote,shHereDoc,shNumber,shOperator,shOption,shPosnParm,shHereString,shRedir,shSingleQuote,shSpecial,shStatement,shSubSh,shTest,shVariable | ||||
| syn cluster shPPSRightList	contains=shComment,shDeref,shDerefSimple,shEscape,shPosnParm | ||||
| syn cluster shPPSRightList	contains=shDeref,shDerefSimple,shEscape,shPosnParm | ||||
| syn cluster shSubShList	contains=@shCommandSubList,shCommandSubBQ,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shIf,shHereString,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq,shOperator | ||||
| syn cluster shTestList	contains=shArithmetic,shCharClass,shCommandSub,shCommandSubBQ,shCtrlSeq,shDeref,shDerefSimple,shDoubleQuote,shSpecialDQ,shExDoubleQuote,shExpr,shExSingleQuote,shNumber,shOperator,shSingleQuote,shTest,shTestOpr | ||||
| syn cluster shNoZSList	contains=shSpecialNoZS | ||||
| @@ -335,7 +335,7 @@ syn match   shEscape	contained	'\%(^\)\@!\%(\\\\\)*\\.'	nextgroup=shComment | ||||
| " systems too, however, so the following syntax will flag $(..) as | ||||
| " an Error under /bin/sh.  By consensus of vimdev'ers! | ||||
| if exists("b:is_kornshell") || exists("b:is_bash") || exists("b:is_posix") | ||||
|  syn region shCommandSub matchgroup=shCmdSubRegion start="\$(\ze[^(]\|$"  skip='\\\\\|\\.' end=")"  contains=@shCommandSubList | ||||
|  syn region shCommandSub matchgroup=shCmdSubRegion start="\$(\ze[^(]"  skip='\\\\\|\\.' end=")"  contains=@shCommandSubList | ||||
|  syn region shArithmetic matchgroup=shArithRegion  start="\$((" skip='\\\\\|\\.' end="))" contains=@shArithList | ||||
|  syn region shArithmetic matchgroup=shArithRegion  start="\$\[" skip='\\\\\|\\.' end="\]" contains=@shArithList | ||||
|  syn match  shSkipInitWS contained	"^\s\+" | ||||
| @@ -503,7 +503,6 @@ endif | ||||
| " ksh: ${.sh.*} variables: {{{1 | ||||
| " ======================================== | ||||
| if exists("b:is_kornshell") | ||||
| " syn match  shDerefVar	contained	"[.]*"	nextgroup=@shDerefVarList | ||||
|  syn match  shDerefVar	contained	"\.\+"	nextgroup=@shDerefVarList | ||||
| endif | ||||
|  | ||||
| @@ -548,6 +547,7 @@ syn region  shDerefVarArray   contained	matchgroup=shDeref start="\[" end="]"	co | ||||
| "        bash : ${parameter,pattern}  Case modification | ||||
| "        bash : ${parameter,,pattern} Case modification | ||||
| "        bash : ${@:start:qty}        display command line arguments from start to start+qty-1 (inferred) | ||||
| "        bash : ${parameter@operator} transforms parameter (operator∈[uULqEPARa]) | ||||
| syn cluster shDerefPatternList	contains=shDerefPattern,shDerefString | ||||
| if !exists("g:sh_no_error") | ||||
|  syn match shDerefOpError	contained	":[[:punct:]]" | ||||
| @@ -563,6 +563,7 @@ if exists("b:is_bash") || exists("b:is_kornshell") || exists("b:is_posix") | ||||
| endif | ||||
| if exists("b:is_bash") | ||||
|  syn match  shDerefOp	contained	"[,^]\{1,2}"	nextgroup=@shDerefPatternList | ||||
|  syn match  shDerefOp	contained	"@[uULQEPAKa]" | ||||
| endif | ||||
| syn region shDerefString	contained	matchgroup=shDerefDelim start=+\%(\\\)\@<!'+ end=+'+	contains=shStringSpecial | ||||
| syn region shDerefString	contained	matchgroup=shDerefDelim start=+\%(\\\)\@<!"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Christian Clason
					Christian Clason