Синтаксис змішаного кольору in vim


12

Я часто пишу документи в плеєрі за допомогою vim, це означає, що у мене код розмітки змішаний з кодом R. Я хотів би, щоб на R шматках було розфарбовано синтаксис R, але на всіх інших фрагментах забарвлення або відсутність забарвлення. Це можливо? Як?


3
Я думаю, що можна, спробуйте подивитися на vim.wikia.com/wiki/…
nobe4

5
Залежно від вашого плагіна для розмітки, ви можете або не маєте підтримки для синтаксичного забарвлення включених "блоків коду". У першому випадку вам доведеться (просто) змінити синтаксис плагіна, щоб він визнав ваші "R шматки" як дійсні блоки коду. У другому випадку, можливо, ви можете надихнути себе на vimrc Junegunn, особливо функції s:syntax_includeта s:file_type_handler: github.com/junegunn/dotfiles/blob/master/vimrc
VanLaser

5
Це файл розмітки, який має код R всередині блоків коду? Якщо так, ви можете додати R g:markdown_fenced_languagesу свій, vimrcнаприклад, дозвольте g: markdown_fenced_languages ​​= ['r'] `. Я припускаю, що ви використовуєте синтаксис розмітки за замовчуванням, який надає Тім Поп. Більше про відгороджені мови
Пітер Рінкер

1
Синтаксичні файли Vim - це, як і більшість речей у Vim, лише послідовність команд Ex, що містяться у файлі. Ви можете включити один, два, три або скільки завгодно. Створення синтаксичного файлу, який виділяє деякі блоки як мову A та інші блоки як мову B, не так вже й важко (насправді я просто зробив це в іншій відповіді ). Однак я не зовсім впевнений, як виглядають "в'язальні" документи? Це просто Маркдаун? Або інший синтаксис?
Мартін Турноїй

Відповіді:


2

Як зауважує Пітер Рінкер , стандартне форматування розмітки Vim вже включає підтримку виділення rкоду в " блокованому кодовому блоці", і щоб його активувати, вам просто потрібно встановити глобальну змінну з кодом у вашому vimrc:

let g:markdown_fenced_languages = ['r']

Однак, зробивши це, ви побачите, що блоки коду в'язання все ще не виділяються.

Це пояснюється тим, що в'язальниця використовує форматування Pandoc інформаційних рядків для того, щоб розмежувати R-код, який повинен запускатися від звичайного блоку коду , а регулярне виділення Vim Markdown не підтримує це 1 .

Найпростіший спосіб виправити це - вручну додати додатковий елемент синтаксису для відповідності цьому типу кодового блоку, додавши наступний рядок у ~/.vim/after/syntax/markdown.vim

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

Ви також можете розглянути можливість встановлення плагіна Vim для виділення Pandoc, який, імовірно, підтримує це поза коробкою.

1: Це насправді не можна вважати проблемою у файлі синтаксису розмітки Vim. Оригінальний синтаксис Markdown не включає обгороджений блоки коди на всіх, і CommonMark специфікація не визначає , як інформацію рядок повинна бути відформатована.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.