# HG changeset patch # User zegervdv # Date 1407083826 -7200 # Node ID 3fdc762fe6bba05a731573a3adc8a856c1b33726 # Parent 016c657f0c31253d277f14b6467476c075138322 Improve neocomplete behaviour diff -r 016c657f0c31 -r 3fdc762fe6bb vimrc --- a/vimrc Sat Aug 02 17:44:15 2014 +0200 +++ b/vimrc Sun Aug 03 18:37:06 2014 +0200 @@ -424,7 +424,8 @@ let g:ctrlp_working_path=0 nnoremap :CtrlPBuffer -" map :CtrlPTag + +let g:ctrlp_extensions = ['tag'] if executable('ag') let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""' @@ -446,65 +447,102 @@ nmap c " }}} " Neo Complete {{{ -let g:acp_enableAtStartup = 0 -let g:neocomplete#enable_at_startup = 1 -let g:neocomplete#enable_smart_case = 1 -let g:neocomplete#enable_fuzzy_completion = 1 -let g:neocomplete#sources#syntax#min_keyword_length = 3 -let g:neocomplete#lock_buffer_name_pattern = '\*ku\*' +" Taken from https://github.com/spf13/spf13-vim/blob/3.0/.vimrc + let g:acp_enableAtStartup = 0 + let g:neocomplete#enable_at_startup = 1 + let g:neocomplete#enable_smart_case = 1 + let g:neocomplete#enable_auto_delimiter = 1 + let g:neocomplete#max_list = 15 + let g:neocomplete#force_overwrite_completefunc = 1 + + + " Define dictionary. + let g:neocomplete#sources#dictionary#dictionaries = { + \ 'default' : '', + \ 'vimshell' : $HOME.'/.vimshell_hist', + \ 'scheme' : $HOME.'/.gosh_completions' + \ } -" Define dictionary. -let g:neocomplete#sources#dictionary#dictionaries = { - \ 'default' : '', - \ 'vimshell' : $HOME.'/.vimshell_hist', - \ 'scheme' : $HOME.'/.gosh_completions' - \ } + " Define keyword. + if !exists('g:neocomplete#keyword_patterns') + let g:neocomplete#keyword_patterns = {} + endif + let g:neocomplete#keyword_patterns['default'] = '\h\w*' -" Define keyword. -if !exists('g:neocomplete#keyword_patterns') - let g:neocomplete#keyword_patterns = {} -endif + " Plugin key-mappings { + " These two lines conflict with the default digraph mapping of + " Complete Snippet + " Jump to next snippet point + imap neosnippet#expandable() ? + \ "\(neosnippet_expand_or_jump)" : (pumvisible() ? + \ "\" : "\(neosnippet_expand_or_jump)") + smap (neosnippet_jump_or_expand) + + inoremap neocomplete#undo_completion() + inoremap neocomplete#complete_common_string() + "inoremap neocomplete#complete_common_string() + + " : close popup + " : close popup and save indent. + inoremap pumvisible() ? neocomplete#smart_close_popup()"\" : "\" -let g:neocomplete#keyword_patterns['default'] = '\h\w*' -" Recommended key-mappings. -" : close popup and save indent. -inoremap =my_cr_function() -function! s:my_cr_function() - " return neocomplete#close_popup() . "\" - " For no inserting key. - return pumvisible() ? neocomplete#close_popup() : "\" -endfunction -" : completion. -inoremap pumvisible() ? "\" : "\" -" , : close popup and delete backword char. -inoremap neocomplete#smart_close_popup()."\" + function! CleverCr() + if pumvisible() + if neosnippet#expandable() + let exp = "\(neosnippet_expand)" + return exp . neocomplete#smart_close_popup() + else + return neocomplete#smart_close_popup() + endif + else + return "\" + endif + endfunction + + " close popup and save indent or expand snippet + imap CleverCr() + " , : close popup and delete backword char. + inoremap neocomplete#smart_close_popup()."\" + inoremap neocomplete#smart_close_popup() + + " : completion. + inoremap pumvisible() ? "\" : "\" + inoremap pumvisible() ? "\" : "\" + + " Courtesy of Matteo Cavalleri -if !exists('g:neocomplete#force_omni_input_patterns') - let g:neocomplete#force_omni_input_patterns = {} -endif -let g:neocomplete#force_overwrite_completefunc = 1 -" let g:neocomplete#force_omni_input_patterns.c = - " \ '[^.[:digit:] *\t]\%(\.\|->\)\w*' -let g:neocomplete#force_omni_input_patterns.cpp = - \ '[^.[:digit:] *\t]\%(\.\|->\)\w*\|\h\w*::\w*' -let g:neocomplete#force_omni_input_patterns.objc = - \ '[^.[:digit:] *\t]\%(\.\|->\)\w*' -let g:neocomplete#force_omni_input_patterns.objcpp = - \ '[^.[:digit:] *\t]\%(\.\|->\)\w*\|\h\w*::\w*' + function! CleverTab() + if pumvisible() + return "\" + endif + let substr = strpart(getline('.'), 0, col('.') - 1) + let substr = matchstr(substr, '[^ \t]*$') + if strlen(substr) == 0 + " nothing to match on empty string + return "\" + else + " existing text matching + if neosnippet#expandable_or_jumpable() + return "\(neosnippet_expand_or_jump)" + else + return neocomplete#start_manual_complete() + endif + endif + endfunction -let g:marching_enable_neocomplete = 1 + imap CleverTab() + " } -autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS -autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags -autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS -autocmd FileType python setlocal omnifunc=pythoncomplete#Complete -autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags -autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete - if !exists('g:neocomplete#sources#omni#input_patterns') - let g:neocomplete#sources#omni#input_patterns = {} - endif - -" autocmd FileType c NeoCompleteTagMakeCache + " Enable heavy omni completion. + if !exists('g:neocomplete#sources#omni#input_patterns') + let g:neocomplete#sources#omni#input_patterns = {} + endif + let g:neocomplete#sources#omni#input_patterns.php = '[^. \t]->\h\w*\|\h\w*::' + let g:neocomplete#sources#omni#input_patterns.perl = '\h\w*->\h\w*\|\h\w*::' + let g:neocomplete#sources#omni#input_patterns.c = '[^.[:digit:] *\t]\%(\.\|->\)' + let g:neocomplete#sources#omni#input_patterns.cpp = '[^.[:digit:] *\t]\%(\.\|->\)\|\h\w*::' + let g:neocomplete#sources#omni#input_patterns.ruby = '[^. *\t]\.\h\w*\|\h\w*::' + " } " }}} " Neo Snippets {{{ imap (neosnippet_expand_or_jump) @@ -522,7 +560,7 @@ imap neosnippet#expandable() == 1 ? "\(neosnippet_expand_or_jump)" : pumvisible() ? "\" : "\" imap neosnippet#expandable_or_jumpable() == 1 ? "\(neosnippet_expand_or_jump)" : pumvisible() ? "\" : "\" smap neosnippet#expandable() == 1 ? "\(neosnippet_expand_or_jump)" : pumvisible() ? "\" : "\" -let g:neocomplete#sources#omni#input_patterns.ruby = '[^. *\t]\.\w*\|\h\w*::' +" let g:neocomplete#sources#omni#input_patterns.ruby = '[^. *\t]\.\w*\|\h\w*::' let g:neosnippet#snippets_directory='~/.vim/snippets' " }}}