From 889050396555212a6328e970166b32377aa41f0e Mon Sep 17 00:00:00 2001 From: Alex Vear Date: Sun, 22 Sep 2019 16:26:28 +0100 Subject: [PATCH] Add port of GNU Emacs' Outline mode --- ftplugin/outline.vim | 16 ++++++++++++++++ syntax/outline.vim | 29 +++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 ftplugin/outline.vim create mode 100644 syntax/outline.vim diff --git a/ftplugin/outline.vim b/ftplugin/outline.vim new file mode 100644 index 0000000..dd3707d --- /dev/null +++ b/ftplugin/outline.vim @@ -0,0 +1,16 @@ +" ============================================================= +" Description: Folding for GNU Emacs' Outline mode +" Author: Alex Vear (axvr) +" Licence: ISC (2019) +" ============================================================= + +function! OutlineFold() + let l:depth = match(getline(v:lnum), '\(^\*\+\)\@<=\( .*$\)\@=') + if l:depth > 0 && synIDattr(synID(v:lnum, 1, 1), 'name') =~# 'outlineHeading' + return ">" . l:depth + endif + return "=" +endfunction + +setlocal foldexpr=OutlineFold() +setlocal foldmethod=expr diff --git a/syntax/outline.vim b/syntax/outline.vim new file mode 100644 index 0000000..7e72cb5 --- /dev/null +++ b/syntax/outline.vim @@ -0,0 +1,29 @@ +" ============================================================= +" Description: Syntax file for GNU Emacs' Outline mode +" Author: Alex Vear (axvr) +" Licence: ISC (2019) +" ============================================================= + +if exists("b:current_syntax") + finish +endif + +" Enable spell check for non syntax highlighted text +syntax spell toplevel + +" Headings +syntax match outlineHeading1 /^\s*\*\{1}\s\+.*$/ keepend contains=@Spell +syntax match outlineHeading2 /^\s*\*\{2}\s\+.*$/ keepend contains=@Spell +syntax match outlineHeading3 /^\s*\*\{3}\s\+.*$/ keepend contains=@Spell +syntax match outlineHeading4 /^\s*\*\{4}\s\+.*$/ keepend contains=@Spell +syntax match outlineHeading5 /^\s*\*\{5}\s\+.*$/ keepend contains=@Spell +syntax match outlineHeading6 /^\s*\*\{6,}\s\+.*$/ keepend contains=@Spell + +hi def link outlineHeading1 Title +hi def link outlineHeading2 outlineHeading1 +hi def link outlineHeading3 outlineHeading2 +hi def link outlineHeading4 outlineHeading3 +hi def link outlineHeading5 outlineHeading4 +hi def link outlineHeading6 outlineHeading5 + +let b:current_syntax = 'org'