Merge pull request #64 from kljohann/vim
Vim: Update syntax file, create indentation file, set commentstring (Bugs 528, 529)
This commit is contained in:
commit
04574bc511
3 changed files with 72 additions and 11 deletions
|
|
@ -11,7 +11,7 @@ let b:did_ftplugin = 1
|
||||||
|
|
||||||
let b:undo_ftplugin = "setlocal ".
|
let b:undo_ftplugin = "setlocal ".
|
||||||
\ "foldmethod< foldtext< ".
|
\ "foldmethod< foldtext< ".
|
||||||
\ "include< comments< omnifunc< formatprg<"
|
\ "include< comments< commentstring< omnifunc< formatprg<"
|
||||||
|
|
||||||
" don't fill fold lines --> cleaner look
|
" don't fill fold lines --> cleaner look
|
||||||
setl fillchars="fold: "
|
setl fillchars="fold: "
|
||||||
|
|
@ -19,6 +19,7 @@ setl foldtext=LedgerFoldText()
|
||||||
setl foldmethod=syntax
|
setl foldmethod=syntax
|
||||||
setl include=^!include
|
setl include=^!include
|
||||||
setl comments=b:;
|
setl comments=b:;
|
||||||
|
setl commentstring=;%s
|
||||||
setl omnifunc=LedgerComplete
|
setl omnifunc=LedgerComplete
|
||||||
|
|
||||||
" set location of ledger binary for checking and auto-formatting
|
" set location of ledger binary for checking and auto-formatting
|
||||||
|
|
|
||||||
46
contrib/vim/indent/ledger.vim
Normal file
46
contrib/vim/indent/ledger.vim
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
" Vim filetype indent file
|
||||||
|
" filetype: ledger
|
||||||
|
" by Johann Klähn; Use according to the terms of the GPL>=2.
|
||||||
|
" vim:ts=2:sw=2:sts=2:foldmethod=marker
|
||||||
|
|
||||||
|
if exists("b:did_indent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_indent = 1
|
||||||
|
|
||||||
|
setl autoindent
|
||||||
|
setl indentexpr=GetLedgerIndent()
|
||||||
|
|
||||||
|
if exists("*GetLedgerIndent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
function GetLedgerIndent(...)
|
||||||
|
" You can pass in a line number when calling this function manually.
|
||||||
|
let lnum = a:0 > 0 ? a:1 : v:lnum
|
||||||
|
" If this line is empty look at (the indentation of) the last line.
|
||||||
|
" Note that inside of a transaction no blank lines are allowed.
|
||||||
|
let line = getline(lnum)
|
||||||
|
let prev = getline(lnum - 1)
|
||||||
|
|
||||||
|
if line =~ '^\s\+\S'
|
||||||
|
" Lines that already are indented (→postings, sub-directives) keep their indentation.
|
||||||
|
return &sw
|
||||||
|
elseif line =~ '^\s*$'
|
||||||
|
" Current line is empty, try to guess its type based on the previous line.
|
||||||
|
if prev =~ '^\([[:digit:]~=]\|\s\+\S\)'
|
||||||
|
" This is very likely a posting or a sub-directive.
|
||||||
|
" While lines following the start of a transaction are automatically
|
||||||
|
" indented you will have to indent the first line following a
|
||||||
|
" pre-declaration manually. This makes it easier to type long lists of
|
||||||
|
" 'account' pre-declarations without sub-directives, for example.
|
||||||
|
return &sw
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
" Everything else is not indented:
|
||||||
|
" start of transactions, pre-declarations, apply/end-lines
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
@ -17,15 +17,24 @@ syntax clear
|
||||||
" DATE[=EDATE] [*|!] [(CODE)] DESC <-- first line of transaction
|
" DATE[=EDATE] [*|!] [(CODE)] DESC <-- first line of transaction
|
||||||
" ACCOUNT AMOUNT [; NOTE] <-- posting
|
" ACCOUNT AMOUNT [; NOTE] <-- posting
|
||||||
|
|
||||||
syn region ledgerTransaction start=/^[[:digit:]~]/ skip=/^\s/ end=/^/
|
syn region ledgerTransaction start=/^[[:digit:]~=]/ skip=/^\s/ end=/^/
|
||||||
\ fold keepend transparent contains=ledgerTransactionDate,ledgerMetadata,ledgerPosting
|
\ fold keepend transparent
|
||||||
|
\ contains=ledgerTransactionDate,ledgerMetadata,ledgerPosting,ledgerTransactionExpression
|
||||||
syn match ledgerTransactionDate /^\d\S\+/ contained
|
syn match ledgerTransactionDate /^\d\S\+/ contained
|
||||||
|
syn match ledgerTransactionExpression /^[=~]\s\+\zs.*/ contained
|
||||||
syn match ledgerPosting /^\s\+[^[:blank:];][^;]*\ze\%($\|;\)/
|
syn match ledgerPosting /^\s\+[^[:blank:];][^;]*\ze\%($\|;\)/
|
||||||
\ contained transparent contains=ledgerAccount,ledgerMetadata
|
\ contained transparent contains=ledgerAccount,ledgerMetadata
|
||||||
" every space in an account name shall be surrounded by two non-spaces
|
" every space in an account name shall be surrounded by two non-spaces
|
||||||
" every account name ends with a tab, two spaces or the end of the line
|
" every account name ends with a tab, two spaces or the end of the line
|
||||||
syn match ledgerAccount /^\s\+\zs\%(\S\@<= \S\|\S\)\+\ze\%( \|\t\|\s*$\)/ contained
|
syn match ledgerAccount /^\s\+\zs\%(\S\@<= \S\|\S\)\+\ze\%( \|\t\|\s*$\)/ contained
|
||||||
|
|
||||||
|
syn region ledgerPreDeclaration start=/^\(account\|payee\|commodity\|tag\)/ skip=/^\s/ end=/^/
|
||||||
|
\ keepend transparent
|
||||||
|
\ contains=ledgerPreDeclarationType,ledgerPreDeclarationName,ledgerPreDeclarationDirective
|
||||||
|
syn match ledgerPreDeclarationType /^\(account\|payee\|commodity\|tag\)/ contained
|
||||||
|
syn match ledgerPreDeclarationName /^\S\+\s\+\zs.*/ contained
|
||||||
|
syn match ledgerPreDeclarationDirective /^\s\+\zs\S\+/ contained
|
||||||
|
|
||||||
syn match ledgerComment /^;.*$/
|
syn match ledgerComment /^;.*$/
|
||||||
" comments at eol must be preceeded by at least 2 spaces / 1 tab
|
" comments at eol must be preceeded by at least 2 spaces / 1 tab
|
||||||
syn region ledgerMetadata start=/\%( \|\t\|^\s\+\);/ skip=/^\s\+;/ end=/^/
|
syn region ledgerMetadata start=/\%( \|\t\|^\s\+\);/ skip=/^\s\+;/ end=/^/
|
||||||
|
|
@ -34,22 +43,27 @@ syn match ledgerTag /:[^:]\+:/hs=s+1,he=e-1 contained
|
||||||
syn match ledgerTag /\%(\%(;\|^tag\)[^:]\+\)\@<=[^:]\+:\ze[^:]\+$/ contained
|
syn match ledgerTag /\%(\%(;\|^tag\)[^:]\+\)\@<=[^:]\+:\ze[^:]\+$/ contained
|
||||||
syn match ledgerTypedTag /\%(\%(;\|^tag\)[^:]\+\)\@<=[^:]\+::\ze[^:]\+$/ contained
|
syn match ledgerTypedTag /\%(\%(;\|^tag\)[^:]\+\)\@<=[^:]\+::\ze[^:]\+$/ contained
|
||||||
|
|
||||||
syn region ledgerTagStack
|
syn region ledgerApply
|
||||||
\ matchgroup=ledgerTagPush start=/^tag\>/
|
\ matchgroup=ledgerStartApply start=/^apply\>/
|
||||||
\ matchgroup=ledgerTagPop end=/^pop\>/
|
\ matchgroup=ledgerEndApply end=/^end\s\+apply\>/
|
||||||
\ contains=ledgerTagHead,ledgerTagStack,ledgerTransaction,ledgerComment
|
\ contains=ledgerApplyHead,ledgerApply,ledgerTransaction,ledgerComment
|
||||||
syn match ledgerTagHead /\%(^tag\s\+\)\@<=\S.*$/ contained contains=ledgerTag transparent
|
syn match ledgerApplyHead /\%(^apply\s\+\)\@<=\S.*$/ contained
|
||||||
|
|
||||||
highlight default link ledgerTransactionDate Constant
|
highlight default link ledgerTransactionDate Constant
|
||||||
|
highlight default link ledgerTransactionExpression Statement
|
||||||
highlight default link ledgerMetadata Tag
|
highlight default link ledgerMetadata Tag
|
||||||
highlight default link ledgerTypedTag Keyword
|
highlight default link ledgerTypedTag Keyword
|
||||||
highlight default link ledgerTag Type
|
highlight default link ledgerTag Type
|
||||||
highlight default link ledgerTagPop Tag
|
highlight default link ledgerStartApply Tag
|
||||||
highlight default link ledgerTagPush Tag
|
highlight default link ledgerEndApply Tag
|
||||||
|
highlight default link ledgerApplyHead Type
|
||||||
highlight default link ledgerAccount Identifier
|
highlight default link ledgerAccount Identifier
|
||||||
|
highlight default link ledgerPreDeclarationType Type
|
||||||
|
highlight default link ledgerPreDeclarationName Identifier
|
||||||
|
highlight default link ledgerPreDeclarationDirective Type
|
||||||
|
|
||||||
" syncinc is easy: search for the first transaction.
|
" syncinc is easy: search for the first transaction.
|
||||||
syn sync clear
|
syn sync clear
|
||||||
syn sync match ledgerSync grouphere ledgerTransaction "^[[:digit:]~]"
|
syn sync match ledgerSync grouphere ledgerTransaction "^[[:digit:]~=]"
|
||||||
|
|
||||||
let b:current_syntax = "ledger"
|
let b:current_syntax = "ledger"
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue