2

わかりました、これはおそらくばかげた質問ですが....

独自言語のソース コードのファイルがあります。上記のファイルを、面倒なエディターの代わりに VIM で編集したい。言語の基本的な構文の強調表示が必要ですが、独自の構文ファイルを作成するのに多くの時間を費やしたくありません。

したがって、VIM には基本的なソース強調表示モジュールがありますか? 完璧である必要はありません。単純なことをカバーしたいだけです。現在、私の唯一の選択肢は、構文の強調表示を行わないか、ランダムな言語を選択するか、自分で作成することです。

編集:以下のソースコードサンプル

{
    function letter do
        gposition 0, 0
        if gender = "M" do
            if language = "SPA" OR state = "PR" do
                %male spanish letter
                gposition .26, .75
                pdfimage "MALE SPANISH.pdf", 1, .93

                setcolor truewhite
                setfillmode 1
                %whitebox
                gposition 5.25, 1.25
                rectangle 2.5, .5
4

2 に答える 2

5

これは正しい言語でしょうか?

http://www.iml.ece.mcgill.ca/~stephan/node/17

于 2011-06-17T13:48:31.010 に答える
3

独自の構文強調表示を作成するのはまったく難しくなく、数分かかります。

たとえば、ほとんどの部分で Python を使用する DSL (Konira と呼ばれる) を作成しましたが、カスタム DSL ステートメントを強調表示するのに失敗しました。これは、「余分な」強調表示がどのように見えるかです。

function! KoniraSyntax() abort
    let b:current_syntax = 'konira'
    syn match KoniraIt                   '\v^\s+it\s+'
    syn match KoniraSkipIf               '\v^\s+skip\s+if'
    syn match KoniraDescribe             '\v^describe\s+'
    syn match KoniraRaises               '\v^\s+raises\s+'
    syn match KoniraBeforeAll            '\v^\s+before\s+all'
    syn match KoniraBeforeEach           '\v^\s+before\s+each'
    syn match KoniraAfterEach            '\v^\s+after\s+each'
    syn match KoniraAfterAll             '\v^\s+after\s+all'

    hi def link KoniraSkipIf             Statement
    hi def link KoniraIt                 Statement
    hi def link KoniraDescribe           Statement
    hi def link KoniraRaises             Identifier
    hi def link KoniraBeforeAll          Statement
    hi def link KoniraBeforeEach         Statement
    hi def link KoniraAfterAll           Statement
    hi def link KoniraAfterEach          Statement
endfunction

上記でわかるように、現在の構文を設定してから、必要なステートメントを正規表現で照合し、その一致に必要なタイプの強調表示を適用します。

また、そのようなソースファイルを編集していることを知っている場合 (または検出できる場合) は、通常の関数として呼び出すことができます。

call KoniraSyntax()
于 2011-06-17T15:28:31.960 に答える