Как создать централизованный файл синтаксиса, который сможет распознавать несколько частей с разными синтаксисами? - PullRequest
0 голосов
/ 27 июня 2018

Например: я хотел бы иметь собственный файл синтаксиса, может называться sugar.vim, который включает в себя несколько других файлов синтаксиса (?), Чтобы иметь возможность выделить, возможно, абзац как python.vim и другой абзац как javascript.vim, могут быть разделены newline (абзацы часто отличаются newline)

Реальный случай, когда я часто ловлю себя на том, что пишу документ (файл без расширения), отличный от реальной конфигурации определенного типа файла (конкретного файла расширения), но для ясной читаемости в типе файла документа (мы назвали sugar выше). Я имею в виду механизм распознавания и highlight различных частей a типов файлов в качестве различных синтаксисов.

Чтобы сузить это дело. Как было бы иметь файл синтаксиса с именем sugar.vim, который мог бы распознавать синтаксис python и синтаксис javascript в файлах с расширением .sugar, тогда для recognized python text должны быть применены блики как обычные файл python, такой же для javascript part. Все recognized text должны быть разделены новой строкой (как минимум один до и один после этого текста)

Пример:

# this is a sample text for this question
# i'm writing a document that has an extension of `.sugar`

def py_func1(arg1, arg2)   # python.vim and its highlights applied here.
    print("bello world!")

square = function(x) {     # javascript.vim and its highlights applied here.
    return x * x;
};

Система: gvim 8.1 / windows10

Спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Vim поддерживает это командой :help :syn-include. Поскольку он предназначен для авторов синтаксических сценариев, использующих другие синтаксисы, его использование несколько сложное и не очень подходит для интерактивного использования по требованию.

Мой Плагин SyntaxRange предоставляет команды и функции для установки областей в текущем буфере, которые либо используют синтаксис, отличный от «тип файла» буфера, либо полностью игнорируют синтаксис. С его помощью легко добавить динамическое выделение синтаксиса для ряда строк, а функции общедоступного API также упрощают определение программ.

0 голосов
/ 03 июля 2018

Вы ищете :help :syn-include.

Выдержка из справки vim:

Если элементы синтаксиса верхнего уровня во включенном файле синтаксиса должны быть содержится в пределах региона в том числе синтаксиса, вы можете использовать Команда ": syntax include":

: sy [ntax] включает [@ {grouplist-name}] {file-name}

Все элементы синтаксиса, объявленные во включенном файле, будут иметь добавлен флаг Кроме того, если указан список групп, все элементы синтаксиса верхнего уровня во включенном файле будут добавлены в этот список. >

"В перл.вим: : синтаксис включает @Pod: p: h / pod.vim : область синтаксиса perlPOD start = "^ = head" end = "^ = cut" содержит = @ Pod

Когда {file-name} является абсолютным путем (начинается с "/", "c:", "$ VAR" или "") этот файл получен. Когда это относительный путь (например, «синтаксис / pod.vim»), файл ищется в «runtimepath». Все соответствующие файлы загружены. Использование относительного пути рекомендуется, потому что это позволяет пользователю заменить включенный файл с его собственной версией, без замены файла, который делает ": syn включают в себя».

Пока вы можете четко определять границы для ваших встроенных языковых областей, довольно просто достичь этого.

Вы также можете обратиться к https://github.com/tpope/vim-markdown/blob/master/syntax/markdown.vim для справки о том, как tpope встраивает другие определения синтаксиса в синтаксис уценки, управляемый конфигурацией, чтобы минимизировать количество синтаксисов языка, которые необходимо встраивать для оптимальной производительности.

...