forked from ledger/ledger
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adresses Bug 529.
- Loading branch information
Showing
1 changed file
with
46 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |