Sintaxe de cores misturadas no vim

12

Costumo escrever documentos em knitr usando o vim, o que significa que tenho código de remarcação misturado com código R. Eu gostaria de ter a sintaxe R colorida nos pedaços R, mas com descontos ou sem cor em todos os outros fragmentos. Isso é factível? Quão?

janeiro
fonte
3
Eu acho que você pode, tente olhar para vim.wikia.com/wiki/...
nobe4
5
Dependendo do seu plug-in de marcação, você pode ou não ter suporte para a coloração de sintaxe dos "blocos de código" incluídos. No primeiro caso, você (apenas) terá que alterar a sintaxe do plug-in para reconhecer seus "blocos de R" como blocos de código válidos. No segundo caso, talvez você pode inspirar-se de vimrc do Junegunn, especialmente as funções s:syntax_includee s:file_type_handler: github.com/junegunn/dotfiles/blob/master/vimrc
VanLaser
5
É um arquivo de remarcação que possui código R dentro dos blocos de código? Nesse caso, você pode adicionar R ao seu, g:markdown_fenced_languagespor vimrcexemplo, deixe g: markdown_fenced_languages ​​= ['r'] `. Suponho que você esteja usando a sintaxe de remarcação padrão fornecida por Tim Pope. Mais sobre idiomas protegidos
Peter Rincker 8/16
1
Os arquivos de sintaxe do Vim são, como a maioria das coisas no Vim, apenas uma sequência de comandos Ex colocados em um arquivo. Você pode incluir um, dois, três ou quantos quiser. Criar um arquivo de sintaxe que destaque alguns blocos como idioma A e outros como idioma B não é tão difícil (na verdade, acabei de fazer isso em outra resposta ). No entanto, não tenho certeza de como são os documentos "knitr"? Isso é apenas Markdown? Ou uma sintaxe diferente?
Martin Tournoij 9/03/16

Respostas:

2

Como observa Peter Rincker , a formatação padrão de descontos do Vim já inclui suporte para destacar o rcódigo em um "bloco de código protegido" e, para habilitá-lo, basta definir uma variável global com o código em vimrc:

let g:markdown_fenced_languages = ['r']

No entanto, depois de fazer isso, você verá que seus blocos de código knitr ainda não estão destacados.

Isso ocorre porque o knitr usa a formatação das strings de informações do Pandoc para diferenciar o código R que deve ser executado a partir de um bloco de código regular , e o destaque Markdown regular do Vim não suporta isso 1 .

A maneira mais fácil de corrigir isso é adicionar manualmente um item de sintaxe extra para corresponder a esse tipo de bloco de código, adicionando a seguinte linha a ~/.vim/after/syntax/markdown.vim

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

Você também pode considerar instalar um plug-in Vim para destacar o Pandoc, o que provavelmente ofereceria suporte a isso imediatamente.

1: Isso realmente não pode ser considerado um problema no arquivo de sintaxe de remarcação do Vim. A sintaxe original do Markdown não inclui nenhum bloco de código protegido, e a especificação CommonMark não define como as seqüências de informações devem ser formatadas.

Rico
fonte