vim의 혼합 색상 구문


12

나는 종종 vim을 사용하여 knitr로 문서를 작성 하고 있는데, 이는 R 코드와 마크 다운 코드가 혼합되어 있음을 의미합니다. R 청크에는 R 구문 색을 지정하고 싶지만 다른 모든 조각에는 색을 표시하거나 표시하지 않습니다. 이것이 가능합니까? 어떻게?



5
마크 다운 플러그인에 따라 포함 된 "코드 블록"의 구문 색상 표시를 이미 지원하거나 지원하지 않았을 수 있습니다. 첫 번째 경우, "R 청크"를 유효한 코드 블록으로 인식하도록 플러그인 구문을 변경해야합니다. 두 번째 경우, 아마도 당신은 Junegunn의 vimrc, 특히 다음 s:syntax_include과 같은 기능에서 영감을 얻을 수 있습니다 s:file_type_handler: github.com/junegunn/dotfiles/blob/master/vimrc
VanLaser

5
이것은 코드 블록 안에 R 코드가있는 마크 다운 파일입니까? 당신이 당신에 R을 추가 할 수 있습니다 그렇다면 g:markdown_fenced_languages당신에 vimrcmarkdown_fenced_languages = [ 'R'] ': 예를 들어 보자 g. Tim Pope에서 제공 하는 기본 마크 다운 구문을 사용한다고 가정합니다 . 더 많은 울타리 언어
피터 Rincker

1
Vim 구문 파일은 Vim의 대부분과 마찬가지로 파일에 넣은 일련의 Ex 명령입니다. 하나, 둘, 셋 또는 원하는만큼 포함 할 수 있습니다. 일부 블록을 언어 A로 강조 표시하고 다른 블록을 언어 B로 강조 표시하는 구문 파일을 작성하는 것은 그리 어렵지 않습니다 (실제로 다른 답변 에서이 작업을 수행했습니다 ). 그러나 "knitr"문서가 어떻게 보이는지 완전히 확신하지 못합니까? 마크 다운인가요? 아니면 다른 구문?
Martin Tournoij

답변:


2

Peter Rincker가 지적한 것처럼 Vim의 표준 마크 다운 형식에는 이미 r"펜스 코드 블록"내에서 코드 를 강조 표시하는 기능이 포함되어 있으며이를 활성화하려면 코드를 사용하여 전역 변수를 설정해야합니다 vimrc.

let g:markdown_fenced_languages = ['r']

그러나 이렇게 한 후에도 knitr 코드 블록이 여전히 강조 표시되지 않습니다.

knitr는 일반 코드 블록에서 실행될 R 코드를 구별하기 위해 Pandoc의 정보 문자열 형식을 사용하기 때문에 Vim의 정규 Markdown 강조 표시는이 1을 지원하지 않기 때문 입니다.

이 문제를 해결하는 가장 쉬운 방법은 다음 줄을 추가하여이 유형의 코드 블록과 일치하도록 추가 구문 항목을 수동으로 추가하는 것입니다. ~/.vim/after/syntax/markdown.vim

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

Pandoc 강조 표시 용 Vim 플러그인 설치를 고려할 수도 있습니다. Pandoc 강조 표시는이를 기본적으로 지원합니다.

1 : 이것은 Vim의 마크 다운 구문 파일에서 실제로 문제로 간주 될 수 없습니다. 원래 마크 다운 문법은 전혀 코드 블록을 분리 포함하지 않으며, CommonMark 스펙 정보 문자열을 포맷하는 방법을 정의하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.