3

次の Vim 構文ファイルがあります。

" Vim syntax file
" Language: ScreenplayText - the textual source of ScreenplayXML
" Maintainer: Shlomi Fish <shlomif@iglu.org.il>
" Home: http://search.cpan.org/dist/XML-Grammar-Screenplay/
"
" Author: Shlomi Fish
" Filenames: *.screenplay-text.txt
" Last Change: Thu Jul  3 00:59:42 IDT 2008
" Version: 0.0.1

" Thanks to Andy Wokula for his help on:
" https://groups.google.com/group/vim_use/browse_thread/thread/6c0906617d67864e/a21938c5df1d15cb?show_docid=a21938c5df1d15cb

" Quit if syntax file is already loaded
if version < 600
    syntax clear
elseif exists("b:current_syntax")
    finish
endif

syntax sync minlines=50

" syntax match screenplayTextComment /<!--\_.\{-0,}-->/
" syntax match screenplayTextDescription /^ *\[\_.\{-0,}\]/
syntax region screenplayTextComment start="<!--" end="-->"
syntax region screenplayTextDescription start="^ *\[" end="]"

" syntax region screenplayTextSaying start=/\(^\s*\n\)\@<=\_^\(+\{2,\}\|[^[:+]*\):/ end=/^\s*$/ contains=screenplayTextAddress,screenplayTextInnerDesc
syntax region screenplayTextSaying start=/\(^\s*\n\)\@<=\_^\(+\{2,\}\|[^[:+]*\):/ end=/^\s*$/ contains=screenplayTextAddress

" syntax match screenplayTextAddress /\%^\(+\{2,\}\|[^[:+]*\):/ contained nextgroup=screenplayTextInnerDesc
syntax match screenplayTextAddress /[^:]\+:/ contained nextgroup=screenplayTextSayingAfterAddress

syntax region screenplayTextSayingAfterAddress contained
" syntax match screenplayTextInnerDesc /\[\_.\{-0,}\]/ contained nextgroup=screenplayTextInnerDesc


" For debugging - remove.
" hi def link screenplayTextSaying Statement

hi def link screenplayTextComment Comment
hi def link screenplayTextDescription PreProc
hi def link screenplayTextInnerDesc PreProc
hi def screenplayTextAddress      term=bold cterm=bold gui=bold

これはXML-Grammar-Screenplayを対象としていますが、 screenplayTextAddress は引き続き、次のように「:」で後続の行を強調表示します。

Kate: Of course! See, my obsession with the Bible continued throughout my
life, and later on I became a scholar: first as a married woman who just
hanged around universities and learned things from the male professors
and students, later on as someone who helped some professors with their
research and eventually got credited, and as time progressed,
I got a B.A., and then a Ph.D., and am now a professor.

「:」コロンのある 2 行目は引き続き強調表示されます。強調表示されないようにするにはどうすればよいですか?

洞察をありがとう。

よろしく、

-- シュロミフィッシュ

PS: vim-screenplay-text の強調表示のリポジトリ( bitbucketの Mercurial のもの) と、テストに使用するスクリプト(GitHub git リポジトリ) を次に示します。

4

2 に答える 2

2

グループには 2 つのscreenplayTextSayingブランチが含まれます。それらを 2 つの別々の領域に分けてから、 を使用しmatchgroupて、コロンで終わるアドレスの領域開始を直接強調表示します。見る:help :syn-matchgroup

syntax region screenplayTextSaying start=/\(^\s*\n\)\@<=\_^+\{2,\}:/ end=/^\s*$/
syntax region screenplayTextSaying end=/^\s*$/ matchgroup=screenplayTextAddress start=/\(^\s*\n\)\@<=\_^[^[:+]*:/
"syntax match screenplayTextAddress /[^:]\+:/ Not needed any more!
于 2013-02-19T11:44:14.313 に答える
0

段落の最初の行を認識する唯一の方法は、それが空白行の後に続くことであるように思われます。

" Define blank line at first
syntax match EmptyLines "\(^\s*\n\)\+" nextgroup=FistLine, Description

" Then define Fist line
syntax region FirstLine start=+^[^\<\[]+ oneline contains=Address

" Then define Address
syntax match Address "^[^<\[]+:" contained

" Description
syntax match Description "\[[^\[]+\]"

" Comment
" Comment match code

" For the rest of text, just give them a general format

私はコードをテストしませんでした、ただ考えを提供します。自分で試してみてください。お役に立てれば。

于 2013-02-19T10:13:46.030 に答える