3

タスクリスト用に vim でカスタム構文の強調表示を作成したいと考えています。

タスク項目はハイフンで始まります。2 種類のタスク アイテムが該当します。(a) 「@done」タグのないアイテム。(b) @done タグ付きのアイテム。(a) と (b) は異なる方法で強調する必要があります。

私はtaskpaperを使用していますが、これは問題なく動作しますが、問題は、これを複数行にまたがるタスク項目で機能させようとしていることです。例えば:

- Regular item (works)
- Completed item @done (works)
- Multi-line item. This item continues on to 
  the line below. (doesn't work)
- Multi-line completed item. This item continues
  on to the line below. (doesn't work). @done

taskpaperの強調表示ファイルは、最初の 2 つは機能しますが、2 番目の 2 つは機能しません。回避策として、上記の最後のケースでこれを試しました。

syn region multLineDoneItem start="{" end="}" fold
HiLink multLineDoneItem NonText

しかし今、私は次のように中括弧で複数行の完了項目をマークすることを余儀なくされています:

- {Multi-line completed item. This item continues
  on to the line below. (workaround works).}

私はすでにstackexchangeなどを検索しました。助けていただければ幸いです!:)

4

1 に答える 1

5

\ze構文領域の最後の部分で正規表現アトムを使用してみてください。これにより、次のタスクまでのすべてを一致させることができますが、次のタスクは含まれません。マッチングの方法は見ていませんが、このようなものがうまくいくかもしれません。

syn region muiltLineItem     start="^-" end="\(\s*\n)\+\ze^-" fold    
syn region multiLineDoneItem start="^-" end="@done\s*\n\(\s*\n\)*\ze^-" fold
HiLink multiLineItem Normal
HiLink multiLineDoneItem NonText

私はこれをまったくテストしていませんが、それまたはそのようなものはうまくいくはずです。インデントを考慮したい場合は、\z正規表現アトムを使用すると、同じインデントで行を一致させることができます。

アップデート:

これを試して:

syn match multilineItem "^-\_.\{-}\ze\(\n-\|\%$\)" fold
syn match multilineDoneItem "^-\(\%(\_^-\)\@!\_.\)\{-}@done\s*\n\ze" fold
command -nargs=+ HiLink highlight default link <args>
HiLink multilineItem Normal
HiLink multilineDoneItem NonText
delcommand HiLink

ああ、これは複数行の項目だけでなく、4 つのケースすべてで機能するはずです。

于 2011-03-27T13:14:12.627 に答える