updated for version 7.0c10
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
" Vim autoload file for editing compressed files.
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2005 Jul 26
|
||||
" Last Change: 2006 Mar 31
|
||||
|
||||
" These functions are used by the gzip plugin.
|
||||
|
||||
@ -84,9 +84,14 @@ fun gzip#read(cmd)
|
||||
'[,']d _
|
||||
endif
|
||||
" read in the uncompressed lines "'[-1r tmp"
|
||||
" Use ++edit if the buffer was empty, keep the 'ff' and 'fenc' options.
|
||||
setlocal nobin
|
||||
if exists(":lockmarks")
|
||||
execute "silent lockmarks " . l . "r " . tmp
|
||||
if empty
|
||||
execute "silent lockmarks " . l . "r ++edit " . tmp
|
||||
else
|
||||
execute "silent lockmarks " . l . "r " . tmp
|
||||
endif
|
||||
else
|
||||
execute "silent " . l . "r " . tmp
|
||||
endif
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
" netrw.vim: Handles file transfer and remote directory listing across a network
|
||||
" AUTOLOAD PORTION
|
||||
" Date: Mar 22, 2006
|
||||
" Version: 83
|
||||
" Date: Mar 31, 2006
|
||||
" Version: 84
|
||||
" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
|
||||
" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
|
||||
" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
|
||||
@ -23,7 +23,7 @@
|
||||
if &cp || exists("g:loaded_netrw")
|
||||
finish
|
||||
endif
|
||||
let g:loaded_netrw = "v83"
|
||||
let g:loaded_netrw = "v84"
|
||||
if v:version < 700
|
||||
echohl WarningMsg | echo "***netrw*** you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw" | echohl None
|
||||
finish
|
||||
@ -404,8 +404,9 @@ fun! netrw#NetRead(mode,...)
|
||||
call s:NetMethod(choice)
|
||||
|
||||
" Check if NetBrowse() should be handling this request
|
||||
" call Decho("checking if netlist: choice<".choice."> netrw_list_cmd<".g:netrw_list_cmd.">")
|
||||
" call Decho("checking if NetBrowse() should handle choice<".choice."> with netrw_list_cmd<".g:netrw_list_cmd.">")
|
||||
if choice =~ "^.*[\/]$"
|
||||
" call Decho("yes, choice matches '^.*[\/]$'")
|
||||
keepjumps call s:NetBrowse(choice)
|
||||
" call Dret("NetRead")
|
||||
return
|
||||
@ -457,6 +458,7 @@ fun! netrw#NetRead(mode,...)
|
||||
elseif b:netrw_method == 2 " read with ftp + <.netrc>
|
||||
" call Decho("read via ftp+.netrc (method #2)")
|
||||
let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
|
||||
" call Decho("netrw_fname<".netrw_fname.">")
|
||||
new
|
||||
setlocal ff=unix
|
||||
exe "put ='".g:netrw_ftpmode."'"
|
||||
@ -780,7 +782,7 @@ fun! s:NetGetFile(readcmd, tfile, method)
|
||||
" call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
|
||||
call NetReadFixup(a:method, line1, line2)
|
||||
" else " Decho
|
||||
" call Decho("NetReadFixup() not called, doesn't exist")
|
||||
" call Decho("NetReadFixup() not called, doesn't exist (line1=".line1." line2=".line2.")")
|
||||
endif
|
||||
|
||||
" update the Buffers menu
|
||||
@ -1239,7 +1241,6 @@ fun! s:NetBrowse(dirname)
|
||||
exe "silent doau BufReadPre ".fname
|
||||
silent call netrw#NetRead(2,method."://".user.machine."/".path)
|
||||
exe "silent doau BufReadPost ".fname
|
||||
keepjumps 1d
|
||||
|
||||
" save certain window-oriented variables into buffer-oriented variables
|
||||
call s:SetBufWinVars()
|
||||
@ -1352,7 +1353,7 @@ fun! s:NetBrowse(dirname)
|
||||
endif
|
||||
let w:netrw_bannercnt= w:netrw_bannercnt + 1
|
||||
endif
|
||||
keepjumps put ='\" Quick Help: ?:help -:go up dir D:delete R:rename s:sort-by x:exec'
|
||||
keepjumps put ='\" Quick Help: <F1>:help -:go up dir D:delete R:rename s:sort-by x:exec'
|
||||
keepjumps put ='\" ==========================================================================='
|
||||
|
||||
" remote read the requested directory listing
|
||||
@ -2943,7 +2944,7 @@ fun! netrw#DirBrowse(dirname)
|
||||
endif
|
||||
let w:netrw_bannercnt= w:netrw_bannercnt + 1
|
||||
endif
|
||||
keepjumps put ='\" Quick Help: ?:help -:go up dir D:delete R:rename s:sort-by x:exec'
|
||||
keepjumps put ='\" Quick Help: <F1>:help -:go up dir D:delete R:rename s:sort-by x:exec'
|
||||
keepjumps put ='\" ============================================================================'
|
||||
let w:netrw_bannercnt= w:netrw_bannercnt + 2
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
" Vim completion script
|
||||
" Language: PHP
|
||||
" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
|
||||
" Last Change: 2006 Mar ---
|
||||
" Last Change: 2006 Apr 05
|
||||
"
|
||||
" TODO:
|
||||
" - Class aware completion:
|
||||
@ -47,400 +47,594 @@ function! phpcomplete#CompletePHP(findstart, base)
|
||||
" We can be also inside of phpString with HTML tags. Deal with
|
||||
" it later (time, not lines).
|
||||
endif
|
||||
else
|
||||
" If exists b:php_menu it means completion was already constructed we
|
||||
" don't need to do anything more
|
||||
if exists("b:php_menu")
|
||||
return b:php_menu
|
||||
endif
|
||||
" Initialize base return lists
|
||||
let res = []
|
||||
" a:base is very short - we need context
|
||||
if exists("b:compl_context")
|
||||
let context = b:compl_context
|
||||
unlet! b:compl_context
|
||||
endif
|
||||
|
||||
if !exists('g:php_builtin_functions')
|
||||
call phpcomplete#LoadData()
|
||||
endif
|
||||
endif
|
||||
" If exists b:php_menu it means completion was already constructed we
|
||||
" don't need to do anything more
|
||||
if exists("b:php_menu")
|
||||
return b:php_menu
|
||||
endif
|
||||
" Initialize base return lists
|
||||
let res = []
|
||||
let res2 = []
|
||||
" a:base is very short - we need context
|
||||
if exists("b:compl_context")
|
||||
let context = b:compl_context
|
||||
unlet! b:compl_context
|
||||
endif
|
||||
|
||||
let scontext = substitute(context,
|
||||
\ '\$\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*$', '', '')
|
||||
if !exists('g:php_builtin_functions')
|
||||
call phpcomplete#LoadData()
|
||||
endif
|
||||
|
||||
if scontext =~ '\(=\s*new\|extends\)\s\+$'
|
||||
" Complete class name
|
||||
" Internal solution for finding classes in current file.
|
||||
let file = getline(1, '$')
|
||||
call filter(file,
|
||||
\ 'v:val =~ "class\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("')
|
||||
let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
|
||||
let jfile = join(file, ' ')
|
||||
let int_values = split(jfile, 'class\s\+')
|
||||
let int_classes = {}
|
||||
for i in int_values
|
||||
let c_name = matchstr(i, '^[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*')
|
||||
if c_name != ''
|
||||
let int_classes[c_name] = ''
|
||||
endif
|
||||
endfor
|
||||
let scontext = substitute(context, '\$\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*$', '', '')
|
||||
|
||||
" Prepare list of functions from tags file
|
||||
let ext_classes = {}
|
||||
let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
|
||||
if fnames != ''
|
||||
exe 'silent! vimgrep /^'.a:base.'.*\tc\(\t\|$\)/j '.fnames
|
||||
let qflist = getqflist()
|
||||
for field in qflist
|
||||
" [:space:] thing: we don't have to be so strict when
|
||||
" dealing with tags files - entries there were already
|
||||
" checked by ctags.
|
||||
let item = matchstr(field['text'], '^[^[:space:]]\+')
|
||||
let ext_classes[item] = ''
|
||||
endfor
|
||||
if scontext =~ '\(=\s*new\|extends\)\s\+$'
|
||||
" Complete class name
|
||||
" Internal solution for finding classes in current file.
|
||||
let file = getline(1, '$')
|
||||
call filter(file,
|
||||
\ 'v:val =~ "class\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("')
|
||||
let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
|
||||
let jfile = join(file, ' ')
|
||||
let int_values = split(jfile, 'class\s\+')
|
||||
let int_classes = {}
|
||||
for i in int_values
|
||||
let c_name = matchstr(i, '^[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*')
|
||||
if c_name != ''
|
||||
let int_classes[c_name] = ''
|
||||
endif
|
||||
endfor
|
||||
|
||||
call extend(int_classes, ext_classes)
|
||||
|
||||
for m in sort(keys(int_classes))
|
||||
if m =~ '^'.a:base
|
||||
call add(res, m)
|
||||
endif
|
||||
" Prepare list of functions from tags file
|
||||
let ext_classes = {}
|
||||
let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
|
||||
if fnames != ''
|
||||
exe 'silent! vimgrep /^'.a:base.'.*\tc\(\t\|$\)/j '.fnames
|
||||
let qflist = getqflist()
|
||||
for field in qflist
|
||||
" [:space:] thing: we don't have to be so strict when
|
||||
" dealing with tags files - entries there were already
|
||||
" checked by ctags.
|
||||
let item = matchstr(field['text'], '^[^[:space:]]\+')
|
||||
let ext_classes[item] = ''
|
||||
endfor
|
||||
endif
|
||||
|
||||
let int_list = res
|
||||
call extend(int_classes, ext_classes)
|
||||
|
||||
let final_menu = []
|
||||
for i in int_list
|
||||
let final_menu += [{'word':i, 'kind':'c'}]
|
||||
endfor
|
||||
for m in sort(keys(int_classes))
|
||||
if m =~ '^'.a:base
|
||||
call add(res, m)
|
||||
endif
|
||||
endfor
|
||||
|
||||
return final_menu
|
||||
let int_list = res
|
||||
|
||||
elseif scontext =~ '\(->\|::\)$'
|
||||
" Complete user functions and variables
|
||||
" Internal solution for current file.
|
||||
" That seems as unnecessary repeating of functions but there are
|
||||
" few not so subtle differences as not appending of $ and addition
|
||||
" of 'kind' tag (not necessary in regular completion)
|
||||
if a:base =~ '^\$'
|
||||
let adddollar = '$'
|
||||
let final_menu = []
|
||||
for i in int_list
|
||||
let final_menu += [{'word':i, 'kind':'c'}]
|
||||
endfor
|
||||
|
||||
return final_menu
|
||||
|
||||
elseif scontext =~ '\(->\|::\)$'
|
||||
" Complete user functions and variables
|
||||
" Internal solution for current file.
|
||||
" That seems as unnecessary repeating of functions but there are
|
||||
" few not so subtle differences as not appending of $ and addition
|
||||
" of 'kind' tag (not necessary in regular completion)
|
||||
|
||||
if scontext =~ '->$' && scontext !~ '\$this->$'
|
||||
|
||||
" Get name of the class
|
||||
let classname = phpcomplete#GetClassName(scontext)
|
||||
|
||||
" Get location of class definition, we have to iterate through all
|
||||
" tags files separately because we need relative path from current
|
||||
" file to the exact file (tags file can be in different dir)
|
||||
if classname != ''
|
||||
let classlocation = phpcomplete#GetClassLocation(classname)
|
||||
else
|
||||
let adddollar = ''
|
||||
let classlocation = ''
|
||||
endif
|
||||
let file = getline(1, '$')
|
||||
let jfile = join(file, ' ')
|
||||
let sfile = split(jfile, '\$')
|
||||
let int_vars = {}
|
||||
for i in sfile
|
||||
if i =~ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*=\s*new'
|
||||
let val = matchstr(i, '^[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*').'->'
|
||||
else
|
||||
let val = matchstr(i, '^[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*')
|
||||
endif
|
||||
if val !~ ''
|
||||
let int_vars[adddollar.val] = ''
|
||||
endif
|
||||
endfor
|
||||
|
||||
" ctags has good support for PHP, use tags file for external
|
||||
" variables
|
||||
let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
|
||||
let ext_vars = {}
|
||||
if fnames != ''
|
||||
let sbase = substitute(a:base, '^\$', '', '')
|
||||
exe 'silent! vimgrep /^'.sbase.'.*\tv\(\t\|$\)/j '.fnames
|
||||
let qflist = getqflist()
|
||||
for field in qflist
|
||||
let item = matchstr(field['text'], '^[^[:space:]]\+')
|
||||
" Add -> if it is possible object declaration
|
||||
let classname = ''
|
||||
if field['text'] =~ item.'\s*=\s*new\s\+'
|
||||
let item = item.'->'
|
||||
let classname = matchstr(field['text'],
|
||||
\ '=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze')
|
||||
|
||||
if filereadable(classlocation)
|
||||
let classfile = readfile(classlocation)
|
||||
let classcontent = ''
|
||||
let classcontent .= "\n".phpcomplete#GetClassContents(classfile, classname)
|
||||
let sccontent = split(classcontent, "\n")
|
||||
|
||||
" YES, YES, YES! - we have whole content including extends!
|
||||
" Now we need to get two elements: public functions and public
|
||||
" vars
|
||||
" NO, NO, NO! - third separate filtering looking for content
|
||||
" :(, but all of them have differences. To squeeze them into
|
||||
" one implementation would require many additional arguments
|
||||
" and ifs. No good solution
|
||||
" Functions declared with public keyword or without any
|
||||
" keyword are public
|
||||
let functions = filter(deepcopy(sccontent),
|
||||
\ 'v:val =~ "^\\s*\\(public\\s\\*\\)\\?function"')
|
||||
let jfuncs = join(functions, ' ')
|
||||
let sfuncs = split(jfuncs, 'function\s\+')
|
||||
let c_functions = {}
|
||||
for i in sfuncs
|
||||
let f_name = matchstr(i,
|
||||
\ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze')
|
||||
let f_args = matchstr(i,
|
||||
\ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\zs.\{-}\ze)\_s*{')
|
||||
if f_name != ''
|
||||
let c_functions[f_name.'('] = f_args
|
||||
endif
|
||||
let ext_vars[adddollar.item] = classname
|
||||
endfor
|
||||
endif
|
||||
|
||||
" Now we have all variables in int_vars dictionary
|
||||
call extend(int_vars, ext_vars)
|
||||
|
||||
" Internal solution for finding functions in current file.
|
||||
let file = getline(1, '$')
|
||||
call filter(file,
|
||||
\ 'v:val =~ "function\\s\\+&\\?[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("')
|
||||
let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
|
||||
let jfile = join(file, ' ')
|
||||
let int_values = split(jfile, 'function\s\+')
|
||||
let int_functions = {}
|
||||
for i in int_values
|
||||
let f_name = matchstr(i,
|
||||
\ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze')
|
||||
let f_args = matchstr(i,
|
||||
\ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\zs.\{-}\ze)\_s*{')
|
||||
let int_functions[f_name.'('] = f_args
|
||||
endfor
|
||||
|
||||
" Prepare list of functions from tags file
|
||||
let ext_functions = {}
|
||||
if fnames != ''
|
||||
exe 'silent! vimgrep /^'.a:base.'.*\tf\(\t\|$\)/j '.fnames
|
||||
let qflist = getqflist()
|
||||
for field in qflist
|
||||
" File name
|
||||
let item = matchstr(field['text'], '^[^[:space:]]\+')
|
||||
let fname = matchstr(field['text'], '\t\zs\f\+\ze')
|
||||
let prototype = matchstr(field['text'],
|
||||
\ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?')
|
||||
let ext_functions[item.'('] = prototype.') - '.fname
|
||||
endfor
|
||||
endif
|
||||
|
||||
let all_values = {}
|
||||
call extend(all_values, int_functions)
|
||||
call extend(all_values, ext_functions)
|
||||
call extend(all_values, int_vars) " external variables are already in
|
||||
call extend(all_values, g:php_builtin_object_functions)
|
||||
|
||||
for m in sort(keys(all_values))
|
||||
if m =~ '\(^\|::\)'.a:base
|
||||
call add(res, m)
|
||||
endif
|
||||
endfor
|
||||
|
||||
let start_list = res
|
||||
|
||||
let final_list = []
|
||||
for i in start_list
|
||||
if has_key(int_vars, i)
|
||||
let class = ' '
|
||||
if all_values[i] != ''
|
||||
let class = i.' class '
|
||||
" Variables declared with var or with public keyword are
|
||||
" public
|
||||
let variables = filter(deepcopy(sccontent),
|
||||
\ 'v:val =~ "^\\s*\\(public\\|var\\)\\s\\+\\$"')
|
||||
let jvars = join(variables, ' ')
|
||||
let svars = split(jvars, '\$')
|
||||
let c_variables = {}
|
||||
for i in svars
|
||||
let c_var = matchstr(i,
|
||||
\ '^\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze')
|
||||
if c_var != ''
|
||||
let c_variables[c_var] = ''
|
||||
endif
|
||||
let final_list += [{'word':i, 'info':class.all_values[i], 'kind':'v'}]
|
||||
else
|
||||
let final_list +=
|
||||
\ [{'word':substitute(i, '.*::', '', ''),
|
||||
\ 'info':i.all_values[i],
|
||||
\ 'kind':'f'}]
|
||||
endif
|
||||
endfor
|
||||
endfor
|
||||
|
||||
let all_values = {}
|
||||
call extend(all_values, c_functions)
|
||||
call extend(all_values, c_variables)
|
||||
call extend(all_values, g:php_builtin_object_functions)
|
||||
|
||||
for m in sort(keys(all_values))
|
||||
if m =~ '^'.a:base && m !~ '::'
|
||||
call add(res, m)
|
||||
elseif m =~ '::'.a:base
|
||||
call add(res2, m)
|
||||
endif
|
||||
endfor
|
||||
|
||||
let start_list = res + res2
|
||||
|
||||
let final_list = []
|
||||
for i in start_list
|
||||
if has_key(c_variables, i)
|
||||
let class = ' '
|
||||
if all_values[i] != ''
|
||||
let class = i.' class '
|
||||
endif
|
||||
let final_list +=
|
||||
\ [{'word':i,
|
||||
\ 'info':class.all_values[i],
|
||||
\ 'kind':'v'}]
|
||||
else
|
||||
let final_list +=
|
||||
\ [{'word':substitute(i, '.*::', '', ''),
|
||||
\ 'info':i.all_values[i].')',
|
||||
\ 'kind':'f'}]
|
||||
endif
|
||||
endfor
|
||||
|
||||
return final_list
|
||||
|
||||
endif
|
||||
|
||||
return final_list
|
||||
endif
|
||||
|
||||
if a:base =~ '^\$'
|
||||
" Complete variables
|
||||
" Built-in variables {{{
|
||||
let g:php_builtin_vars = {'$GLOBALS':'',
|
||||
\ '$_SERVER':'',
|
||||
\ '$_GET':'',
|
||||
\ '$_POST':'',
|
||||
\ '$_COOKIE':'',
|
||||
\ '$_FILES':'',
|
||||
\ '$_ENV':'',
|
||||
\ '$_REQUEST':'',
|
||||
\ '$_SESSION':'',
|
||||
\ '$HTTP_SERVER_VARS':'',
|
||||
\ '$HTTP_ENV_VARS':'',
|
||||
\ '$HTTP_COOKIE_VARS':'',
|
||||
\ '$HTTP_GET_VARS':'',
|
||||
\ '$HTTP_POST_VARS':'',
|
||||
\ '$HTTP_POST_FILES':'',
|
||||
\ '$HTTP_SESSION_VARS':'',
|
||||
\ '$php_errormsg':'',
|
||||
\ '$this':''
|
||||
\ }
|
||||
" }}}
|
||||
|
||||
" Internal solution for current file.
|
||||
let file = getline(1, '$')
|
||||
let jfile = join(file, ' ')
|
||||
let int_vals = split(jfile, '\ze\$')
|
||||
let int_vars = {}
|
||||
for i in int_vals
|
||||
if i =~ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*=\s*new'
|
||||
let val = matchstr(i,
|
||||
\ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*').'->'
|
||||
else
|
||||
let val = matchstr(i,
|
||||
\ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*')
|
||||
endif
|
||||
if val != ''
|
||||
let int_vars[val] = ''
|
||||
endif
|
||||
endfor
|
||||
|
||||
call extend(int_vars,g:php_builtin_vars)
|
||||
|
||||
" ctags has good support for PHP, use tags file for external
|
||||
" variables
|
||||
let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
|
||||
let ext_vars = {}
|
||||
if fnames != ''
|
||||
let sbase = substitute(a:base, '^\$', '', '')
|
||||
exe 'silent! vimgrep /^'.sbase.'.*\tv\(\t\|$\)/j '.fnames
|
||||
let qflist = getqflist()
|
||||
for field in qflist
|
||||
let item = '$'.matchstr(field['text'], '^[^[:space:]]\+')
|
||||
let m_menu = ''
|
||||
" Add -> if it is possible object declaration
|
||||
" How to detect if previous line is help line?
|
||||
if field['text'] =~ item.'\s*=\s*new\s\+'
|
||||
let item = item.'->'
|
||||
let m_menu = matchstr(field['text'],
|
||||
\ '=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze')
|
||||
endif
|
||||
let ext_vars[item] = m_menu
|
||||
endfor
|
||||
endif
|
||||
|
||||
call extend(int_vars, ext_vars)
|
||||
let g:a0 = keys(int_vars)
|
||||
|
||||
for m in sort(keys(int_vars))
|
||||
if m =~ '^\'.a:base
|
||||
call add(res, m)
|
||||
endif
|
||||
endfor
|
||||
|
||||
let int_list = res
|
||||
|
||||
let int_dict = []
|
||||
for i in int_list
|
||||
if int_vars[i] != ''
|
||||
let class = ' '
|
||||
if int_vars[i] != ''
|
||||
let class = i.' class '
|
||||
endif
|
||||
let int_dict += [{'word':i, 'info':class.int_vars[i], 'kind':'v'}]
|
||||
else
|
||||
let int_dict += [{'word':i, 'kind':'v'}]
|
||||
endif
|
||||
endfor
|
||||
|
||||
return int_dict
|
||||
|
||||
let adddollar = '$'
|
||||
else
|
||||
" Complete everything else -
|
||||
" + functions, DONE
|
||||
" + keywords of language DONE
|
||||
" + defines (constant definitions), DONE
|
||||
" + extend keywords for predefined constants, DONE
|
||||
" + classes (after new), DONE
|
||||
" + limit choice after -> and :: to funcs and vars DONE
|
||||
|
||||
" Internal solution for finding functions in current file.
|
||||
let file = getline(1, '$')
|
||||
call filter(file, 'v:val =~ "function\\s\\+&\\?[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("')
|
||||
let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
|
||||
let jfile = join(file, ' ')
|
||||
let int_values = split(jfile, 'function\s\+')
|
||||
let int_functions = {}
|
||||
for i in int_values
|
||||
let f_name = matchstr(i,
|
||||
\ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze')
|
||||
let f_args = matchstr(i,
|
||||
\ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\s*\zs.\{-}\ze\s*)\_s*{')
|
||||
let int_functions[f_name.'('] = f_args.')'
|
||||
endfor
|
||||
|
||||
" Prepare list of functions from tags file
|
||||
let ext_functions = {}
|
||||
if fnames != ''
|
||||
exe 'silent! vimgrep /^'.a:base.'.*\tf\(\t\|$\)/j '.fnames
|
||||
let qflist = getqflist()
|
||||
for field in qflist
|
||||
" File name
|
||||
let item = matchstr(field['text'], '^[^[:space:]]\+')
|
||||
let fname = matchstr(field['text'], '\t\zs\f\+\ze')
|
||||
let prototype = matchstr(field['text'],
|
||||
\ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?')
|
||||
let ext_functions[item.'('] = prototype.') - '.fname
|
||||
endfor
|
||||
let adddollar = ''
|
||||
endif
|
||||
let file = getline(1, '$')
|
||||
let jfile = join(file, ' ')
|
||||
let sfile = split(jfile, '\$')
|
||||
let int_vars = {}
|
||||
for i in sfile
|
||||
if i =~ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*=\s*new'
|
||||
let val = matchstr(i, '^[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*').'->'
|
||||
else
|
||||
let val = matchstr(i, '^[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*')
|
||||
endif
|
||||
|
||||
" All functions
|
||||
call extend(int_functions, ext_functions)
|
||||
call extend(int_functions, g:php_builtin_functions)
|
||||
|
||||
" Internal solution for finding constants in current file
|
||||
let file = getline(1, '$')
|
||||
call filter(file, 'v:val =~ "define\\s*("')
|
||||
let jfile = join(file, ' ')
|
||||
let int_values = split(jfile, 'define\s*(\s*')
|
||||
let int_constants = {}
|
||||
for i in int_values
|
||||
let c_name = matchstr(i, '\(["'']\)\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze\1')
|
||||
" let c_value = matchstr(i,
|
||||
" \ '\(["'']\)[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\1\s*,\s*\zs.\{-}\ze\s*)')
|
||||
if c_name != ''
|
||||
let int_constants[c_name] = '' " c_value
|
||||
endif
|
||||
endfor
|
||||
|
||||
" Prepare list of constants from tags file
|
||||
let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
|
||||
let ext_constants = {}
|
||||
if fnames != ''
|
||||
exe 'silent! vimgrep /^'.a:base.'.*\td\(\t\|$\)/j '.fnames
|
||||
let qflist = getqflist()
|
||||
for field in qflist
|
||||
let item = matchstr(field['text'], '^[^[:space:]]\+')
|
||||
let ext_constants[item] = ''
|
||||
endfor
|
||||
if val !~ ''
|
||||
let int_vars[adddollar.val] = ''
|
||||
endif
|
||||
|
||||
" All constants
|
||||
call extend(int_constants, ext_constants)
|
||||
" Treat keywords as constants
|
||||
|
||||
let all_values = {}
|
||||
|
||||
" One big dictionary of functions
|
||||
call extend(all_values, int_functions)
|
||||
|
||||
" Add constants
|
||||
call extend(all_values, int_constants)
|
||||
" Add keywords
|
||||
call extend(all_values, b:php_keywords)
|
||||
|
||||
for m in sort(keys(all_values))
|
||||
if m =~ '^'.a:base
|
||||
call add(res, m)
|
||||
endfor
|
||||
|
||||
" ctags has good support for PHP, use tags file for external
|
||||
" variables
|
||||
let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
|
||||
let ext_vars = {}
|
||||
if fnames != ''
|
||||
let sbase = substitute(a:base, '^\$', '', '')
|
||||
exe 'silent! vimgrep /^'.sbase.'.*\tv\(\t\|$\)/j '.fnames
|
||||
let qflist = getqflist()
|
||||
for field in qflist
|
||||
let item = matchstr(field['text'], '^[^[:space:]]\+')
|
||||
" Add -> if it is possible object declaration
|
||||
let classname = ''
|
||||
if field['text'] =~ item.'\s*=\s*new\s\+'
|
||||
let item = item.'->'
|
||||
let classname = matchstr(field['text'],
|
||||
\ '=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze')
|
||||
endif
|
||||
let ext_vars[adddollar.item] = classname
|
||||
endfor
|
||||
|
||||
let int_list = res
|
||||
|
||||
let final_list = []
|
||||
for i in int_list
|
||||
if has_key(int_functions, i)
|
||||
let final_list +=
|
||||
\ [{'word':i,
|
||||
\ 'info':i.int_functions[i],
|
||||
\ 'kind':'f'}]
|
||||
elseif has_key(int_constants, i)
|
||||
let final_list += [{'word':i, 'kind':'d'}]
|
||||
else
|
||||
let final_list += [{'word':i}]
|
||||
endif
|
||||
endfor
|
||||
|
||||
return final_list
|
||||
|
||||
endif
|
||||
|
||||
" Now we have all variables in int_vars dictionary
|
||||
call extend(int_vars, ext_vars)
|
||||
|
||||
" Internal solution for finding functions in current file.
|
||||
let file = getline(1, '$')
|
||||
call filter(file,
|
||||
\ 'v:val =~ "function\\s\\+&\\?[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("')
|
||||
let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
|
||||
let jfile = join(file, ' ')
|
||||
let int_values = split(jfile, 'function\s\+')
|
||||
let int_functions = {}
|
||||
for i in int_values
|
||||
let f_name = matchstr(i,
|
||||
\ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze')
|
||||
let f_args = matchstr(i,
|
||||
\ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\zs.\{-}\ze)\_s*{')
|
||||
let int_functions[f_name.'('] = f_args.')'
|
||||
endfor
|
||||
|
||||
" Prepare list of functions from tags file
|
||||
let ext_functions = {}
|
||||
if fnames != ''
|
||||
exe 'silent! vimgrep /^'.a:base.'.*\tf\(\t\|$\)/j '.fnames
|
||||
let qflist = getqflist()
|
||||
for field in qflist
|
||||
" File name
|
||||
let item = matchstr(field['text'], '^[^[:space:]]\+')
|
||||
let fname = matchstr(field['text'], '\t\zs\f\+\ze')
|
||||
let prototype = matchstr(field['text'],
|
||||
\ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?')
|
||||
let ext_functions[item.'('] = prototype.') - '.fname
|
||||
endfor
|
||||
endif
|
||||
|
||||
let all_values = {}
|
||||
call extend(all_values, int_functions)
|
||||
call extend(all_values, ext_functions)
|
||||
call extend(all_values, int_vars) " external variables are already in
|
||||
call extend(all_values, g:php_builtin_object_functions)
|
||||
|
||||
for m in sort(keys(all_values))
|
||||
if m =~ '\(^\|::\)'.a:base
|
||||
call add(res, m)
|
||||
endif
|
||||
endfor
|
||||
|
||||
let start_list = res
|
||||
|
||||
let final_list = []
|
||||
for i in start_list
|
||||
if has_key(int_vars, i)
|
||||
let class = ' '
|
||||
if all_values[i] != ''
|
||||
let class = i.' class '
|
||||
endif
|
||||
let final_list += [{'word':i, 'info':class.all_values[i], 'kind':'v'}]
|
||||
else
|
||||
let final_list +=
|
||||
\ [{'word':substitute(i, '.*::', '', ''),
|
||||
\ 'info':i.all_values[i],
|
||||
\ 'kind':'f'}]
|
||||
endif
|
||||
endfor
|
||||
|
||||
return final_list
|
||||
endif
|
||||
|
||||
if a:base =~ '^\$'
|
||||
" Complete variables
|
||||
" Built-in variables {{{
|
||||
let g:php_builtin_vars = {'$GLOBALS':'',
|
||||
\ '$_SERVER':'',
|
||||
\ '$_GET':'',
|
||||
\ '$_POST':'',
|
||||
\ '$_COOKIE':'',
|
||||
\ '$_FILES':'',
|
||||
\ '$_ENV':'',
|
||||
\ '$_REQUEST':'',
|
||||
\ '$_SESSION':'',
|
||||
\ '$HTTP_SERVER_VARS':'',
|
||||
\ '$HTTP_ENV_VARS':'',
|
||||
\ '$HTTP_COOKIE_VARS':'',
|
||||
\ '$HTTP_GET_VARS':'',
|
||||
\ '$HTTP_POST_VARS':'',
|
||||
\ '$HTTP_POST_FILES':'',
|
||||
\ '$HTTP_SESSION_VARS':'',
|
||||
\ '$php_errormsg':'',
|
||||
\ '$this':''
|
||||
\ }
|
||||
" }}}
|
||||
|
||||
" Internal solution for current file.
|
||||
let file = getline(1, '$')
|
||||
let jfile = join(file, ' ')
|
||||
let int_vals = split(jfile, '\ze\$')
|
||||
let int_vars = {}
|
||||
for i in int_vals
|
||||
if i =~ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*=\s*new'
|
||||
let val = matchstr(i,
|
||||
\ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*').'->'
|
||||
else
|
||||
let val = matchstr(i,
|
||||
\ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*')
|
||||
endif
|
||||
if val != ''
|
||||
let int_vars[val] = ''
|
||||
endif
|
||||
endfor
|
||||
|
||||
call extend(int_vars,g:php_builtin_vars)
|
||||
|
||||
" ctags has support for PHP, use tags file for external variables
|
||||
let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
|
||||
let ext_vars = {}
|
||||
if fnames != ''
|
||||
let sbase = substitute(a:base, '^\$', '', '')
|
||||
exe 'silent! vimgrep /^'.sbase.'.*\tv\(\t\|$\)/j '.fnames
|
||||
let qflist = getqflist()
|
||||
for field in qflist
|
||||
let item = '$'.matchstr(field['text'], '^[^[:space:]]\+')
|
||||
let m_menu = ''
|
||||
" Add -> if it is possible object declaration
|
||||
if field['text'] =~ item.'\s*=\s*new\s\+'
|
||||
let item = item.'->'
|
||||
let m_menu = matchstr(field['text'],
|
||||
\ '=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze')
|
||||
endif
|
||||
let ext_vars[item] = m_menu
|
||||
endfor
|
||||
endif
|
||||
|
||||
call extend(int_vars, ext_vars)
|
||||
let g:a0 = keys(int_vars)
|
||||
|
||||
for m in sort(keys(int_vars))
|
||||
if m =~ '^\'.a:base
|
||||
call add(res, m)
|
||||
endif
|
||||
endfor
|
||||
|
||||
let int_list = res
|
||||
|
||||
let int_dict = []
|
||||
for i in int_list
|
||||
if int_vars[i] != ''
|
||||
let class = ' '
|
||||
if int_vars[i] != ''
|
||||
let class = i.' class '
|
||||
endif
|
||||
let int_dict += [{'word':i, 'info':class.int_vars[i], 'kind':'v'}]
|
||||
else
|
||||
let int_dict += [{'word':i, 'kind':'v'}]
|
||||
endif
|
||||
endfor
|
||||
|
||||
return int_dict
|
||||
|
||||
else
|
||||
" Complete everything else -
|
||||
" + functions, DONE
|
||||
" + keywords of language DONE
|
||||
" + defines (constant definitions), DONE
|
||||
" + extend keywords for predefined constants, DONE
|
||||
" + classes (after new), DONE
|
||||
" + limit choice after -> and :: to funcs and vars DONE
|
||||
|
||||
" Internal solution for finding functions in current file.
|
||||
let file = getline(1, '$')
|
||||
call filter(file,
|
||||
\ 'v:val =~ "function\\s\\+&\\?[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("')
|
||||
let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
|
||||
let jfile = join(file, ' ')
|
||||
let int_values = split(jfile, 'function\s\+')
|
||||
let int_functions = {}
|
||||
for i in int_values
|
||||
let f_name = matchstr(i,
|
||||
\ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze')
|
||||
let f_args = matchstr(i,
|
||||
\ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\s*\zs.\{-}\ze\s*)\_s*{')
|
||||
let int_functions[f_name.'('] = f_args.')'
|
||||
endfor
|
||||
|
||||
" Prepare list of functions from tags file
|
||||
let ext_functions = {}
|
||||
if fnames != ''
|
||||
exe 'silent! vimgrep /^'.a:base.'.*\tf\(\t\|$\)/j '.fnames
|
||||
let qflist = getqflist()
|
||||
for field in qflist
|
||||
" File name
|
||||
let item = matchstr(field['text'], '^[^[:space:]]\+')
|
||||
let fname = matchstr(field['text'], '\t\zs\f\+\ze')
|
||||
let prototype = matchstr(field['text'],
|
||||
\ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?')
|
||||
let ext_functions[item.'('] = prototype.') - '.fname
|
||||
endfor
|
||||
endif
|
||||
|
||||
" All functions
|
||||
call extend(int_functions, ext_functions)
|
||||
call extend(int_functions, g:php_builtin_functions)
|
||||
|
||||
" Internal solution for finding constants in current file
|
||||
let file = getline(1, '$')
|
||||
call filter(file, 'v:val =~ "define\\s*("')
|
||||
let jfile = join(file, ' ')
|
||||
let int_values = split(jfile, 'define\s*(\s*')
|
||||
let int_constants = {}
|
||||
for i in int_values
|
||||
let c_name = matchstr(i, '\(["'']\)\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze\1')
|
||||
" let c_value = matchstr(i,
|
||||
" \ '\(["'']\)[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\1\s*,\s*\zs.\{-}\ze\s*)')
|
||||
if c_name != ''
|
||||
let int_constants[c_name] = '' " c_value
|
||||
endif
|
||||
endfor
|
||||
|
||||
" Prepare list of constants from tags file
|
||||
let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
|
||||
let ext_constants = {}
|
||||
if fnames != ''
|
||||
exe 'silent! vimgrep /^'.a:base.'.*\td\(\t\|$\)/j '.fnames
|
||||
let qflist = getqflist()
|
||||
for field in qflist
|
||||
let item = matchstr(field['text'], '^[^[:space:]]\+')
|
||||
let ext_constants[item] = ''
|
||||
endfor
|
||||
endif
|
||||
|
||||
" All constants
|
||||
call extend(int_constants, ext_constants)
|
||||
" Treat keywords as constants
|
||||
|
||||
let all_values = {}
|
||||
|
||||
" One big dictionary of functions
|
||||
call extend(all_values, int_functions)
|
||||
|
||||
" Add constants
|
||||
call extend(all_values, int_constants)
|
||||
" Add keywords
|
||||
call extend(all_values, g:php_keywords)
|
||||
|
||||
for m in sort(keys(all_values))
|
||||
if m =~ '^'.a:base
|
||||
call add(res, m)
|
||||
endif
|
||||
endfor
|
||||
|
||||
let int_list = res
|
||||
|
||||
let final_list = []
|
||||
for i in int_list
|
||||
if has_key(int_functions, i)
|
||||
let final_list +=
|
||||
\ [{'word':i,
|
||||
\ 'info':i.int_functions[i],
|
||||
\ 'kind':'f'}]
|
||||
elseif has_key(int_constants, i)
|
||||
let final_list += [{'word':i, 'kind':'d'}]
|
||||
else
|
||||
let final_list += [{'word':i}]
|
||||
endif
|
||||
endfor
|
||||
|
||||
return final_list
|
||||
|
||||
endif
|
||||
|
||||
endfunction
|
||||
|
||||
function! phpcomplete#GetClassName(scontext) " {{{
|
||||
" Get class name
|
||||
" Class name can be detected in few ways:
|
||||
" @var $myVar class
|
||||
" line above
|
||||
" or line in tags file
|
||||
|
||||
let object = matchstr(a:scontext, '\zs[a-zA-Z_0-9\x7f-\xff]\+\ze->')
|
||||
let i = 1
|
||||
while i < line('.')
|
||||
let line = getline(line('.')-i)
|
||||
if line =~ '^\s*\*\/\?\s*$'
|
||||
let i += 1
|
||||
continue
|
||||
else
|
||||
if line =~ '@var\s\+\$'.object.'\s\+[a-zA-Z_0-9\x7f-\xff]\+'
|
||||
let classname = matchstr(line, '@var\s\+\$'.object.'\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+')
|
||||
return classname
|
||||
else
|
||||
break
|
||||
endif
|
||||
endif
|
||||
endwhile
|
||||
|
||||
" OK, first way failed, now check tags file(s)
|
||||
let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
|
||||
exe 'silent! vimgrep /^'.object.'.*\$'.object.'.*=\s*new\s\+.*\tv\(\t\|$\)/j '.fnames
|
||||
let qflist = getqflist()
|
||||
if len(qflist) == 0
|
||||
return []
|
||||
endif
|
||||
" In all properly managed projects it should be one item list, even if it
|
||||
" *is* longer we cannot solve conflicts, assume it is first element
|
||||
let classname = matchstr(qflist[0]['text'], '=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze')
|
||||
return classname
|
||||
|
||||
endfunction
|
||||
" }}}
|
||||
function! phpcomplete#GetClassLocation(classname) " {{{
|
||||
" Get class location
|
||||
for fname in tagfiles()
|
||||
let fhead = fnamemodify(fname, ":h")
|
||||
if fhead != ''
|
||||
let psep = '/'
|
||||
let fhead .= psep
|
||||
endif
|
||||
let fname = escape(fname, " \\")
|
||||
exe 'silent! vimgrep /^'.a:classname.'.*\tc\(\t\|$\)/j '.fname
|
||||
let qflist = getqflist()
|
||||
" As in GetClassName we can manage only one element
|
||||
let classlocation = matchstr(qflist[0]['text'], '\t\zs\f\+\ze\t')
|
||||
" And only one class location
|
||||
if classlocation != ''
|
||||
let pset = '/' " Note: slash is potential problem!
|
||||
let classlocation = fhead.classlocation
|
||||
return classlocation
|
||||
endif
|
||||
endfor
|
||||
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
function! phpcomplete#GetClassContents(file, name) " {{{
|
||||
let cfile = join(a:file, "\n")
|
||||
" We use new buffer and (later) normal! because
|
||||
" this is the most efficient way. The other way
|
||||
" is to go through the looong string looking for
|
||||
" matching {}
|
||||
below 1new
|
||||
0put =cfile
|
||||
call search('class\s\+'.a:name)
|
||||
let cfline = line('.')
|
||||
" Catch extends
|
||||
if getline('.') =~ 'extends'
|
||||
let extends_class = matchstr(getline('.'),
|
||||
\ 'class\s\+'.a:name.'\s\+extends\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze')
|
||||
else
|
||||
let extends_class = ''
|
||||
endif
|
||||
normal! %
|
||||
let classc = getline(cfline, ".")
|
||||
let classcontent = join(classc, "\n")
|
||||
|
||||
bw! %
|
||||
if extends_class != ''
|
||||
let classlocation = phpcomplete#GetClassLocation(extends_class)
|
||||
if filereadable(classlocation)
|
||||
let classfile = readfile(classlocation)
|
||||
let classcontent .= "\n".phpcomplete#GetClassContents(classfile, extends_class)
|
||||
endif
|
||||
endif
|
||||
|
||||
return classcontent
|
||||
endfunction
|
||||
" }}}
|
||||
|
||||
function! phpcomplete#LoadData() " {{{
|
||||
" Keywords/reserved words, all other special things {{{
|
||||
" Later it is possible to add some help to values, or type of
|
||||
" defined variable
|
||||
let b:php_keywords = {
|
||||
let g:php_keywords = {
|
||||
\ 'PHP_SELF':'',
|
||||
\ 'argv':'',
|
||||
\ 'argc':'',
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
" Vim completion script
|
||||
" Language: SQL
|
||||
" Maintainer: David Fishburn <fishburn@ianywhere.com>
|
||||
" Version: 1.0
|
||||
" Last Change: Tue Mar 28 2006 4:39:49 PM
|
||||
" Version: 2.0
|
||||
" Last Change: Mon Apr 03 2006 10:21:36 PM
|
||||
|
||||
" Set completion with CTRL-X CTRL-O to autoloaded function.
|
||||
" This check is in place in case this script is
|
||||
@ -21,20 +21,20 @@ endif
|
||||
let g:loaded_sql_completion = 1
|
||||
|
||||
" Maintains filename of dictionary
|
||||
let s:sql_file_table = ""
|
||||
let s:sql_file_procedure = ""
|
||||
let s:sql_file_view = ""
|
||||
let s:sql_file_table = ""
|
||||
let s:sql_file_procedure = ""
|
||||
let s:sql_file_view = ""
|
||||
|
||||
" Define various arrays to be used for caching
|
||||
let s:tbl_name = []
|
||||
let s:tbl_alias = []
|
||||
let s:tbl_cols = []
|
||||
let s:syn_list = []
|
||||
let s:syn_value = []
|
||||
let s:tbl_name = []
|
||||
let s:tbl_alias = []
|
||||
let s:tbl_cols = []
|
||||
let s:syn_list = []
|
||||
let s:syn_value = []
|
||||
|
||||
" Used in conjunction with the syntaxcomplete plugin
|
||||
let s:save_inc = ""
|
||||
let s:save_exc = ""
|
||||
let s:save_inc = ""
|
||||
let s:save_exc = ""
|
||||
if exists('g:omni_syntax_group_include_sql')
|
||||
let s:save_inc = g:omni_syntax_group_include_sql
|
||||
endif
|
||||
@ -43,12 +43,23 @@ if exists('g:omni_syntax_group_exclude_sql')
|
||||
endif
|
||||
|
||||
" Used with the column list
|
||||
let s:save_prev_table = ""
|
||||
let s:save_prev_table = ""
|
||||
|
||||
" Default the option to verify table alias
|
||||
if !exists('g:omni_sql_use_tbl_alias')
|
||||
let g:omni_sql_use_tbl_alias = 'a'
|
||||
endif
|
||||
" Default syntax items to precache
|
||||
if !exists('g:omni_sql_precache_syntax_groups')
|
||||
let g:omni_sql_precache_syntax_groups = [
|
||||
\ 'syntax',
|
||||
\ 'sqlKeyword',
|
||||
\ 'sqlFunction',
|
||||
\ 'sqlOption',
|
||||
\ 'sqlType',
|
||||
\ 'sqlStatement'
|
||||
\ ]
|
||||
endif
|
||||
|
||||
" This function is used for the 'omnifunc' option.
|
||||
function! sqlcomplete#Complete(findstart, base)
|
||||
@ -60,6 +71,8 @@ function! sqlcomplete#Complete(findstart, base)
|
||||
let compl_type = b:sql_compl_type
|
||||
endif
|
||||
|
||||
" First pass through this function determines how much of the line should
|
||||
" be replaced by whatever is chosen from the completion list
|
||||
if a:findstart
|
||||
" Locate the start of the item, including "."
|
||||
let line = getline('.')
|
||||
@ -68,15 +81,16 @@ function! sqlcomplete#Complete(findstart, base)
|
||||
while start > 0
|
||||
if line[start - 1] =~ '\w'
|
||||
let start -= 1
|
||||
elseif line[start - 1] =~ '\.' && compl_type =~ 'column\|table'
|
||||
" If the completion type is table or column
|
||||
" Then assume we are looking for column completion
|
||||
" column_type can be either 'column' or 'column_csv'
|
||||
if lastword == -1
|
||||
elseif line[start - 1] =~ '\.' && compl_type =~ 'column'
|
||||
" If the completion type is column then assume we are looking
|
||||
" for column completion column_type can be either
|
||||
" 'column' or 'column_csv'
|
||||
if lastword == -1 && compl_type == 'column'
|
||||
" Do not replace the table name prefix or alias
|
||||
" if completing only a single column name
|
||||
let lastword = start
|
||||
endif
|
||||
let start -= 1
|
||||
let b:sql_compl_type = 'column'
|
||||
else
|
||||
break
|
||||
endif
|
||||
@ -92,8 +106,12 @@ function! sqlcomplete#Complete(findstart, base)
|
||||
return lastword
|
||||
endif
|
||||
|
||||
" Second pass through this function will determine what data to put inside
|
||||
" of the completion list
|
||||
" s:prepended is set by the first pass
|
||||
let base = s:prepended . a:base
|
||||
|
||||
" Default the completion list to an empty list
|
||||
let compl_list = []
|
||||
|
||||
" Default to table name completion
|
||||
@ -178,36 +196,8 @@ function! sqlcomplete#Complete(findstart, base)
|
||||
let s:tbl_cols = []
|
||||
let s:syn_list = []
|
||||
let s:syn_value = []
|
||||
return []
|
||||
else
|
||||
" Default to empty or not found
|
||||
let compl_list = []
|
||||
" Check if we have already cached the syntax list
|
||||
let list_idx = index(s:syn_list, compl_type, 0, &ignorecase)
|
||||
if list_idx > -1
|
||||
" Return previously cached value
|
||||
let compl_list = s:syn_value[list_idx]
|
||||
else
|
||||
" Request the syntax list items from the
|
||||
" syntax completion plugin
|
||||
if compl_type == 'syntax'
|
||||
" Handle this special case. This allows the user
|
||||
" to indicate they want all the syntax items available,
|
||||
" so do not specify a specific include list.
|
||||
let g:omni_syntax_group_include_sql = ''
|
||||
else
|
||||
" The user has specified a specific syntax group
|
||||
let g:omni_syntax_group_include_sql = compl_type
|
||||
endif
|
||||
let g:omni_syntax_group_exclude_sql = ''
|
||||
let syn_value = OmniSyntaxList()
|
||||
let g:omni_syntax_group_include_sql = s:save_inc
|
||||
let g:omni_syntax_group_exclude_sql = s:save_exc
|
||||
" Cache these values for later use
|
||||
let s:syn_list = add( s:syn_list, compl_type )
|
||||
let s:syn_value = add( s:syn_value, syn_value )
|
||||
let compl_list = syn_value
|
||||
endif
|
||||
let compl_list = s:SQLCGetSyntaxList(compl_type)
|
||||
endif
|
||||
|
||||
if base != ''
|
||||
@ -217,6 +207,10 @@ function! sqlcomplete#Complete(findstart, base)
|
||||
let compl_list = filter(copy(compl_list), expr)
|
||||
endif
|
||||
|
||||
if exists('b:sql_compl_savefunc') && b:sql_compl_savefunc != ""
|
||||
let &omnifunc = b:sql_compl_savefunc
|
||||
endif
|
||||
|
||||
return compl_list
|
||||
endfunc
|
||||
|
||||
@ -232,6 +226,70 @@ function! s:SQLCErrorMsg(msg)
|
||||
echohl None
|
||||
endfunction
|
||||
|
||||
function! sqlcomplete#PreCacheSyntax(...)
|
||||
let syn_group_arr = []
|
||||
if a:0 > 0
|
||||
let syn_group_arr = a:1
|
||||
else
|
||||
let syn_group_arr = g:omni_sql_precache_syntax_groups
|
||||
endif
|
||||
if !empty(syn_group_arr)
|
||||
for group_name in syn_group_arr
|
||||
call s:SQLCGetSyntaxList(group_name)
|
||||
endfor
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! sqlcomplete#Map(type)
|
||||
" Tell the SQL plugin what you want to complete
|
||||
let b:sql_compl_type=a:type
|
||||
" Record previous omnifunc, if the SQL completion
|
||||
" is being used in conjunction with other filetype
|
||||
" completion plugins
|
||||
if &omnifunc != "" && &omnifunc != 'sqlcomplete#Complete'
|
||||
" Record the previous omnifunc, the plugin
|
||||
" will automatically set this back so that it
|
||||
" does not interfere with other ftplugins settings
|
||||
let b:sql_compl_savefunc=&omnifunc
|
||||
endif
|
||||
" Set the OMNI func for the SQL completion plugin
|
||||
let &omnifunc='sqlcomplete#Complete'
|
||||
endfunction
|
||||
|
||||
function! s:SQLCGetSyntaxList(syn_group)
|
||||
let syn_group = a:syn_group
|
||||
let compl_list = []
|
||||
|
||||
" Check if we have already cached the syntax list
|
||||
let list_idx = index(s:syn_list, syn_group, 0, &ignorecase)
|
||||
if list_idx > -1
|
||||
" Return previously cached value
|
||||
let compl_list = s:syn_value[list_idx]
|
||||
else
|
||||
" Request the syntax list items from the
|
||||
" syntax completion plugin
|
||||
if syn_group == 'syntax'
|
||||
" Handle this special case. This allows the user
|
||||
" to indicate they want all the syntax items available,
|
||||
" so do not specify a specific include list.
|
||||
let g:omni_syntax_group_include_sql = ''
|
||||
else
|
||||
" The user has specified a specific syntax group
|
||||
let g:omni_syntax_group_include_sql = syn_group
|
||||
endif
|
||||
let g:omni_syntax_group_exclude_sql = ''
|
||||
let syn_value = OmniSyntaxList()
|
||||
let g:omni_syntax_group_include_sql = s:save_inc
|
||||
let g:omni_syntax_group_exclude_sql = s:save_exc
|
||||
" Cache these values for later use
|
||||
let s:syn_list = add( s:syn_list, syn_group )
|
||||
let s:syn_value = add( s:syn_value, syn_value )
|
||||
let compl_list = syn_value
|
||||
endif
|
||||
|
||||
return compl_list
|
||||
endfunction
|
||||
|
||||
function! s:SQLCCheck4dbext()
|
||||
if !exists('g:loaded_dbext')
|
||||
let msg = "The dbext plugin must be loaded for dynamic SQL completion"
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
" tar.vim: Handles browsing tarfiles
|
||||
" AUTOLOAD PORTION
|
||||
" Date: Dec 24, 2005
|
||||
" Date: Mar 27, 2006
|
||||
" Version: 7
|
||||
" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
|
||||
" License: Vim License (see vim's :help license)
|
||||
@ -25,6 +25,7 @@ if exists("g:loaded_tar")
|
||||
finish
|
||||
endif
|
||||
let g:loaded_tar= "v7"
|
||||
"call Decho("loading autoload/tar.vim")
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" Default Settings: {{{1
|
||||
@ -34,6 +35,9 @@ endif
|
||||
if !exists("g:tar_readoptions")
|
||||
let g:tar_readoptions= "OPxf"
|
||||
endif
|
||||
if !exists("g:tar_cmd")
|
||||
let g:tar_cmd= "tar"
|
||||
endif
|
||||
if !exists("g:tar_writeoptions")
|
||||
let g:tar_writeoptions= "uf"
|
||||
endif
|
||||
@ -50,14 +54,15 @@ fun! tar#Browse(tarfile)
|
||||
set report=10
|
||||
|
||||
" sanity checks
|
||||
if !executable("tar")
|
||||
echohl Error | echo '***error*** (tar#Browse) "tar" not available on your system'
|
||||
if !executable(g:tar_cmd)
|
||||
echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system'
|
||||
call inputsave()|call input("Press <cr> to continue")|call inputrestore()
|
||||
let &report= repkeep
|
||||
" call Dret("tar#Browse")
|
||||
return
|
||||
endif
|
||||
if !filereadable(a:tarfile)
|
||||
" call Decho('a:tarfile<'.a:tarfile.'> not filereadable')
|
||||
if a:tarfile !~# '^\a\+://'
|
||||
" if its an url, don't complain, let url-handlers such as vim do its thing
|
||||
echohl Error | echo "***error*** (tar#Browse) File not readable<".a:tarfile.">" | echohl None
|
||||
@ -80,20 +85,33 @@ fun! tar#Browse(tarfile)
|
||||
set ft=tar
|
||||
|
||||
" give header
|
||||
" call Decho("printing header")
|
||||
exe "$put ='".'\"'." tar.vim version ".g:loaded_tar."'"
|
||||
exe "$put ='".'\"'." Browsing tarfile ".a:tarfile."'"
|
||||
exe "$put ='".'\"'." Select a file with cursor and press ENTER"."'"
|
||||
0d
|
||||
$
|
||||
|
||||
if a:tarfile =~# '\.\(gz\|tgz\)$'
|
||||
exe "silent r! gzip -d -c '".a:tarfile."'| tar -".g:tar_browseoptions." - "
|
||||
elseif a:tarfile =~# '\.bz2$'
|
||||
exe "silent r! bzip2 -d -c '".a:tarfile."'| tar -".g:tar_browseoptions." - "
|
||||
else
|
||||
exe "silent r! tar -".g:tar_browseoptions." '".a:tarfile."'"
|
||||
let tarfile= a:tarfile
|
||||
if has("win32") && executable("cygpath")
|
||||
" assuming cygwin
|
||||
let tarfile=substitute(system("cygpath -u ".tarfile),'\n$','','e')
|
||||
endif
|
||||
if tarfile =~# '\.\(gz\|tgz\)$'
|
||||
" call Decho("exe silent r! gzip -d -c '".tarfile."'| tar -".g:tar_browseoptions." - ")
|
||||
exe "silent r! gzip -d -c '".tarfile."'| tar -".g:tar_browseoptions." - "
|
||||
elseif tarfile =~# '\.bz2$'
|
||||
" call Decho("exe silent r! bzip2 -d -c '".tarfile."'| tar -".g:tar_browseoptions." - ")
|
||||
exe "silent r! bzip2 -d -c '".tarfile."'| tar -".g:tar_browseoptions." - "
|
||||
else
|
||||
" call Decho("exe silent r! ".g:tar_cmd." -".g:tar_browseoptions." '".tarfile."'")
|
||||
exe "silent r! ".g:tar_cmd." -".g:tar_browseoptions." '".tarfile."'"
|
||||
endif
|
||||
if v:shell_error != 0
|
||||
echohl Error | echo '***error*** (tar#Browse) while browsing; check your g:tar_browseoptions<".g:tar_browseoptions.">"
|
||||
" call Dret("tar#Browse : w:tarfile<".w:tarfile.">")
|
||||
return
|
||||
endif
|
||||
silent %g@/$@d
|
||||
|
||||
setlocal noma nomod ro
|
||||
noremap <silent> <buffer> <cr> :call <SID>TarBrowseSelect()<cr>
|
||||
@ -121,12 +139,21 @@ fun! s:TarBrowseSelect()
|
||||
" about to make a new window, need to use w:tarfile
|
||||
let tarfile= w:tarfile
|
||||
let curfile= expand("%")
|
||||
if has("win32") && executable("cygpath")
|
||||
" assuming cygwin
|
||||
let tarfile=substitute(system("cygpath -u ".tarfile),'\n$','','e')
|
||||
endif
|
||||
|
||||
new
|
||||
wincmd _
|
||||
let s:tblfile_{winnr()}= curfile
|
||||
" call Decho("exe e tarfile:".tarfile.':'.fname)
|
||||
exe "e tarfile:".tarfile.':'.fname
|
||||
" if has("unix")
|
||||
"" call Decho("exe e tarfile:".tarfile.':'.fname)
|
||||
" exe "e tarfile:".tarfile.':'.fname
|
||||
" elseif has("win32")
|
||||
" call tar#Read("tarfile:".tarfile.':'.fname,1)
|
||||
" endif
|
||||
call tar#Read("tarfile:".tarfile.':'.fname,1)
|
||||
filetype detect
|
||||
|
||||
let &report= repkeep
|
||||
@ -141,7 +168,12 @@ fun! tar#Read(fname,mode)
|
||||
set report=10
|
||||
let tarfile = substitute(a:fname,'tarfile:\(.\{-}\):.*$','\1','')
|
||||
let fname = substitute(a:fname,'tarfile:.\{-}:\(.*\)$','\1','')
|
||||
" call Decho("tarfile<".tarfile."> fname<".fname.">")
|
||||
if has("win32") && executable("cygpath")
|
||||
" assuming cygwin
|
||||
let tarfile=substitute(system("cygpath -u ".tarfile),'\n$','','e')
|
||||
endif
|
||||
" call Decho("tarfile<".tarfile.">")
|
||||
" call Decho("fname<".fname.">")
|
||||
|
||||
if tarfile =~# '\.\(gz\|tgz\)$'
|
||||
" call Decho("exe silent r! gzip -d -c '".tarfile."'| tar -OPxf - '".fname."'")
|
||||
@ -151,7 +183,7 @@ fun! tar#Read(fname,mode)
|
||||
exe "silent r! bzip2 -d -c '".tarfile."'| tar -".g:tar_readoptions." - '".fname."'"
|
||||
else
|
||||
" call Decho("exe silent r! tar -".g:tar_readoptions." '".tarfile."' '".fname."'")
|
||||
exe "silent r! tar -".g:tar_readoptions." '".tarfile."' '".fname."'"
|
||||
exe "silent r! ".g:tar_cmd." -".g:tar_readoptions." '".tarfile."' '".fname."'"
|
||||
endif
|
||||
let w:tarfile= a:fname
|
||||
exe "file tarfile:".fname
|
||||
@ -172,8 +204,8 @@ fun! tar#Write(fname)
|
||||
set report=10
|
||||
|
||||
" sanity checks
|
||||
if !executable("tar")
|
||||
echohl Error | echo '***error*** (tar#Browse) "tar" not available on your system'
|
||||
if !executable(g:tar_cmd)
|
||||
echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system'
|
||||
call inputsave()|call input("Press <cr> to continue")|call inputrestore()
|
||||
let &report= repkeep
|
||||
" call Dret("tar#Write")
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
" vimball : construct a file containing both paths and files
|
||||
" Author: Charles E. Campbell, Jr.
|
||||
" Date: Mar 22, 2006
|
||||
" Version: 5
|
||||
" Date: Mar 31, 2006
|
||||
" Version: 6
|
||||
" GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
|
||||
" Copyright: (c) 2004-2006 by Charles E. Campbell, Jr.
|
||||
" The VIM LICENSE applies to Vimball.vim, and Vimball.txt
|
||||
@ -15,7 +15,7 @@ if &cp || exists("g:loaded_vimball")
|
||||
finish
|
||||
endif
|
||||
let s:keepcpo = &cpo
|
||||
let g:loaded_vimball = "v5"
|
||||
let g:loaded_vimball = "v6"
|
||||
set cpo&vim
|
||||
|
||||
" =====================================================================
|
||||
@ -190,7 +190,7 @@ fun! vimball#Vimball(really)
|
||||
" call Decho("yanked ".fsize." lines into register-a")
|
||||
|
||||
" call Decho("didhelp<".didhelp."> fname<".fname.">")
|
||||
if didhelp == "" && fname =~ 'doc/[^/]\+\.txt$'
|
||||
if a:really && didhelp == "" && fname =~ 'doc/[^/]\+\.txt$'
|
||||
let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.txt$','\1','e')
|
||||
" call Decho("didhelp<".didhelp.">")
|
||||
endif
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
" Vim completion script
|
||||
" Language: XML
|
||||
" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
|
||||
" Last Change: 2006 Mar 19
|
||||
" Last Change: 2006 Mar 31
|
||||
|
||||
" This function will create Dictionary with users namespace strings and values
|
||||
" canonical (system) names of data files. Names should be lowercase,
|
||||
" descriptive to avoid any future conflicts. For example 'xhtml10s' should be
|
||||
" name for data of XHTML 1.0 Strict and 'xhtml10t' for XHTML 1.0 Transitional
|
||||
" User interface will be provided by XMLns command defined ...
|
||||
" User interface will be provided by XMLns command defined in ftplugin/xml.vim
|
||||
" Currently supported canonicals are:
|
||||
" xhtml10s - XHTML 1.0 Strict
|
||||
" xsl - XSL
|
||||
@ -224,8 +224,13 @@ function! xmlcomplete#CompleteTags(findstart, base)
|
||||
let attrs = ['encoding', 'version="1.0"', 'version']
|
||||
elseif tag =~ '^!'
|
||||
" Don't make completion at all
|
||||
"
|
||||
return []
|
||||
else
|
||||
if !has_key(g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}, tag)
|
||||
" Abandon when data file isn't complete
|
||||
return []
|
||||
endif
|
||||
let attrs = keys(g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}[tag][1])
|
||||
endif
|
||||
|
||||
@ -324,6 +329,10 @@ function! xmlcomplete#CompleteTags(findstart, base)
|
||||
let tags = keys(g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]})
|
||||
call filter(tags, 'v:val !~ "^vimxml"')
|
||||
else
|
||||
if !has_key(g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}, tag)
|
||||
" Abandon when data file isn't complete
|
||||
return []
|
||||
endif
|
||||
let tags = g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}[opentag][0]
|
||||
endif
|
||||
|
||||
|
||||
@ -75,11 +75,15 @@ fun! zip#Browse(zipfile)
|
||||
0d
|
||||
$
|
||||
|
||||
" call Decho("exe silent r! unzip -l '".escape(a:zipfile,s:zipfile_escape)."'")
|
||||
exe "silent r! unzip -l ".escape(a:zipfile,s:zipfile_escape)
|
||||
" call Decho("exe silent r! unzip -l '".a:zipfile."'")
|
||||
exe "silent r! unzip -l '".a:zipfile."'"
|
||||
" call Decho("line 6: ".getline(6))
|
||||
let namecol= stridx(getline(6),'Name') + 1
|
||||
" call Decho("namecol=".namecol)
|
||||
4,$g/^\s*----/d
|
||||
4,$g/^\s*\a/d
|
||||
$d
|
||||
silent 4,$v/^\s\+\d\+\s\{0,5}\d/d
|
||||
silent 4,$s/^\%(.*\)\s\+\(\S\)/\1/
|
||||
exe 'silent 4,$s/^.*\%'.namecol.'c//'
|
||||
|
||||
setlocal noma nomod ro
|
||||
noremap <silent> <buffer> <cr> :call <SID>ZipBrowseSelect()<cr>
|
||||
@ -114,15 +118,15 @@ fun! s:ZipBrowseSelect()
|
||||
|
||||
" get zipfile to the new-window
|
||||
let zipfile= substitute(w:zipfile,'.zip$','','e')
|
||||
let curfile= escape(expand("%"),s:zipfile_escape)
|
||||
let curfile= expand("%")
|
||||
" call Decho("zipfile<".zipfile.">")
|
||||
" call Decho("curfile<".curfile.">")
|
||||
|
||||
new
|
||||
wincmd _
|
||||
let s:zipfile_{winnr()}= curfile
|
||||
" call Decho("exe e zipfile:".escape(zipfile,s:zipfile_escape).':'.fname)
|
||||
exe "e zipfile:".escape(zipfile,s:zipfile_escape).':'.fname
|
||||
" call Decho("exe e zipfile:".escape(zipfile,s:zipfile_escape).':'.escape(fname,s:zipfile_escape))
|
||||
exe "e zipfile:".escape(zipfile,s:zipfile_escape).':'.escape(fname,s:zipfile_escape)
|
||||
filetype detect
|
||||
|
||||
let &report= repkeep
|
||||
@ -140,8 +144,8 @@ fun! zip#Read(fname,mode)
|
||||
let fname = substitute(a:fname,'zipfile:.\{-}:\([^\\].*\)$','\1','')
|
||||
" call Decho("zipfile<".zipfile."> fname<".fname.">")
|
||||
|
||||
" call Decho("exe r! unzip -p '".escape(zipfile,s:zipfile_escape)."' ".fname)
|
||||
exe "r! unzip -p ".escape(zipfile,s:zipfile_escape)." ".fname
|
||||
" call Decho("exe r! unzip -p '".zipfile."' '".fname."'")
|
||||
exe "silent r! unzip -p '".zipfile."' '".fname."'"
|
||||
|
||||
" cleanup
|
||||
0d
|
||||
@ -154,7 +158,7 @@ endfun
|
||||
" ---------------------------------------------------------------------
|
||||
" zip#Write: {{{2
|
||||
fun! zip#Write(fname)
|
||||
" call Dfunc("zip#Write(fname<".a:fname.") zipfile_".winnr()."<".s:zipfile_{winnr()}.">")
|
||||
" call Dfunc("zip#Write(fname<".a:fname.">) zipfile_".winnr()."<".s:zipfile_{winnr()}.">")
|
||||
let repkeep= &report
|
||||
set report=10
|
||||
|
||||
@ -211,6 +215,7 @@ fun! zip#Write(fname)
|
||||
if executable("cygpath")
|
||||
let dirpath = substitute(system("cygpath ".dirpath),'\n','','e')
|
||||
endif
|
||||
" call Decho("mkdir(dirpath<".dirpath.">,p)")
|
||||
call mkdir(dirpath,"p")
|
||||
endif
|
||||
if zipfile !~ '/'
|
||||
@ -218,13 +223,13 @@ fun! zip#Write(fname)
|
||||
endif
|
||||
" call Decho("zipfile<".zipfile."> fname<".fname.">")
|
||||
|
||||
exe "w! ".fname
|
||||
exe "w! ".escape(fname,s:zipfile_escape)
|
||||
if executable("cygpath")
|
||||
let zipfile = substitute(system("cygpath ".zipfile),'\n','','e')
|
||||
endif
|
||||
|
||||
" call Decho("zip -u ".zipfile.".zip ".fname)
|
||||
call system("zip -u ".zipfile.".zip ".fname)
|
||||
" call Decho("zip -u '".zipfile.".zip' '".fname."'")
|
||||
call system("zip -u '".zipfile.".zip' '".fname."'")
|
||||
if v:shell_error != 0
|
||||
echohl Error | echo "***error*** (zip#Write) sorry, unable to update ".zipfile." with ".fname | echohl None
|
||||
call inputsave()|call input("Press <cr> to continue")|call inputrestore()
|
||||
|
||||
Reference in New Issue
Block a user