summaryrefslogtreecommitdiffstats
path: root/ftplugin/php.vim
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2013-09-12 16:33:12 +0200
committerAdam Stankiewicz <sheerun@sher.pl>2013-09-12 16:33:12 +0200
commitd96dc724d442bbc9788815ab3da09d9fff0555a9 (patch)
treef4b1859aa45a28cd420c7285006a4398726ff18a /ftplugin/php.vim
parentd4eca3f2eb6c8496261ed252596d6813b9eb8a04 (diff)
downloadvim-polyglot-d96dc724d442bbc9788815ab3da09d9fff0555a9.tar.gz
vim-polyglot-d96dc724d442bbc9788815ab3da09d9fff0555a9.zip
Add extended php support
Diffstat (limited to 'ftplugin/php.vim')
-rw-r--r--ftplugin/php.vim202
1 files changed, 202 insertions, 0 deletions
diff --git a/ftplugin/php.vim b/ftplugin/php.vim
new file mode 100644
index 00000000..1ecdb2b3
--- /dev/null
+++ b/ftplugin/php.vim
@@ -0,0 +1,202 @@
+" File: php.vim
+" Description: PHP Integration for VIM plugin
+" This file is a considerable fork of the original
+" PDV written by Tobias Schlitt <toby@php.net>.
+" Maintainer: Steve Francia <piv@spf13.com> <http://spf13.com>
+" Version: 0.9
+" Last Change: 7th January 2012
+"
+"
+" Section: script init stuff {{{1
+if exists("loaded_piv")
+ finish
+endif
+let loaded_piv = 1
+
+"
+" Function: s:InitVariable() function {{{2
+" This function is used to initialise a given variable to a given value. The
+" variable is only initialised if it does not exist prior
+"
+" Args:
+" -var: the name of the var to be initialised
+" -value: the value to initialise var to
+"
+" Returns:
+" 1 if the var is set, 0 otherwise
+function s:InitVariable(var, value)
+ if !exists(a:var)
+ exec 'let ' . a:var . ' = ' . "'" . a:value . "'"
+ return 1
+ endif
+ return 0
+endfunction
+
+
+" {{{ Settings
+" First the global PHP configuration
+let php_sql_query=1 " to highlight SQL syntax in strings
+let php_htmlInStrings=1 " to highlight HTML in string
+let php_noShortTags = 1 " to disable short tags
+let php_folding = 1 "to enable folding for classes and functions
+let PHP_autoformatcomment = 1
+let php_sync_method = -1
+
+" Section: variable init calls {{{2
+call s:InitVariable("g:load_doxygen_syntax", 1)
+call s:InitVariable("g:syntax_extra_php", 'doxygen')
+call s:InitVariable("g:syntax_extra_inc", 'doxygen')
+call s:InitVariable("g:PIVCreateDefaultMappings", 1)
+call s:InitVariable("g:PIVPearStyle", 0)
+call s:InitVariable("g:PIVAutoClose", 0)
+
+" Auto expand tabs to spaces
+setlocal expandtab
+setlocal autoindent " Auto indent after a {
+setlocal smartindent
+
+" Linewidth to 79, because of the formatoptions this is only valid for
+" comments
+setlocal textwidth=79
+
+setlocal nowrap " Do not wrap lines automatically
+
+" Correct indentation after opening a phpdocblock and automatic * on every
+" line
+setlocal formatoptions=qroct
+
+" Use php syntax check when doing :make
+setlocal makeprg=php\ -l\ %
+
+" Use errorformat for parsing PHP error output
+setlocal errorformat=%m\ in\ %f\ on\ line\ %l
+
+" Switch syntax highlighting on, if it was not
+if !exists("g:syntax_on") | syntax on | endif
+
+"setlocal keywordprg=pman " Use pman for manual pages
+
+" }}} Settings
+
+" {{{ Command mappings
+nnoremap <silent> <plug>PIVphpDocSingle :call PhpDocSingle()<CR>
+vnoremap <silent> <plug>PIVphpDocRange :call PhpDocRange()<CR>
+vnoremap <silent> <plug>PIVphpAlign :call PhpAlign()<CR>
+"inoremap <buffer> <leader>d :call PhpDocSingle()<CR>i
+
+" Map ; to "add ; to the end of the line, when missing"
+"noremap <buffer> ; :s/\([^;]\)$/\1;/<cr>
+
+" Map <ctrl>+p to single line mode documentation (in insert and command mode)
+"inoremap <buffer> <leader>d :call PhpDocSingle()<CR>i
+"nnoremap <buffer> <leader>d :call PhpDocSingle()<CR>
+" Map <ctrl>+p to multi line mode documentation (in visual mode)
+"vnoremap <buffer> <leader>d :call PhpDocRange()<CR>
+
+" Map <CTRL>-H to search phpm for the function name currently under the cursor (insert mode only)
+inoremap <buffer> <C-H> <ESC>:!phpm <C-R>=expand("<cword>")<CR><CR>
+
+" }}}
+
+" {{{ Automatic close char mapping
+if g:PIVAutoClose
+ if g:PIVPearStyle
+ inoremap <buffer> { {<CR>}<C-O>O
+ inoremap <buffer> ( ( )<LEFT><LEFT>
+ else
+ inoremap { {<CR>}<C-O>O
+ inoremap ( ()<LEFT>
+ endif
+
+ inoremap <buffer> [ []<LEFT>
+ inoremap <buffer> " ""<LEFT>
+ inoremap <buffer> ' ''<LEFT>
+endif
+" }}} Automatic close char mapping
+
+
+" {{{ Wrap visual selections with chars
+
+vnoremap <buffer> ( "zdi(<C-R>z)<ESC>
+vnoremap <buffer> { "zdi{<C-R>z}<ESC>
+vnoremap <buffer> [ "zdi[<C-R>z]<ESC>
+vnoremap <buffer> ' "zdi'<C-R>z'<ESC>
+" Removed in favor of register addressing
+" :vnoremap " "zdi"<C-R>z"<ESC>
+
+" }}} Wrap visual selections with chars
+
+" {{{ Dictionary completion
+setlocal dictionary-=$VIMRUNTIME/bundle/PIV/misc/funclist.txt dictionary+=$VIMRUNTIME/bundle/PIV/misc/funclist.txt
+
+" Use the dictionary completion
+setlocal complete-=k complete+=k
+
+" }}} Dictionary completion
+
+" {{{ Alignment
+
+func! PhpAlign() range
+ let l:paste = &g:paste
+ let &g:paste = 0
+
+ let l:line = a:firstline
+ let l:endline = a:lastline
+ let l:maxlength = 0
+ while l:line <= l:endline
+ " Skip comment lines
+ if getline (l:line) =~ '^\s*\/\/.*$'
+ let l:line = l:line + 1
+ continue
+ endif
+ " \{-\} matches ungreed *
+ let l:index = substitute (getline (l:line), '^\s*\(.\{-\}\)\s*\S\{0,1}=\S\{0,1\}\s.*$', '\1', "")
+ let l:indexlength = strlen (l:index)
+ let l:maxlength = l:indexlength > l:maxlength ? l:indexlength : l:maxlength
+ let l:line = l:line + 1
+ endwhile
+
+ let l:line = a:firstline
+ let l:format = "%s%-" . l:maxlength . "s %s %s"
+
+ while l:line <= l:endline
+ if getline (l:line) =~ '^\s*\/\/.*$'
+ let l:line = l:line + 1
+ continue
+ endif
+ let l:linestart = substitute (getline (l:line), '^\(\s*\).*', '\1', "")
+ let l:linekey = substitute (getline (l:line), '^\s*\(.\{-\}\)\s*\(\S\{0,1}=\S\{0,1\}\)\s\(.*\)$', '\1', "")
+ let l:linesep = substitute (getline (l:line), '^\s*\(.\{-\}\)\s*\(\S\{0,1}=\S\{0,1\}\)\s\(.*\)$', '\2', "")
+ let l:linevalue = substitute (getline (l:line), '^\s*\(.\{-\}\)\s*\(\S\{0,1}=\S\{0,1\}\)\s\(.*\)$', '\3', "")
+
+ let l:newline = printf (l:format, l:linestart, l:linekey, l:linesep, l:linevalue)
+ call setline (l:line, l:newline)
+ let l:line = l:line + 1
+ endwhile
+ let &g:paste = l:paste
+endfunc
+
+" }}}
+
+function! s:CreateNMap(target, combo)
+ if !hasmapto(a:target, 'n')
+ exec 'nmap ' . a:combo . ' ' . a:target
+ endif
+endfunction
+
+function! s:CreateVMap(target, combo)
+ if !hasmapto(a:target, 'v')
+ exec 'vmap ' . a:combo . ' ' . a:target
+ endif
+endfunction
+
+function! s:CreateMaps(target, combo)
+ call s:CreateNMap(a:target,a:combo)
+ call s:CreateVMap(a:target,a:combo)
+endfunction
+
+if g:PIVCreateDefaultMappings
+ call s:CreateNMap('<plug>PIVphpDocSingle', ',pd')
+ call s:CreateVMap('<plug>PIVphpDocRange', ',pd')
+ call s:CreateMaps('<plug>PIVphpAlign ', ',pa')
+endif