2017-01-30 11 views
0

私のメモの構文定義を作成しようとしています。ここでファイルの最初の行にあるVim構文領域

は一例です:私は強調表示する構文を作成したいと思います

=Title of the note (it's the very first line) 
@context (mandatory) 
!action (mandatory) 
#tag-1 (optional) 
#tag-2 (optional) 
#tag-n (optional) 
>attached-files (optional) 

My note come after the first blank line 
and continue until the end of the file... 

No matter any additional empty line 

は、貴様の一致を学位論文。私のメモでは、タイトル(=この方法)やタグ(この方法)のように見える行を書くことができ、強調表示する必要はありません。最初の行から最初の空白行に行くノートメタデータの領域を作成しようとしました。

私はこれを試してみましたが、私は問題(ハイライトが良いようだが、私は(空の行が含まれています)、空行の後のすべての行を削除すると、それはもう動作しません...

augroup gtd 

    autocmd! 

    autocmd BufRead,BufNewFile *.gtd set filetype=gtd 

    autocmd FileType gtd syntax region gtdTags start="\%1l" end="^\s*$" fold transparent contains=gtdTitle,gtdContext,gtdStatus,gtdHashtags,gtdAttachedFiles 
    autocmd FileType gtd syntax match gtdTitle '^=.*' contained 
    autocmd FileType gtd syntax match gtdContext '^@\S\+$' contained 
    autocmd FileType gtd syntax match gtdStatus '^!\S\+$' contained 
    autocmd FileType gtd syntax match gtdHashtags '^#\S\+$' contained 
    autocmd FileType gtd syntax match gtdAttachedFiles '^>attached-files$' contained 

    autocmd FileType gtd syntax match gtdSubtitle '^\s*\*\* .*' 
    autocmd FileType gtd syntax keyword gtdTodo TODO WAITING SOMEDAY SCHEDULED 

    autocmd FileType gtd highlight gtdTitle guifg=white guibg=NONE gui=bold 
    autocmd FileType gtd highlight gtdContext guifg=yellow 
    autocmd FileType gtd highlight gtdStatus guifg=red gui=NONE 
    autocmd FileType gtd highlight gtdHashtags guifg=grey gui=italic 
    autocmd FileType gtd highlight gtdAttachedFiles guifg=red guibg=white gui=bold 

    autocmd FileType gtd highlight gtdSubtitle guifg=black guibg=lightgrey gui=bold 
    autocmd FileType gtd highlight gtdTodo guifg=white guibg=red gui=NONE 

augroup END 

を持っています最初の空白/空白行またはファイルの最後に領域を停止する方法

答えて

2

ファイルの最後を表す特殊アトムを、リージョンの終わりのパターンに含めることができます:end="^\s*$\|\@$"ただし、これは必須ではありません。Vim 常には構文領域wheを開始します。 n startパターンが一致します。

注:のみ パターンを開始マッチングに基づいている領域を開始する決定を:help syn-regionが説明するように、それは、endパターンをチェックしません。一致するエンドパターンのチェックはありません。

したがって、endパターンに一致するものがなくても、すべての領域が暗黙的にバッファの最後で終了します。実際、あなたの構文は私のためにうまく動作します。

あなたは正しい構文スクリプトを定義しておらず、代わりに接頭辞autocmd FileType gtdを選んだので混乱していると思います。また、syntax clearがありません。

:syntaxコマンドを別のファイル~/.vim/syntax/gtd.vimに置き、:help 44.12に記載されている形式に従ってください。 Vimに同梱されている$VIMRUNTIME/syntax/*.vimのさまざまな構文スクリプトの1つを見ることもできます。

関連する問題