From b4fc6c53b1b915c81e8e8636bc9c570d5af12b22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Yngve=20Lerv=C3=A5g?= Date: Thu, 19 Mar 2015 15:11:11 +0100 Subject: [PATCH] Added indentation file for bibliographies --- doc/vimtex.txt | 13 ++++++-- indent/bib.vim | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 indent/bib.vim diff --git a/doc/vimtex.txt b/doc/vimtex.txt index bf7b4a6..9cfd8ad 100644 --- a/doc/vimtex.txt +++ b/doc/vimtex.txt @@ -398,6 +398,10 @@ List of section constructs that should be folded. > Use |vimtex| indentation function. Not as customizable as the official indentation function, but imho it is better. > let g:vimtex_indent_enabled = 1 +< + *g:vimtex_indent_bib_enabled* +Use |vimtex| indentation function for bibliography files. > + let g:vimtex_indent_bib_enabled = 1 < *g:vimtex_latexmk_build_dir* Set this variable in case a dedicated build dir is used with `latexmk`/`latex` @@ -688,12 +692,15 @@ INDENTATION *vimtex-indent* The official indentation function is pretty good and allows for some customization. However, I am not quite satisfied, so I wrote my own -indentation function that is not customizable at all (at least for now), but -that I think is better. It is enabled by default, but may be disabled if -desired |g:vimtex_indent_enabled|. +indentation function that is not customizable, but that I think is better. It +is enabled by default, but may be disabled if desired. + + *vimtex-bib-indent* +I've also written an indentation file for bibliography files (`.bib` files). Associated settings: |g:vimtex_indent_enabled| + |g:vimtex_indent_bib_enabled| ============================================================================== LATEXMK *vimtex-latexmk* diff --git a/indent/bib.vim b/indent/bib.vim new file mode 100644 index 0000000..81efcca --- /dev/null +++ b/indent/bib.vim @@ -0,0 +1,83 @@ +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve LervÄg +" Email: karl.yngve@gmail.com +" + +if exists('b:did_indent') + finish +endif +let b:did_indent = 1 + +call vimtex#util#set_default('g:vimtex_indent_bib_enabled', 1) +if !g:vimtex_indent_bib_enabled | finish | endif + +let s:cpo_save = &cpo +set cpo&vim + +setlocal autoindent +setlocal indentexpr=VimtexIndentBib() + +function! VimtexIndentBib() " {{{1 + " Find first non-blank line above the current line + let lnum = prevnonblank(v:lnum - 1) + if lnum == 0 + return 0 + endif + + " Get some initial conditions + let ind = indent(lnum) + let line = getline(lnum) + let cline = getline(v:lnum) + let g:test = 1 + + " Zero indent for first line of each entry + if cline =~# '^\s*@' + return 0 + endif + + " Title line of entry + if line =~# '^@' + if cline =~# '^\s*}' + return 0 + else + return &sw + endif + endif + + if line =~# '=' + " Indent continued bib info entries + if s:count('{', line) - s:count('}', line) > 0 + let match = searchpos('.*=\s*{','bcne') + return match[1] + elseif cline =~# '^\s*}' + return 0 + endif + elseif s:count('{', line) - s:count('}', line) < 0 + if s:count('{', cline) - s:count('}', cline) < 0 + return 0 + else + return &sw + endif + endif + + return ind +endfunction + +function! s:count(pattern, line) " {{{1 + let sum = 0 + let indx = match(a:line, a:pattern) + while indx >= 0 + let sum += 1 + let indx += 1 + let indx = match(a:line, a:pattern, indx) + endwhile + return sum +endfunction + +" }}}1 + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: fdm=marker sw=2