diff options
Diffstat (limited to 'ftplugin')
-rw-r--r-- | ftplugin/puppet.vim | 143 |
1 files changed, 6 insertions, 137 deletions
diff --git a/ftplugin/puppet.vim b/ftplugin/puppet.vim index 1b008682..175ac126 100644 --- a/ftplugin/puppet.vim +++ b/ftplugin/puppet.vim @@ -1,137 +1,6 @@ -" Vim filetype plugin -" Language: Puppet -" Maintainer: Todd Zullinger <tmz@pobox.com> -" Last Change: 2009 Aug 19 -" vim: set sw=4 sts=4: - -if exists("b:did_ftplugin") - finish -endif -let b:did_ftplugin = 1 - -if !exists("no_plugin_maps") && !exists("no_puppet_maps") - if !hasmapto("<Plug>AlignRange") - map <buffer> <LocalLeader>= <Plug>AlignRange - endif -endif - -noremap <buffer> <unique> <script> <Plug>AlignArrows :call <SID>AlignArrows()<CR> -noremap <buffer> <unique> <script> <Plug>AlignRange :call <SID>AlignRange()<CR> - -iabbrev => =><C-R>=<SID>AlignArrows('=>')<CR> -iabbrev +> +><C-R>=<SID>AlignArrows('+>')<CR> - -if exists('*s:AlignArrows') - finish -endif - -let s:arrow_re = '[=+]>' -let s:selector_re = '[=+]>\s*\$.*\s*?\s*{\s*$' - -" set keywordprg to 'pi' (alias for puppet describe) -" this lets K invoke pi for word under cursor -setlocal keywordprg=puppet\ describe - -function! s:AlignArrows(op) - let cursor_pos = getpos('.') - let lnum = line('.') - let line = getline(lnum) - if line !~ s:arrow_re - return - endif - let pos = stridx(line, a:op) - let start = lnum - let end = lnum - let pnum = lnum - 1 - while 1 - let pline = getline(pnum) - if pline !~ s:arrow_re || pline =~ s:selector_re - break - endif - let start = pnum - let pnum -= 1 - endwhile - let cnum = end - while 1 - let cline = getline(cnum) - if cline !~ s:arrow_re || - \ (indent(cnum) != indent(cnum+1) && getline(cnum+1) !~ '\s*}') - break - endif - let end = cnum - let cnum += 1 - endwhile - call s:AlignSection(start, end) - let cursor_pos[2] = stridx(getline('.'), a:op) + strlen(a:op) + 1 - call setpos('.', cursor_pos) - return '' -endfunction - -function! s:AlignRange() range - call s:AlignSection(a:firstline, a:lastline) -endfunction - -" AlignSection and AlignLine are from the vim wiki: -" http://vim.wikia.com/wiki/Regex-based_text_alignment -function! s:AlignSection(start, end) - let extra = 1 - let sep = s:arrow_re - let maxpos = 0 - let section = getline(a:start, a:end) - for line in section - let pos = match(line, ' *'.sep) - if maxpos < pos - let maxpos = pos - endif - endfor - call map(section, 's:AlignLine(v:val, sep, maxpos, extra)') - call setline(a:start, section) -endfunction - -function! s:AlignLine(line, sep, maxpos, extra) - let m = matchlist(a:line, '\(.\{-}\) \{-}\('.a:sep.'.*\)') - if empty(m) - return a:line - endif - let spaces = repeat(' ', a:maxpos - strlen(m[1]) + a:extra) - return m[1] . spaces . m[2] -endfunction - -" detect if we are in a module and set variables for classpath (autoloader), -" modulename, modulepath, and classname -" useful to use in templates -function! s:SetModuleVars() - - " set these to any dirs you want to stop searching on - " useful to stop vim from spinning disk looking all over for init.pp - " probably only a macosx problem with /tmp since it's really /private/tmp - " but it's here if you find vim spinning on new files in certain places - if !exists("g:puppet_stop_dirs") - let g:puppet_stop_dirs = '/tmp;/private/tmp' - endif - - " search path for init.pp - let b:search_path = './**' - let b:search_path = b:search_path . ';' . getcwd() . ';' . g:puppet_stop_dirs - - " find what we assume to be our module dir - let b:initpp = findfile("init.pp", b:search_path) " find an init.pp up or down - let b:module_path = fnamemodify(b:initpp, ":p:h:h") " full path to module name - let b:module_name = fnamemodify(b:module_path, ":t") " just the module name - - " sub out the full path to the module with the name and replace slashes with :: - let b:classpath = fnamemodify(expand("%:p:r"), ':s#' . b:module_path . '/manifests#' . b:module_name . '#'. ":gs?/?::?") - let b:classname = expand("%:t:r") - - " if we don't start with a word we didn't replace the module_path - " probably b/c we couldn't find an init.pp / not a module - " so we assume that root of the filename is the class (sane for throwaway - " manifests - if b:classpath =~ '^::' - let b:classpath = b:classname - endif -endfunction - -if exists("g:puppet_module_detect") - call s:SetModuleVars() -endif +setl ts=2 +setl sts=2 +setl sw=2 +setl et +setl keywordprg=puppet\ describe\ --providers +setl iskeyword=-,:,@,48-57,_,192-255 |