From 12ebafeb81dc393a3b5990b86393352868b0dff8 Mon Sep 17 00:00:00 2001 From: Shougo Matsushita Date: Sat, 19 Dec 2015 10:00:57 +0900 Subject: [PATCH] Add g:neosnippet#enable_auto_clear_markers option --- autoload/neosnippet.vim | 2 ++ autoload/neosnippet/commands.vim | 37 +------------------------------- autoload/neosnippet/handlers.vim | 9 ++++---- autoload/neosnippet/init.vim | 11 ++++++---- autoload/neosnippet/view.vim | 36 +++++++++++++++++++++++++++++++ doc/neosnippet.txt | 8 +++++++ 6 files changed, 58 insertions(+), 45 deletions(-) diff --git a/autoload/neosnippet.vim b/autoload/neosnippet.vim index 327de02..6d515d4 100644 --- a/autoload/neosnippet.vim +++ b/autoload/neosnippet.vim @@ -43,6 +43,8 @@ call neosnippet#util#set_default( \ 'g:neosnippet#enable_conceal_markers', 1) call neosnippet#util#set_default( \ 'g:neosnippet#enable_complete_done', 0) +call neosnippet#util#set_default( + \ 'g:neosnippet#enable_auto_clear_markers', 1) "}}} function! neosnippet#expandable_or_jumpable() "{{{ diff --git a/autoload/neosnippet/commands.vim b/autoload/neosnippet/commands.vim index d858985..034c4d5 100644 --- a/autoload/neosnippet/commands.vim +++ b/autoload/neosnippet/commands.vim @@ -142,42 +142,7 @@ function! neosnippet#commands#_clear_markers() "{{{ return endif - let expand_info = expand_stack[-1] - - " Search patterns. - let [begin, end] = neosnippet#view#_get_snippet_range( - \ expand_info.begin_line, - \ expand_info.begin_patterns, - \ expand_info.end_line, - \ expand_info.end_patterns) - - let mode = mode() - let pos = getpos('.') - - " Found snippet. - let found = 0 - try - while neosnippet#view#_search_snippet_range( - \ begin, end, expand_info.holder_cnt, 0) - - " Next count. - let expand_info.holder_cnt += 1 - let found = 1 - endwhile - - " Search placeholder 0. - if neosnippet#view#_search_snippet_range(begin, end, 0) - let found = 1 - endif - finally - if found && mode !=# 'i' - stopinsert - endif - - call setpos('.', pos) - - call neosnippet#variables#clear_expand_stack() - endtry + call neosnippet#view#_clear_markers(expand_info[-1]) endfunction"}}} " Complete helpers. diff --git a/autoload/neosnippet/handlers.vim b/autoload/neosnippet/handlers.vim index c4e1aa4..69abe33 100644 --- a/autoload/neosnippet/handlers.vim +++ b/autoload/neosnippet/handlers.vim @@ -97,7 +97,7 @@ function! neosnippet#handlers#_cursor_moved() "{{{ let expand_info = expand_stack[-1] if expand_info.begin_line == expand_info.end_line \ && line('.') != expand_info.begin_line - call neosnippet#commands#_clear_markers() + call neosnippet#view#_clear_markers(expand_info) endif endfunction"}}} @@ -105,15 +105,14 @@ function! neosnippet#handlers#_all_clear_markers() "{{{ let pos = getpos('.') try - " Search out of range. - while neosnippet#view#_search_outof_range(col('.')) + while !empty(neosnippet#variables#expand_stack()) + call neosnippet#view#_clear_markers( + \ neosnippet#variables#expand_stack()[-1]) endwhile finally stopinsert call setpos('.', pos) - - call neosnippet#variables#clear_expand_stack() endtry endfunction"}}} diff --git a/autoload/neosnippet/init.vim b/autoload/neosnippet/init.vim index 99f0f8e..400eb5c 100644 --- a/autoload/neosnippet/init.vim +++ b/autoload/neosnippet/init.vim @@ -57,12 +57,15 @@ function! s:initialize_others() "{{{ \ call neosnippet#variables#set_snippets({}) autocmd BufEnter * \ call neosnippet#mappings#_clear_select_mode_mappings() - autocmd CursorMoved,CursorMovedI * - \ call neosnippet#handlers#_cursor_moved() - autocmd BufWritePre * - \ call neosnippet#handlers#_all_clear_markers() augroup END"}}} + if g:neosnippet#enable_auto_clear_markers + autocmd neosnippet CursorMoved,CursorMovedI * + \ call neosnippet#handlers#_cursor_moved() + autocmd neosnippet BufWritePre * + \ call neosnippet#handlers#_all_clear_markers() + endif + if exists('v:completed_item') autocmd neosnippet CompleteDone * \ call neosnippet#handlers#_complete_done() diff --git a/autoload/neosnippet/view.vim b/autoload/neosnippet/view.vim index c7cccc9..f57051b 100644 --- a/autoload/neosnippet/view.vim +++ b/autoload/neosnippet/view.vim @@ -297,6 +297,42 @@ function! neosnippet#view#_search_outof_range(col) "{{{ " Not found. return 0 endfunction"}}} +function! neosnippet#view#_clear_markers(expand_info) "{{{ + " Search patterns. + let [begin, end] = neosnippet#view#_get_snippet_range( + \ a:expand_info.begin_line, + \ a:expand_info.begin_patterns, + \ a:expand_info.end_line, + \ a:expand_info.end_patterns) + + let mode = mode() + let pos = getpos('.') + + " Found snippet. + let found = 0 + try + while neosnippet#view#_search_snippet_range( + \ begin, end, a:expand_info.holder_cnt, 0) + + " Next count. + let a:expand_info.holder_cnt += 1 + let found = 1 + endwhile + + " Search placeholder 0. + if neosnippet#view#_search_snippet_range(begin, end, 0) + let found = 1 + endif + finally + if found && mode !=# 'i' + stopinsert + endif + + call setpos('.', pos) + + call neosnippet#variables#pop_expand_stack() + endtry +endfunction"}}} function! s:expand_placeholder(start, end, holder_cnt, line, ...) "{{{ let is_select = get(a:000, 0, 1) diff --git a/doc/neosnippet.txt b/doc/neosnippet.txt index fcc9e14..6b333b3 100755 --- a/doc/neosnippet.txt +++ b/doc/neosnippet.txt @@ -232,6 +232,14 @@ g:neosnippet#enable_complete_done The default value is 0. + *g:neosnippet#enable_auto_clear_markers* +g:neosnippet#enable_auto_clear_markers + If this variable is not 0, neosnippet will clear the markers + in the buffer when |BufWritePost|, |CursorMoved| and + |CursorMovedI| autocmd. + + The default value is 1. + *g:neosnippet#scope_aliases* g:neosnippet#scope_aliases It is a dictionary that associating certain filetypes with