diff options
Diffstat (limited to 'indent')
| -rw-r--r-- | indent/elixir.vim | 26 | ||||
| -rw-r--r-- | indent/html.vim | 42 | ||||
| -rw-r--r-- | indent/rust.vim | 19 | 
3 files changed, 63 insertions, 24 deletions
| diff --git a/indent/elixir.vim b/indent/elixir.vim index e4798141..a71c466c 100644 --- a/indent/elixir.vim +++ b/indent/elixir.vim @@ -25,6 +25,7 @@ let s:block_skip   = "synIDattr(synID(line('.'),col('.'),1),'name') =~? '" . s:s  let s:block_start  = 'do\|fn'  let s:block_middle = 'else\|match\|elsif\|catch\|after\|rescue'  let s:block_end    = 'end' +let s:pipeline     = '^\s*|>.*$'  let s:indent_keywords   = '\<\%(' . s:block_start . '\|' . s:block_middle . '\)$'  let s:deindent_keywords = '^\s*\<\%(' . s:block_end . '\|' . s:block_middle . '\)\>' @@ -38,7 +39,7 @@ function! GetElixirIndent(...)      return 0    endif -  if synIDattr(synID(v:lnum, 1, 1), "name") !~ '\(Comment\|String\)$' +  if synIDattr(synID(v:lnum, 1, 1), "name") !~ s:skip_syntax      let splited_line = split(getline(lnum), '\zs')      let opened_symbol  = 0      let opened_symbol += count(splited_line, '[') - count(splited_line, ']') @@ -51,6 +52,29 @@ function! GetElixirIndent(...)        let ind += &sw      endif +    " if line starts with pipeline +    " and last line doesn't start with pipeline +    if getline(v:lnum) =~ s:pipeline && +          \ getline(lnum) !~ s:pipeline +      let ind += &sw +    endif + +    " if last line starts with pipeline +    " and currentline doesn't start with pipeline +    if getline(lnum) =~ s:pipeline && +          \ getline(v:lnum) !~ s:pipeline +      let ind -= &sw +    endif + +    " if last line starts with pipeline +    " and current line doesn't start with pipeline +    " but last line started a block +    if getline(lnum) =~ s:pipeline && +          \ getline(v:lnum) !~ s:pipeline && +          \ getline(lnum) =~ s:block_start +      let ind += &sw +    endif +      if getline(v:lnum) =~ s:deindent_keywords        let bslnum = searchpair( '\<\%(' . s:block_start . '\):\@!\>',              \ '\<\%(' . s:block_middle . '\):\@!\>\zs', diff --git a/indent/html.vim b/indent/html.vim index d5b7c837..466c6bd8 100644 --- a/indent/html.vim +++ b/indent/html.vim @@ -343,27 +343,27 @@ fun! HtmlIndentGet(lnum)      let lind = indent(lnum) -    for tags in s:omittable -      let tags_exp = '<\(' . join(tags, '\|') . '\)>' -      let close_tags_exp = '</\(' . join(tags, '\|') . '\)>' -      if getline(a:lnum) =~ tags_exp -        let block_start = search('^'.repeat(' ', lind + (&sw * ind - 1)).'\S'  , 'bnW') -        let prev_tag = search(tags_exp, 'bW', block_start) -        let prev_closetag = search(close_tags_exp, 'W', a:lnum) -        if prev_tag && !prev_closetag -          let ind = ind - 1 -        endif -      endif - -      if getline(a:lnum) =~ '</\w\+>' -        let block_start = search('^'.repeat(' ', lind + (&sw * ind - 1)).'\S'  , 'bnW') -        let prev_tag = search(tags_exp, 'bW', block_start) -        let prev_closetag = search(close_tags_exp, 'W', a:lnum) -        if prev_tag && !prev_closetag -          let ind = ind - 1 -        endif -      endif -    endfor +    " for tags in s:omittable +      " let tags_exp = '<\(' . join(tags, '\|') . '\)>' +      " let close_tags_exp = '</\(' . join(tags, '\|') . '\)>' +      " if getline(a:lnum) =~ tags_exp +        " let block_start = search('^'.repeat(' ', lind + (&sw * ind - 1)).'\S'  , 'bnW') +        " let prev_tag = search(tags_exp, 'bW', block_start) +        " let prev_closetag = search(close_tags_exp, 'W', a:lnum) +        " if prev_tag && !prev_closetag +          " let ind = ind - 1 +        " endif +      " endif + +      " if getline(a:lnum) =~ '</\w\+>' +        " let block_start = search('^'.repeat(' ', lind + (&sw * ind - 1)).'\S'  , 'bnW') +        " let prev_tag = search(tags_exp, 'bW', block_start) +        " let prev_closetag = search(close_tags_exp, 'W', a:lnum) +        " if prev_tag && !prev_closetag +          " let ind = ind - 1 +        " endif +      " endif +    " endfor      if restore_ic == 0          setlocal noic diff --git a/indent/rust.vim b/indent/rust.vim index ae3ca403..1f08c519 100644 --- a/indent/rust.vim +++ b/indent/rust.vim @@ -1,7 +1,7 @@  " Vim indent file  " Language:         Rust  " Author:           Chris Morgan <me@chrismorgan.info> -" Last Change:      2013 Jul 10 +" Last Change:      2013 Oct 29  " Only load this indent file when no other was loaded.  if exists("b:did_indent") @@ -104,8 +104,23 @@ function GetRustIndent(lnum)  	let prevline = s:get_line_trimmed(prevnonblank(a:lnum - 1))  	if prevline[len(prevline) - 1] == ","  				\ && s:get_line_trimmed(a:lnum) !~ "^\\s*[\\[\\]{}]" +				\ && prevline !~ "^\\s*fn\\s"  		" Oh ho! The previous line ended in a comma! I bet cindent will try to -		" take this too far... For now, let's use the previous line's indent +		" take this too far... For now, let's normally use the previous line's +		" indent. + +		" One case where this doesn't work out is where *this* line contains +		" square or curly brackets; then we normally *do* want to be indenting +		" further. +		" +		" Another case where we don't want to is one like a function +		" definition with arguments spread over multiple lines: +		" +		" fn foo(baz: Baz, +		"        baz: Baz) // <-- cindent gets this right by itself +		" +		" There are probably other cases where we don't want to do this as +		" well. Add them as needed.  		return GetRustIndent(a:lnum - 1)  	endif | 
