Merge remote branch 'kljohann/master' into next
This commit is contained in:
commit
9143fbcdf1
3 changed files with 50 additions and 8 deletions
|
|
@ -2,7 +2,7 @@
|
|||
This is the ledger filetype for vim.
|
||||
Copy each file to the corresponding directory in your ~/.vim directory.
|
||||
Then include the following line in your .vimrc or in ~/.vim/filetype.vim
|
||||
au BufNewFile,BufRead *.ldg,*.ledger setf ledger
|
||||
au BufNewFile,BufRead *.ldg,*.ledger setf ledger | comp ledger
|
||||
You can also use a modeline like this in every ledger file
|
||||
vim:filetype=ledger
|
||||
|
||||
|
|
|
|||
31
contrib/vim/compiler/ledger.vim
Normal file
31
contrib/vim/compiler/ledger.vim
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
" Vim Compiler File
|
||||
" Compiler: 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("current_compiler")
|
||||
finish
|
||||
endif
|
||||
let current_compiler = "ledger"
|
||||
|
||||
if exists(":CompilerSet") != 2
|
||||
command -nargs=* CompilerSet setlocal <args>
|
||||
endif
|
||||
|
||||
if ! exists("g:ledger_bin") || ! executable(g:ledger_bin)
|
||||
if executable('ledger')
|
||||
let g:ledger_bin = 'ledger'
|
||||
else
|
||||
echoerr "ledger command not found. Set g:ledger_bin or extend $PATH."
|
||||
finish
|
||||
endif
|
||||
endif
|
||||
|
||||
" %-G throws away blank lines, everything else is assumed to be part of a
|
||||
" multi-line error message.
|
||||
CompilerSet errorformat=%-G,%EWhile\ parsing\ file\ \"%f\"\\,\ line\ %l:%.%#,%ZError:\ %m,%C%.%#
|
||||
|
||||
" unfortunately there is no 'check file' command,
|
||||
" so we will just use a query that returns no results. ever.
|
||||
exe 'CompilerSet makeprg='.g:ledger_bin.'\ -f\ %\ reg\ not\ ''.*''\ \>\ /dev/null'
|
||||
|
||||
|
|
@ -24,26 +24,37 @@ endif
|
|||
|
||||
" for debugging
|
||||
syntax clear
|
||||
|
||||
|
||||
" DATE[=EDATE] [*|!] [(CODE)] DESC <-- first line of transaction
|
||||
" ACCOUNT AMOUNT [; NOTE] <-- posting
|
||||
|
||||
" region: a transaction containing postings
|
||||
syn region transNorm start=/^[[:digit:]~]/ skip=/^\s/ end=/^/
|
||||
\ fold keepend transparent contains=transDate, Metadata, Posting
|
||||
\ fold keepend transparent contains=transDate,Metadata,Posting
|
||||
syn match transDate /^\d\S\+/ contained
|
||||
syn match Metadata /^\s\+;.*/ contained
|
||||
syn match Metadata /^\s\+;.*/ contained contains=MetadataTag
|
||||
syn match Comment /^;.*$/
|
||||
" 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
|
||||
syn match Account /^\s\+\zs\%(\S \S\|\S\)\+\ze\%([ ]\{2,}\|\t\s*\|\s*$\)/ contained
|
||||
syn match Posting /^\s\+[^[:blank:];].*$/ contained transparent contains=Account
|
||||
syn match Posting /^\s\+[^[:blank:];].*$/ contained transparent contains=Account,Amount
|
||||
" FIXME: add other symbols?
|
||||
let s:currency = '\([$€£¢]\|\w\+\)'
|
||||
let s:figures = '\d\+\([.,]\d\+\)*'
|
||||
let s:amount = '-\?\('.s:figures.'\s*'.s:currency.'\|'.s:currency.'\s*'.s:figures.'\)'
|
||||
exe 'syn match Amount /'.s:amount.'/ contained'
|
||||
syn match MetadataTag /:\zs[^:]\+\ze:\|;\s*\zs[^:]\+\ze:[^:]\+$/ contained
|
||||
|
||||
|
||||
highlight default link transDate Question
|
||||
highlight default link Metadata PreProc
|
||||
highlight default link transDate Constant
|
||||
highlight default link Metadata Tag
|
||||
highlight default link MetadataTag Type
|
||||
highlight default link Amount Number
|
||||
highlight default link Comment Comment
|
||||
highlight default link Account Identifier
|
||||
|
||||
" syncinc is easy: search for the first transaction.
|
||||
syn sync clear
|
||||
syn sync match ledgerSync grouphere transNorm "^\d"
|
||||
syn sync match ledgerSync grouphere transNorm "^[[:digit:]~]"
|
||||
|
||||
let b:current_syntax = "ledger"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue