X-Git-Url: https://git.rmz.io/dotfiles.git/blobdiff_plain/c99b009281bc9433450aab2a9d5a088c7a94053d..b38e4e816a36487bc46fe3dcc80d0327934fce02:/vim/indent/cmake.vim diff --git a/vim/indent/cmake.vim b/vim/indent/cmake.vim index 421afcb..c607cd9 100644 --- a/vim/indent/cmake.vim +++ b/vim/indent/cmake.vim @@ -17,7 +17,7 @@ endif let b:did_indent = 1 setlocal indentexpr=CMakeGetIndent(v:lnum) -setlocal indentkeys+==ENDIF(,ENDFOREACH(,ENDMACRO(,ELSE(,ELSEIF(,ENDWHILE( +setlocal indentkeys+=0=~ENDIF(,0=~ENDFOREACH(,0=~ENDMACRO(,0=~ENDFUNCTION(,0=~ELSE(,0=~ELSEIF(,0=~ENDWHILE( " Only define the function once. if exists("*CMakeGetIndent") @@ -44,20 +44,27 @@ fun! CMakeGetIndent(lnum) let or = '\|' " Regular expressions used by line indentation function. let cmake_regex_comment = '#.*' - let cmake_regex_identifier = '[A-Za-z][A-Za-z0-9_]*' + let cmake_regex_identifier = '[A-Za-z0-9_]\+' let cmake_regex_quoted = '"\([^"\\]\|\\.\)*"' - let cmake_regex_arguments = '\(' . cmake_regex_quoted . - \ or . '\$(' . cmake_regex_identifier . ')' . - \ or . '[^()\\#"]' . or . '\\.' . '\)*' + let cmake_regex_argument = '\(' . cmake_regex_quoted . + \ or . cmake_regex_identifier . + \ or . '\${' . cmake_regex_identifier . '}' . + \ '\)' + let cmake_regex_arguments = '\(' . cmake_regex_argument . + \ '\(\s*' . cmake_regex_argument . '\s*\)*' . + \ '\)' let cmake_indent_comment_line = '^\s*' . cmake_regex_comment let cmake_indent_blank_regex = '^\s*$' let cmake_indent_open_regex = '^\s*' . cmake_regex_identifier . - \ '\s*(' . cmake_regex_arguments . + \ '\s*(\(' . cmake_regex_arguments . '\)\?' . \ '\(' . cmake_regex_comment . '\)\?$' - let cmake_indent_close_regex = '^' . cmake_regex_arguments . - \ ')\s*' . + let cmake_indent_close_regex = '^\s*' . cmake_regex_arguments . + \ '\s*)\s*' . + \ '\(' . cmake_regex_comment . '\)\?$' + let b:cmake_indent = cmake_indent_close_regex + let cmake_indent_close_regex_no_arg = '^\s*)\s*' . \ '\(' . cmake_regex_comment . '\)\?$' let cmake_indent_begin_regex = '^\s*\(IF\|MACRO\|FOREACH\|ELSE\|ELSEIF\|WHILE\|FUNCTION\)\s*(' @@ -79,6 +86,9 @@ fun! CMakeGetIndent(lnum) if this_line =~? cmake_indent_end_regex let ind = ind - &sw endif + if this_line =~? cmake_indent_close_regex_no_arg + let ind = ind - &sw + endif if previous_line =~? cmake_indent_close_regex let ind = ind - &sw endif