" Vim syntax script " Author: Peter Odding " Last Change: July 16, 2013 " URL: http://peterodding.com/code/vim/notes/ " Note: This file is encoded in UTF-8 including a byte order mark so " that Vim loads the script using the right encoding transparently. " Quit when a syntax file was already loaded. if exists('b:current_syntax') finish endif " Check for spelling errors in all text. syntax spell toplevel " Inline elements. {{{1 " Cluster of elements which never contain a newline character. syntax cluster notesInline contains=notesName " Default highlighting style for notes syntax markers. highlight def link notesHiddenMarker Ignore " Highlight note names as hyperlinks. {{{2 call xolox#notes#highlight_names(1) syntax cluster notesInline add=notesName highlight def link notesName Underlined " Highlight @tags as hyperlinks. {{{2 syntax match notesTagName /\(^\|\s\)\@<=@\k\+/ highlight def link notesTagName Underlined " Highlight list bullets and numbers. {{{2 execute 'syntax match notesListBullet /' . escape(xolox#notes#leading_bullet_pattern(), '/') . '/' highlight def link notesListBullet Comment syntax match notesListNumber /^\s*\zs\d\+[[:punct:]]\?\ze\s/ highlight def link notesListNumber Comment " Highlight quoted fragments. {{{2 if xolox#notes#unicode_enabled() syntax match notesDoubleQuoted /“.\{-}”/ syntax match notesSingleQuoted /‘.\{-}’/ else syntax match notesDoubleQuoted /".\{-}"/ syntax match notesSingleQuoted /`.\{-}'/ endif highlight def link notesSingleQuoted Special highlight def link notesDoubleQuoted String " Highlight text emphasized in italic font. {{{2 if has('conceal') syntax region notesItalic matchgroup=notesItalicMarker start=/\<_\k\@=/ end=/_\>\|\n/ contains=@Spell concealends highlight link notesItalicMarker notesHiddenMarker else syntax match notesItalic /\<_\k[^_]*\k_\>/ endif syntax cluster notesInline add=notesItalic highlight notesItalic gui=italic cterm=italic " Highlight text emphasized in bold font. {{{2 if has('conceal') syntax region notesBold matchgroup=notesBoldMarker start=/\*\k\@=/ end=/\S\@<=\*/ contains=@Spell concealends highlight link notesBoldMarker notesHiddenMarker else syntax match notesBold /\*\k[^*]*\k\*/ endif syntax cluster notesInline add=notesBold highlight notesBold gui=bold cterm=bold " Highlight domain names, URLs, e-mail addresses and filenames. {{{2 " FIXME This setting is lost once the user switches color scheme! highlight notesSubtleURL gui=underline guifg=fg syntax match notesTextURL @\/ syntax cluster notesInline add=notesEmailAddr highlight def link notesEmailAddr notesSubtleURL syntax match notesUnixPath /\k\@/ syntax match notesXXX /\/ syntax match notesFixMe /\/ syntax match notesInProgress /\<\(CURRENT\|INPROGRESS\|STARTED\|WIP\)\>/ syntax match notesDoneItem /^\(\s\+\).*\.*\(\n\1\s.*\)*/ contains=@notesInline syntax match notesDoneMarker /\/ containedin=notesDoneItem highlight def link notesTodo WarningMsg highlight def link notesXXX WarningMsg highlight def link notesFixMe WarningMsg highlight def link notesDoneItem Comment highlight def link notesDoneMarker Question highlight def link notesInProgress Directory " Highlight Vim command names in :this notation. {{{2 syntax match notesVimCmd /:\w\+\(!\|\>\)/ contains=ALLBUT,@Spell syntax cluster notesInline add=notesVimCmd highlight def link notesVimCmd Special " Block level elements. {{{1 " The first line of each note contains the title. {{{2 syntax match notesTitle /^.*\%1l.*$/ contains=@notesInline highlight def link notesTitle ModeMsg " Short sentences ending in a colon are considered headings. {{{2 syntax match notesShortHeading /^\s*\zs\u.\{1,50}\k:\ze\(\s\|$\)/ contains=@notesInline highlight def link notesShortHeading Title " Atx style headings are also supported. {{{2 syntax match notesAtxHeading /^#\+.*/ contains=notesAtxMarker,@notesInline highlight def link notesAtxHeading Title syntax match notesAtxMarker /^#\+/ contained highlight def link notesAtxMarker Comment " E-mail style block quotes are highlighted as comments. {{{2 syntax match notesBlockQuote /\(^\s*>.*\n\)\+/ contains=@notesInline highlight def link notesBlockQuote Comment " Horizontal rulers. {{{2 syntax match notesRule /\(^\s\+\)\zs\*\s\*\s\*$/ highlight def link notesRule Comment " Highlight embedded blocks of source code, log file messages, basically anything Vim can highlight. {{{2 " NB: I've escaped these markers so that Vim doesn't interpret them when editing this file… syntax match notesCodeStart /{{[{]\w*/ syntax match notesCodeEnd /}}[}]/ highlight def link notesCodeStart Ignore highlight def link notesCodeEnd Ignore call xolox#notes#highlight_sources(1) " Hide mode line at end of file. {{{2 syntax match notesModeLine /\_^vim:.*\_s*\%$/ highlight def link notesModeLine LineNr " Last edited dates in :ShowTaggedNotes buffers. syntax match notesLastEdited /(last edited \(today\|yesterday\|\w\+, \w\+ \d\+, \d\+\))/ highlight def link notesLastEdited LineNr " }}}1 " Set the currently loaded syntax mode. let b:current_syntax = 'notes' " vim: ts=2 sw=2 et bomb fdl=1