From 8a7b0237e84f9718a5cd3ce6290342f1b39ccd38 Mon Sep 17 00:00:00 2001 From: Ahmad Fatoum Date: Sat, 5 Sep 2015 09:51:57 +0200 Subject: [PATCH 1/7] Changed README to markdown Fixed broken GIF: now embedded in page. used code tags for code --- README | 23 ----------------------- README.md | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 23 deletions(-) delete mode 100644 README create mode 100644 README.md diff --git a/README b/README deleted file mode 100644 index f273aa6..0000000 --- a/README +++ /dev/null @@ -1,23 +0,0 @@ -created by -Ming Bai - -script type -utility - -description -Demo :http://files.myopera.com/mbbill/files/code_complete.gif -It shows what this script can do. -In insert mode, when you type ""(default value of g:completekey) after function name with a "(" , function parameters will be append behind, use "" key again to switch between parameters. -This key is also used to complete code snippets. -Example: -press after function name and ( - foo ( -becomes: - foo ( ``,`` ) -press after code template - if -becomes: - if( `<...>` ) - { - `<...>` - } diff --git a/README.md b/README.md new file mode 100644 index 0000000..0938988 --- /dev/null +++ b/README.md @@ -0,0 +1,34 @@ +Created by: +Ming Bai + +Script type: +Utility + +### Description +![Demo](https://web.archive.org/web/20131110125157/http://files.myopera.com/mbbill/files/code_complete.gif) + +It shows what this script can do. + +In insert mode, when you type `` (default value of g:completekey) after function name with a `(` , function parameters will be append behind, use `` key again to switch between parameters. + +This key is also used to complete code snippets. + +#### Example: +press `` after function name and `(` + + foo ( + +becomes: + + foo ( ``,`` ) + +press `` after code template + + if + +becomes: + + if( `<...>` ) + { + `<...>` + } From af0af085ad98361bd3469f36d47664a2a04d76ea Mon Sep 17 00:00:00 2001 From: Zhuang Ma Date: Thu, 29 Oct 2015 10:54:01 +0800 Subject: [PATCH 2/7] 1. fix bug of user defined snippets file cannot load when g:user_defined_snippets set to a path not in &runtimepath 2. adapter Vundle. when use Vundle to manage plugin, my_snippets.vim is not in $VIMRUNTIME/plugin --- plugin/code_complete.vim | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugin/code_complete.vim b/plugin/code_complete.vim index 01fef67..b952342 100644 --- a/plugin/code_complete.vim +++ b/plugin/code_complete.vim @@ -72,7 +72,7 @@ if !exists("g:re") endif if !exists("g:user_defined_snippets") - let g:user_defined_snippets = "$VIMRUNTIME/plugin/my_snippets.vim" + let g:user_defined_snippets = "" endif " ---------------------------- @@ -271,7 +271,8 @@ let g:template['_']['xt'] = "\=strftime(\"%Y-%m-%d %H:%M:%S\")\" " --------------------------------------------- " load user defined snippets -exec "silent! runtime ".g:user_defined_snippets +exec "silent! runtime plugin/my_snippets.vim" +exec "silent! source ".g:user_defined_snippets " vim: set fdm=marker et : From 917241cd8275a1a8e7ddc82f96a59439e0263728 Mon Sep 17 00:00:00 2001 From: Interleaved Date: Sat, 24 Dec 2016 00:30:40 +0100 Subject: [PATCH 3/7] Add new option for case-insensitive keyword search - Add new option g:CodeComplete_Ignorecase. - Add checks for new option before dictionary handling in ExpandTemplate function. --- plugin/code_complete.vim | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/plugin/code_complete.vim b/plugin/code_complete.vim index b952342..da156ff 100644 --- a/plugin/code_complete.vim +++ b/plugin/code_complete.vim @@ -45,6 +45,9 @@ " g:user_defined_snippets " file name of user defined snippets. " +" g:CodeComplete_Ignorecase +" use ignore case for keywords. + " key words: " see "templates" section. "================================================== @@ -161,14 +164,28 @@ endfunction function! ExpandTemplate(cword) "let cword = substitute(getline('.')[:(col('.')-2)],'\zs.*\W\ze\w*$','','g') if has_key(g:template,&ft) + if ( exists('g:CodeComplete_Ignorecase') && g:CodeComplete_Ignorecase ) + if has_key(g:template[&ft],tolower(a:cword)) + let s:jumppos = line('.') + return "\" . g:template[&ft][tolower(a:cword)] + endif + else if has_key(g:template[&ft],a:cword) let s:jumppos = line('.') return "\" . g:template[&ft][a:cword] endif + endif endif - if has_key(g:template['_'],a:cword) - let s:jumppos = line('.') - return "\" . g:template['_'][a:cword] + if ( exists('g:CodeComplete_Ignorecase') && g:CodeComplete_Ignorecase ) + if has_key(g:template['_'],tolower(a:cword)) + let s:jumppos = line('.') + return "\" . g:template['_'][tolower(a:cword)] + endif + else + if has_key(g:template['_'],a:cword) + let s:jumppos = line('.') + return "\" . g:template['_'][a:cword] + endif endif return '' endfunction From df29f6e71aa7eb689ec4943804a0739ac5e02072 Mon Sep 17 00:00:00 2001 From: Interleaved Date: Sat, 31 Dec 2016 00:58:30 +0100 Subject: [PATCH 4/7] Add possibility to use multiple user snippet files IMPORTANT: It is backwards-compatible. I first check if the variable is a string (used until this PR) and keep the existing code for that (except adding the runtime command for loading the snippet file). Only if the variable is a list a for loop for loading multiple snippet files is used. --- plugin/code_complete.vim | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/plugin/code_complete.vim b/plugin/code_complete.vim index da156ff..0f2ea8e 100644 --- a/plugin/code_complete.vim +++ b/plugin/code_complete.vim @@ -289,7 +289,14 @@ let g:template['_']['xt'] = "\=strftime(\"%Y-%m-%d %H:%M:%S\")\" " --------------------------------------------- " load user defined snippets exec "silent! runtime plugin/my_snippets.vim" -exec "silent! source ".g:user_defined_snippets - +if type(g:user_defined_snippets) == v:t_string + exec "silent! runtime ".g:user_defined_snippets + exec "silent! source ".g:user_defined_snippets +elseif type(g:user_defined_snippets) == v:t_list + for snippet in g:user_defined_snippets + exec "silent! runtime ".snippet + exec "silent! source ".snippet + endfor +endif " vim: set fdm=marker et : From 183337b52f69eabcdb7a53445e227dd72ca161a2 Mon Sep 17 00:00:00 2001 From: Interleaved Date: Sat, 31 Dec 2016 01:09:05 +0100 Subject: [PATCH 5/7] Add code snippet section to readme --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 0938988..38a6756 100644 --- a/README.md +++ b/README.md @@ -32,3 +32,15 @@ becomes: { `<...>` } + +### Code Snippets + +Custom snippet files can be used. The default file is +[my_snippets.vim](plugin/my_snippets.vim) and is loaded by default. To add +more custom snippet files (see [my_snippets.vim](plugin/my_snippets.vim) for +the structure), use one of the following variables in your vimrc: + +``` viml +let g:user_defined_snippets = "snippets/custom_snippets.vim" +let g:user_defined_snippets = ["snippets/c_snippets.vim", "snippets/js_snippets.vim"] +``` From 186409bdc7dd2a11ac49f4ad90324627b44af2f2 Mon Sep 17 00:00:00 2001 From: Bill Ming Date: Fri, 13 Jan 2017 00:11:14 +0800 Subject: [PATCH 6/7] Using type() for better backward compatibility. --- plugin/code_complete.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin/code_complete.vim b/plugin/code_complete.vim index 0f2ea8e..c37e10a 100644 --- a/plugin/code_complete.vim +++ b/plugin/code_complete.vim @@ -289,10 +289,10 @@ let g:template['_']['xt'] = "\=strftime(\"%Y-%m-%d %H:%M:%S\")\" " --------------------------------------------- " load user defined snippets exec "silent! runtime plugin/my_snippets.vim" -if type(g:user_defined_snippets) == v:t_string +if type(g:user_defined_snippets) == type("") exec "silent! runtime ".g:user_defined_snippets exec "silent! source ".g:user_defined_snippets -elseif type(g:user_defined_snippets) == v:t_list +elseif type(g:user_defined_snippets) == type([]) for snippet in g:user_defined_snippets exec "silent! runtime ".snippet exec "silent! source ".snippet From 9970eea98dd7a5fb088915fe2f02d628c449f34a Mon Sep 17 00:00:00 2001 From: huhumt Date: Mon, 17 Dec 2018 16:41:12 +0800 Subject: [PATCH 7/7] do not add ) when there is one already --- plugin/code_complete.vim | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/plugin/code_complete.vim b/plugin/code_complete.vim index c37e10a..866a0e5 100644 --- a/plugin/code_complete.vim +++ b/plugin/code_complete.vim @@ -102,7 +102,7 @@ function! CodeCompleteStop() exec "silent! iunmap ".g:completekey endfunction -function! FunctionComplete(fun) +function! FunctionComplete(fun, last_char) let s:signature_list=[] let signature_word=[] let ftags=taglist("^".a:fun."$") @@ -110,6 +110,11 @@ function! FunctionComplete(fun) return '' endif let tmp='' + if a:last_char == ')' + let s:append_tail = '' + else + let s:append_tail = ')' + endif for i in ftags if match(i.cmd,'^/\^.*\(\*'.a:fun.'\)\(.*\)\;\$/')>=0 if match(i.cmd,'(\s*void\s*)')<0 && match(i.cmd,'(\s*)')<0 @@ -120,7 +125,8 @@ function! FunctionComplete(fun) let tmp=substitute(tmp,'\$\/','','') let tmp=substitute(tmp,';','','') let tmp=substitute(tmp,',',g:re.','.g:rs,'g') - let tmp=substitute(tmp,'(\(.*\))',g:rs.'\1'.g:re.')','g') + " let tmp=substitute(tmp,'(\(.*\))',g:rs.'\1'.g:re.')','g') + let tmp=substitute(tmp,'(\(.*\))',g:rs.'\1'.g:re.s:append_tail,'g') else let tmp='' endif @@ -136,7 +142,8 @@ function! FunctionComplete(fun) if (i.kind=='p' || i.kind=='f') && i.name==a:fun " p is declare, f is definition if match(i.signature,'(\s*void\s*)')<0 && match(i.signature,'(\s*)')<0 let tmp=substitute(i.signature,',',g:re.','.g:rs,'g') - let tmp=substitute(tmp,'(\(.*\))',g:rs.'\1'.g:re.')','g') + " let tmp=substitute(tmp,'(\(.*\))',g:rs.'\1'.g:re.')','g') + let tmp=substitute(tmp,'(\(.*\))',g:rs.'\1'.g:re.s:append_tail,'g') else let tmp='' endif @@ -151,7 +158,8 @@ function! FunctionComplete(fun) endif endfor if s:signature_list==[] - return ')' + " return ')' + return s:append_tail endif if len(s:signature_list)==1 return s:signature_list[0]['word'] @@ -222,7 +230,7 @@ function! CodeComplete() let s:doappend = 1 let function_name = matchstr(getline('.')[:(col('.')-2)],'\zs\w*\ze\s*(\s*$') if function_name != '' - let funcres = FunctionComplete(function_name) + let funcres = FunctionComplete(function_name, getline('.')[col('.')-1]) if funcres != '' let s:doappend = 0 endif