Sintaxis de color mixto en vim


12

A menudo escribo documentos en knitr usando vim, lo que significa que tengo un código de descuento mezclado con el código R. Me gustaría tener coloración de sintaxis R en fragmentos R, pero rebaja o no coloración en todos los demás fragmentos. ¿Es esto factible? ¿Cómo?


3
Creo que puedes, trata de mirar vim.wikia.com/wiki/…
nobe4

55
Dependiendo de su complemento de descuento, es posible que ya no tenga soporte para la coloración de sintaxis de los "bloques de código" incluidos. En el primer caso, (solo) tendrá que modificar la sintaxis del complemento para reconocer sus "fragmentos R" como bloques de código válidos. En el segundo caso, quizás pueda inspirarse en el vimrc de Junegunn, especialmente las funciones s:syntax_includey s:file_type_handler: github.com/junegunn/dotfiles/blob/master/vimrc
VanLaser

55
¿Es este un archivo de descuento que tiene código R dentro de bloques de código? Si es así, es posible que desee agregar R a su g:markdown_fenced_languagesen, vimrcpor ejemplo, let g: markdown_fenced_languages ​​= ['r'] `. Supongo que está utilizando la sintaxis de descuento predeterminada proporcionada por Tim Pope. Más sobre los idiomas vallados
Peter Rincker

1
Los archivos de sintaxis de Vim son, como la mayoría de las cosas en Vim, solo una secuencia de comandos Ex colocados en un archivo. Puede incluir uno, dos, tres o tantos como desee. Crear un archivo de sintaxis que resalte algunos bloques como el idioma A y otros bloques como el idioma B no es tan difícil (en realidad, acabo de hacer esto en otra respuesta ). Sin embargo, no estoy completamente seguro de cómo se ven los documentos "knitr". ¿Es esto solo Markdown? O una sintaxis diferente?
Martin Tournoij

Respuestas:


2

Como señala Peter Rincker , el formato de rebaja estándar de Vim ya incluye soporte para resaltar rcódigo dentro de un "bloque de código vallado", y para habilitarlo, solo tiene que establecer una variable global con código en su vimrc:

let g:markdown_fenced_languages = ['r']

Sin embargo, después de hacerlo, encontrará que sus bloques de código de knitr todavía no están resaltados.

Esto se debe a que knitr utiliza el formato de cadenas de información de Pandoc para diferenciar el código R que se ejecutará desde un bloque de código normal , y el resaltado de Markdown regular de Vim no admite esto 1 .

La forma más fácil de solucionar esto es agregar manualmente un elemento de sintaxis adicional para que coincida con este tipo de bloque de código agregando la siguiente línea a ~/.vim/after/syntax/markdown.vim

syntax region markdownHighlightr matchgroup=markdownCodeDelimiter start=/^\s*```{r}.*$/ end=/^\s*```\ze\s*$/ keepend contains=@markdownHighlightr

También podría considerar instalar un complemento Vim para resaltar Pandoc, que presumiblemente lo admitiría de inmediato.

1: Esto realmente no puede considerarse un problema en el archivo de sintaxis de rebajas de Vim. La sintaxis original de Markdown no incluye bloques de código cercados, y la especificación CommonMark no define cómo se deben formatear las cadenas de información.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.