From 00f043f0de96e0b1447892c0bff63eed317a67c8 Mon Sep 17 00:00:00 2001 From: amix Date: Fri, 13 Feb 2015 00:19:27 +0000 Subject: [PATCH] Updated vim plugins. Nerd tree is on the right by default --- .../syntastic/plugin/syntastic.vim | 2 +- .../syntax_checkers/python/prospector.vim | 1 - .../syntastic/syntax_checkers/xml/xmllint.vim | 4 +- sources_non_forked/vim-airline/README.md | 1 + .../autoload/airline/extensions/tabline.vim | 23 ++- .../vim-fugitive/plugin/fugitive.vim | 6 +- sources_non_forked/vim-go/indent/go.vim | 9 +- .../vim-multiple-cursors/README.md | 1 + .../autoload/multiple_cursors.vim | 51 +++++ .../spec/multiple_cursors_spec.rb | 191 ++++++++++++++++++ .../vim-multiple-cursors/spec/spec_helper.rb | 2 +- .../vim-snipmate/after/plugin/snipMate.vim | 2 +- .../vim-snipmate/autoload/snipMate.vim | 61 +++--- .../autoload/snipMate_python_demo.vim | 6 +- .../autoload/snipmate/jumping.vim | 26 +-- .../vim-snipmate/autoload/snipmate/legacy.vim | 6 +- .../vim-snipmate/autoload/snipmate/parse.vim | 32 +-- .../vim-snipmate/autoload/snipmate/util.vim | 2 +- .../ftplugin/html_snip_helper.vim | 2 +- .../vim-snipmate/plugin/snipMate.vim | 4 +- sources_non_forked/vim-snipmate/t/jumping.vim | 6 +- .../vim-snippets/UltiSnips/all.snippets | 4 +- .../vim-snippets/UltiSnips/php.snippets | 48 +++-- .../vim-surround/plugin/surround.vim | 4 +- vimrcs/plugins_config.vim | 1 + 25 files changed, 386 insertions(+), 109 deletions(-) diff --git a/sources_non_forked/syntastic/plugin/syntastic.vim b/sources_non_forked/syntastic/plugin/syntastic.vim index d72bf1ad..c6ab15d8 100644 --- a/sources_non_forked/syntastic/plugin/syntastic.vim +++ b/sources_non_forked/syntastic/plugin/syntastic.vim @@ -19,7 +19,7 @@ if has('reltime') lockvar! g:_SYNTASTIC_START endif -let g:_SYNTASTIC_VERSION = '3.6.0-14' +let g:_SYNTASTIC_VERSION = '3.6.0-16' lockvar g:_SYNTASTIC_VERSION " Sanity checks {{{1 diff --git a/sources_non_forked/syntastic/syntax_checkers/python/prospector.vim b/sources_non_forked/syntastic/syntax_checkers/python/prospector.vim index 4f451012..871a81b4 100644 --- a/sources_non_forked/syntastic/syntax_checkers/python/prospector.vim +++ b/sources_non_forked/syntastic/syntax_checkers/python/prospector.vim @@ -31,7 +31,6 @@ endfunction function! SyntaxCheckers_python_prospector_GetLocList() dict let makeprg = self.makeprgBuild({ - \ 'args': '--external-config merge', \ 'args_after': '--messages-only --absolute-paths --die-on-tool-error --zero-exit --output-format json' }) let errorformat = '%f:%l:%c: %m' diff --git a/sources_non_forked/syntastic/syntax_checkers/xml/xmllint.vim b/sources_non_forked/syntastic/syntax_checkers/xml/xmllint.vim index 108abed7..9a7027f0 100644 --- a/sources_non_forked/syntastic/syntax_checkers/xml/xmllint.vim +++ b/sources_non_forked/syntastic/syntax_checkers/xml/xmllint.vim @@ -23,7 +23,9 @@ set cpo&vim " and http://www.xmlsoft.org/catalog.html for more information. function! SyntaxCheckers_xml_xmllint_GetLocList() dict - let makeprg = self.makeprgBuild({ 'args_after': '--xinclude --noout --postvalid' }) + let makeprg = self.makeprgBuild({ + \ 'args': '--xinclude --postvalid', + \ 'args_after': '--noout' }) let errorformat= \ '%E%f:%l: error : %m,' . diff --git a/sources_non_forked/vim-airline/README.md b/sources_non_forked/vim-airline/README.md index eaf1a47e..fafd4116 100644 --- a/sources_non_forked/vim-airline/README.md +++ b/sources_non_forked/vim-airline/README.md @@ -118,6 +118,7 @@ This plugin follows the standard runtime path structure, and as such it can be i * [Pathogen][11] * `git clone https://github.com/bling/vim-airline ~/.vim/bundle/vim-airline` + * Remember to run `:Helptags` to generate help tags * [NeoBundle][12] * `NeoBundle 'bling/vim-airline'` * [Vundle][13] diff --git a/sources_non_forked/vim-airline/autoload/airline/extensions/tabline.vim b/sources_non_forked/vim-airline/autoload/airline/extensions/tabline.vim index 4681a2a4..978eacdc 100644 --- a/sources_non_forked/vim-airline/autoload/airline/extensions/tabline.vim +++ b/sources_non_forked/vim-airline/autoload/airline/extensions/tabline.vim @@ -59,19 +59,22 @@ function! s:toggle_on() let [ s:original_tabline, s:original_showtabline ] = [ &tabline, &showtabline ] set tabline=%!airline#extensions#tabline#get() - if s:buf_min_count <= 0 && s:tab_min_count <= 1 - set showtabline=2 - else - augroup airline_tabline - autocmd! + augroup airline_tabline + autocmd! + " Invalidate cache. + autocmd BufAdd,BufUnload * unlet! s:current_buffer_list + + if s:buf_min_count <= 0 && s:tab_min_count <= 1 + set showtabline=2 + else if s:show_buffers == 1 autocmd BufEnter * call show_tabline(s:buf_min_count, len(s:get_buffer_list())) autocmd BufUnload * call show_tabline(s:buf_min_count, len(s:get_buffer_list()) - 1) else autocmd TabEnter * call show_tabline(s:tab_min_count, tabpagenr('$')) endif - augroup END - endif + endif + augroup END endfunction function! airline#extensions#tabline#load_theme(palette) @@ -130,10 +133,14 @@ function! airline#extensions#tabline#title(n) endfunction function! airline#extensions#tabline#get_buffer_name(nr) - return airline#extensions#tabline#{s:formatter}#format(a:nr, get(s:, 'current_buffer_list', s:get_buffer_list())) + return airline#extensions#tabline#{s:formatter}#format(a:nr, s:get_buffer_list()) endfunction function! s:get_buffer_list() + if exists('s:current_buffer_list') + return s:current_buffer_list + endif + let buffers = [] let cur = bufnr('%') for nr in range(1, bufnr('$')) diff --git a/sources_non_forked/vim-fugitive/plugin/fugitive.vim b/sources_non_forked/vim-fugitive/plugin/fugitive.vim index 65e6665e..b61e49c0 100644 --- a/sources_non_forked/vim-fugitive/plugin/fugitive.vim +++ b/sources_non_forked/vim-fugitive/plugin/fugitive.vim @@ -2225,7 +2225,11 @@ function! s:Browse(bang,line1,count,...) abort elseif exists(':Browse') == 2 return 'echomsg '.string(url).'|Browse '.url else - return 'echomsg '.string(url).'|call netrw#NetrwBrowseX('.string(url).', 0)' + if has("patch-7.4.567") + return 'echomsg '.string(url).'|call netrw#BrowseX('.string(url).', 0)' + else + return 'echomsg '.string(url).'|call netrw#NetrwBrowseX('.string(url).', 0)' + endif endif catch /^fugitive:/ return 'echoerr v:errmsg' diff --git a/sources_non_forked/vim-go/indent/go.vim b/sources_non_forked/vim-go/indent/go.vim index faf4d79e..660aa506 100644 --- a/sources_non_forked/vim-go/indent/go.vim +++ b/sources_non_forked/vim-go/indent/go.vim @@ -37,20 +37,21 @@ function! GoIndent(lnum) let previ = indent(prevlnum) let ind = previ + let s:shiftwidth = shiftwidth() if prevl =~ '[({]\s*$' " previous line opened a block - let ind += &sw + let ind += s:shiftwidth endif if prevl =~# '^\s*\(case .*\|default\):$' " previous line is part of a switch statement - let ind += &sw + let ind += s:shiftwidth endif " TODO: handle if the previous line is a label. if thisl =~ '^\s*[)}]' " this line closed a block - let ind -= &sw + let ind -= s:shiftwidth endif " Colons are tricky. @@ -58,7 +59,7 @@ function! GoIndent(lnum) " We ignore trying to deal with jump labels because (a) they're rare, and " (b) they're hard to disambiguate from a composite literal key. if thisl =~# '^\s*\(case .*\|default\):$' - let ind -= &sw + let ind -= s:shiftwidth endif return ind diff --git a/sources_non_forked/vim-multiple-cursors/README.md b/sources_non_forked/vim-multiple-cursors/README.md index ea10d46c..5a425e9e 100644 --- a/sources_non_forked/vim-multiple-cursors/README.md +++ b/sources_non_forked/vim-multiple-cursors/README.md @@ -32,6 +32,7 @@ To see what keystrokes are used for the above example, see [this issue](https:// ## Installation Install using [Pathogen], [Vundle], [Neobundle], or your favorite Vim package manager. +Requires vim 7.4 or later for full functionality. ## Quick Start Out of the box, all you need to know is a single key `Ctrl-n`. Pressing the key in Normal mode highlights the current word under the cursor in Visual mode and places a virtual cursor at the end of it. Pressing it again finds the next ocurrence and places another virtual cursor at the end of the visual selection. If you select multiple lines in Visual mode, pressing the key puts a virtual cursor at every line and leaves you in Normal mode. diff --git a/sources_non_forked/vim-multiple-cursors/autoload/multiple_cursors.vim b/sources_non_forked/vim-multiple-cursors/autoload/multiple_cursors.vim index fe86d4e2..ab529b39 100644 --- a/sources_non_forked/vim-multiple-cursors/autoload/multiple_cursors.vim +++ b/sources_non_forked/vim-multiple-cursors/autoload/multiple_cursors.vim @@ -54,6 +54,11 @@ if !hlexists(s:hi_group_visual) exec "highlight link ".s:hi_group_visual." Visual" endif +" Temporary buffer that is used for individual paste buffer save/restore +" operations +let s:paste_buffer_temporary_text = '' +let s:paste_buffer_temporary_type = '' + "=============================================================================== " Internal Mappings "=============================================================================== @@ -258,6 +263,9 @@ function! s:Cursor.new(position) let obj = copy(self) let obj.position = copy(a:position) let obj.visual = [] + " Stores text that was yanked after any commands in Normal or Visual mode + let obj.paste_buffer_text = getreg('"') + let obj.paste_buffer_type = getregtype('"') let obj.cursor_hi_id = s:highlight_cursor(a:position) let obj.visual_hi_id = 0 let obj.line_length = col([a:position[0], '$']) @@ -325,6 +333,17 @@ function! s:Cursor.remove_visual_selection() dict let self.visual_hi_id = 0 endfunction +" Restore unnamed register from paste buffer +function! s:Cursor.restore_unnamed_register() dict + call setreg('"', self.paste_buffer_text, self.paste_buffer_type) +endfunction + +" Save contents of the unnamed register into paste buffer +function! s:Cursor.save_unnamed_register() dict + let self.paste_buffer_text = getreg('"') + let self.paste_buffer_type = getregtype('"') +endfunction + "=============================================================================== " CursorManager class "=============================================================================== @@ -345,6 +364,7 @@ function! s:CursorManager.new() \ 'cursorline': &cursorline, \ 'lazyredraw': &lazyredraw, \ 'paste': &paste, + \ 'clipboard': &clipboard, \ } " We save the window view when multicursor mode is entered let obj.saved_winview = [] @@ -465,9 +485,17 @@ function! s:CursorManager.update_current() dict exec "normal! gv\" call cur.update_visual_selection(s:get_visual_region(s:pos('.'))) elseif s:from_mode ==# 'v' || s:from_mode ==# 'V' + " Save contents of unnamed register after each operation in Visual mode. + " This should be executed after user input is processed, when unnamed + " register already contains the text. + call cur.save_unnamed_register() + call cur.remove_visual_selection() elseif s:from_mode ==# 'i' && s:to_mode ==# 'n' && self.current_index != self.size() - 1 normal! h + elseif s:from_mode ==# 'n' + " Save contents of unnamed register after each operation in Normal mode. + call cur.save_unnamed_register() endif let vdelta = line('$') - s:saved_linecount " If the total number of lines changed in the buffer, we need to potentially @@ -551,19 +579,28 @@ endfunction " cursors on screen " paste mode needs to be switched off since it turns off a bunch of features " that's critical for the plugin to function +" clipboard should not have unnamed and unnamedplus otherwise plugin cannot +" reliably use unnamed register ('"') function! s:CursorManager.initialize() dict let self.saved_settings['virtualedit'] = &virtualedit let self.saved_settings['cursorline'] = &cursorline let self.saved_settings['lazyredraw'] = &lazyredraw let self.saved_settings['paste'] = &paste + let self.saved_settings['clipboard'] = &clipboard let &virtualedit = "onemore" let &cursorline = 0 let &lazyredraw = 1 let &paste = 0 + set clipboard-=unnamed clipboard-=unnamedplus " We could have already saved the view from multiple_cursors#find if !self.start_from_find let self.saved_winview = winsaveview() endif + + " Save contents and type of unnamed register upon entering multicursor mode + " to restore it later when leaving mode + let s:paste_buffer_temporary_text = getreg('"') + let s:paste_buffer_temporary_type = getregtype('"') endfunction " Restore user settings. @@ -573,7 +610,15 @@ function! s:CursorManager.restore_user_settings() dict let &cursorline = self.saved_settings['cursorline'] let &lazyredraw = self.saved_settings['lazyredraw'] let &paste = self.saved_settings['paste'] + let &clipboard = self.saved_settings['clipboard'] endif + + " Restore original contents and type of unnamed register. This method is + " called from reset, which calls us only when restore_setting argument is + " true, which happens only when we leave multicursor mode. This should be + " symmetrical to saving of unnamed register upon the start of multicursor + " mode. + call setreg('"', s:paste_buffer_temporary_text, s:paste_buffer_temporary_type) endfunction " Reselect the current cursor's region in visual mode @@ -814,6 +859,12 @@ function! s:process_user_input() call s:cm.get_current().update_line_length() let s:saved_linecount = line('$') + " Restore unnamed register only in Normal mode. This should happen before user + " input is processed. + if s:from_mode ==# 'n' || s:from_mode ==# 'v' || s:from_mode ==# 'V' + call s:cm.get_current().restore_unnamed_register() + endif + " Apply the user input. Note that the above could potentially change mode, we " use the mapping below to help us determine what the new mode is " Note that it's possible that \(multiple-cursors-apply) never gets called, we have a diff --git a/sources_non_forked/vim-multiple-cursors/spec/multiple_cursors_spec.rb b/sources_non_forked/vim-multiple-cursors/spec/multiple_cursors_spec.rb index 1e8fc89c..e95e21fa 100644 --- a/sources_non_forked/vim-multiple-cursors/spec/multiple_cursors_spec.rb +++ b/sources_non_forked/vim-multiple-cursors/spec/multiple_cursors_spec.rb @@ -12,6 +12,7 @@ def get_file_content() end def before(string) + options.each { |x| vim.command(x) } set_file_content(string) end @@ -29,8 +30,198 @@ def type(string) end end +describe "Multiple Cursors op pending & exit from insert|visual mode" do + let(:filename) { 'test.txt' } + let(:options) { ['let g:multi_cursor_normal_maps = {"d": 1, "c": 1}', + 'let g:multi_cursor_exit_from_insert_mode = 0', + 'let g:multi_cursor_exit_from_visual_mode = 0'] } + + specify "#paste from unnamed register to 3 cursors" do + before <<-EOF + yankme + a b c + a b c + a b c + EOF + + type 'yiwjvwwp' + + after <<-EOF + yankme + a b cyankme + a b cyankme + a b cyankme + EOF + end + + specify "#paste buffer normal caw then p" do + before <<-EOF + hello jan world + hello feb world + hello mar world + EOF + + type 'vwcawbP' + + after <<-EOF + jan hello world + feb hello world + mar hello world + EOF + end + + specify "#paste buffer normal C then ABC then p" do + before <<-EOF + hello jan world + hello feb world + hello mar world + EOF + + type 'vwCABC p' + + after <<-EOF + hello ABC jan world + hello ABC feb world + hello ABC mar world + EOF + end + + specify "#paste buffer normal daw then P" do + before <<-EOF + hello jan world + hello feb world + hello mar world + EOF + + type 'vwdawbP' + + after <<-EOF + jan hello world + feb hello world + mar hello world + EOF + end + + specify "#paste buffer normal D then P" do + before <<-EOF + hello jan world + hello feb world + hello mar world + EOF + + type 'vwwhDbhP' + + after <<-EOF + hello world jan + hello world feb + hello world mar + EOF + end + + specify "#paste buffer normal s then p" do + before <<-EOF + hello jan world + hello feb world + hello mar world + EOF + + type 'vws1p' + + after <<-EOF + hello 1jan world + hello 1feb world + hello 1mar world + EOF + end + +end + describe "Multiple Cursors" do let(:filename) { 'test.txt' } + let(:options) { [] } + + specify "#paste buffer normal x then p" do + before <<-EOF + jan + feb + mar + EOF + + type 'jjxp' + + after <<-EOF + ajn + efb + amr + EOF + end + + specify "#paste buffer visual y then p" do + before <<-EOF + hello jan world + hello feb world + hello mar world + EOF + + type 'vwvelywhp' + + after <<-EOF + hello jan jan world + hello feb feb world + hello mar mar world + EOF + end + + specify "#paste buffer initial visual y then P" do + before <<-EOF + hello jan world + hello feb world + hello mar world + EOF + + type 'wywbp' + + after <<-EOF + jan jan world + jan feb world + jan mar world + EOF + end + + specify "#paste buffer visual y then P" do + before <<-EOF + hello jan world + hello feb world + hello mar world + EOF + + type 'vwvely^P' + + after <<-EOF + jan hello jan world + feb hello feb world + mar hello mar world + EOF + end + + specify "#paste buffer visual Y then P" do + before <<-EOF + hello jan world + hello feb world + hello mar world + EOF + + type 'vwvY^P' + + after <<-EOF + hello jan world + hello jan world + hello feb world + hello feb world + hello mar world + hello mar world + EOF + end specify "#multiline replacement" do before <<-EOF diff --git a/sources_non_forked/vim-multiple-cursors/spec/spec_helper.rb b/sources_non_forked/vim-multiple-cursors/spec/spec_helper.rb index d5a4233c..4e0ad99d 100644 --- a/sources_non_forked/vim-multiple-cursors/spec/spec_helper.rb +++ b/sources_non_forked/vim-multiple-cursors/spec/spec_helper.rb @@ -5,7 +5,7 @@ Vimrunner::RSpec.configure do |config| # Use a single Vim instance for the test suite. Set to false to use an # instance per test (slower, but can be easier to manage). - config.reuse_server = true + config.reuse_server = false # Decide how to start a Vim instance. In this block, an instance should be # spawned and set up with anything project-specific. diff --git a/sources_non_forked/vim-snipmate/after/plugin/snipMate.vim b/sources_non_forked/vim-snipmate/after/plugin/snipMate.vim index d7379c22..3d6bac70 100644 --- a/sources_non_forked/vim-snipmate/after/plugin/snipMate.vim +++ b/sources_non_forked/vim-snipmate/after/plugin/snipMate.vim @@ -5,7 +5,7 @@ let s:save_cpo = &cpo set cpo&vim -function! s:map_if_not_mapped(lhs, rhs, mode) +function! s:map_if_not_mapped(lhs, rhs, mode) abort let l:unique = s:overwrite ? '' : ' ' if !hasmapto(a:rhs, a:mode) silent! exe a:mode . 'map' . l:unique a:lhs a:rhs diff --git a/sources_non_forked/vim-snipmate/autoload/snipMate.vim b/sources_non_forked/vim-snipmate/autoload/snipMate.vim index 9196ae4d..ceff8b92 100644 --- a/sources_non_forked/vim-snipmate/autoload/snipMate.vim +++ b/sources_non_forked/vim-snipmate/autoload/snipMate.vim @@ -9,7 +9,7 @@ catch /.*/ echoe "you're missing tlib. See install instructions at ".expand(':h:h').'/README.md' endtry -fun! Filename(...) +fun! Filename(...) abort let filename = expand('%:t:r') if filename == '' | return a:0 == 2 ? a:2 : '' | endif return !a:0 || a:1 == '' ? filename : substitute(a:1, '$1', filename, 'g') @@ -17,7 +17,7 @@ endf let s:cache = {} -function! snipMate#expandSnip(snip, version, col) +function! snipMate#expandSnip(snip, version, col) abort let lnum = line('.') let col = a:col let line = getline(lnum) @@ -76,11 +76,11 @@ function! snipMate#expandSnip(snip, version, col) return b:snip_state.set_stop(0) endfunction -function! snipMate#placeholder_str(num, stops) +function! snipMate#placeholder_str(num, stops) abort return snipMate#sniplist_str(a:stops[a:num].placeholder, a:stops)[0] endfunction -function! snipMate#sniplist_str(snippet, stops) +function! snipMate#sniplist_str(snippet, stops) abort let lines = [''] let pos = 0 let add_to = 1 @@ -108,7 +108,7 @@ function! snipMate#sniplist_str(snippet, stops) return lines endfunction -function! s:build_stops(snippet, stops, lnum, col, indent) +function! s:build_stops(snippet, stops, lnum, col, indent) abort let stops = a:stops let line = a:lnum let col = a:col @@ -146,7 +146,7 @@ function! s:build_stops(snippet, stops, lnum, col, indent) return stop_count endfunction -function! s:build_loc_info(snippet, stops, line, col, indent) +function! s:build_loc_info(snippet, stops, line, col, indent) abort let stops = a:stops let line = a:line let col = a:col @@ -183,7 +183,7 @@ function! s:build_loc_info(snippet, stops, line, col, indent) return [line, col] endfunction -function! s:add_mirror(stops, id, line, col, item) +function! s:add_mirror(stops, id, line, col, item) abort let stops = a:stops let item = a:item let stops[a:id].mirrors = get(stops[a:id], 'mirrors', []) @@ -201,7 +201,7 @@ endfunction " ['triggername', 'name', 'contents'] " if triggername is not set 'default' is assumed " TODO: better error checking -fun! snipMate#ReadSnippetsFile(file) +fun! snipMate#ReadSnippetsFile(file) abort let result = [] let new_scopes = [] if !filereadable(a:file) | return [result, new_scopes] | endif @@ -245,7 +245,7 @@ fun! snipMate#ReadSnippetsFile(file) return [result, new_scopes] endf -function! s:GetScopes() +function! s:GetScopes() abort let ret = exists('b:snipMate.scope_aliases') ? copy(b:snipMate.scope_aliases) : {} let global = get(g:snipMate, 'scope_aliases', {}) for alias in keys(global) @@ -262,7 +262,7 @@ endfunction " adds scope aliases to list. " returns new list " the aliases of aliases are added recursively -fun! s:AddScopeAliases(list) +fun! s:AddScopeAliases(list) abort let did = {} let scope_aliases = s:GetScopes() let new = a:list @@ -282,7 +282,7 @@ endf au SourceCmd *.snippet,*.snippets call s:source_snippet() -function! s:info_from_filename(file) +function! s:info_from_filename(file) abort let parts = split(fnamemodify(a:file, ':r'), '/') let snipidx = len(parts) - index(reverse(copy(parts)), 'snippets') - 1 let rtp_prefix = join(parts[(snipidx - @@ -293,7 +293,7 @@ function! s:info_from_filename(file) return [rtp_prefix, trigger, desc] endfunction -function! s:source_snippet() +function! s:source_snippet() abort let file = expand(':p') let [rtp_prefix, trigger, desc] = s:info_from_filename(file) let new_snips = [] @@ -316,7 +316,7 @@ function! s:source_snippet() call extend(s:lookup_state.snips, new_snips) endfunction -function! s:CachedSnips(file) +function! s:CachedSnips(file) abort let mtime = getftime(a:file) if has_key(s:cache, a:file) && s:cache[a:file].mtime >= mtime return s:cache[a:file].contents @@ -327,15 +327,14 @@ function! s:CachedSnips(file) return s:cache[a:file].contents endfunction -function! s:snippet_filenames(scope, trigger) +function! s:snippet_filenames(scope, trigger) abort let mid = ['', '_*', '/*'] - return join(map(extend(mid, map(filter(copy(mid), 'v:key != 1'), - \ "'/' . a:trigger . '*' . v:val")), - \ "'snippets/' . a:scope . v:val . '.snippet'" + let mid += map(copy(mid[1:]), "'/' . a:trigger . '*' . v:val") + return join(map(mid, "'snippets/' . a:scope . v:val . '.snippet'" \ . ". (v:key < 3 ? 's' : '')")) endfunction -function! snipMate#SetByPath(dict, trigger, path, snippet, bang, snipversion) +function! snipMate#SetByPath(dict, trigger, path, snippet, bang, snipversion) abort let d = a:dict if !has_key(d, a:trigger) || a:bang let d[a:trigger] = {} @@ -344,7 +343,7 @@ function! snipMate#SetByPath(dict, trigger, path, snippet, bang, snipversion) endfunction " default triggers based on paths -function! snipMate#DefaultPool(scopes, trigger, result) +function! snipMate#DefaultPool(scopes, trigger, result) abort let scopes = s:AddScopeAliases(a:scopes) let scopes_done = [] let rtp_save = &rtp @@ -377,7 +376,7 @@ endfunction " scopes: list of scopes. usually this is the filetype. eg ['c','cpp'] " trigger may contain glob patterns. Thus use '*' to get all triggers " -fun! snipMate#GetSnippets(scopes, trigger) +fun! snipMate#GetSnippets(scopes, trigger) abort let result = {} for F in values(g:snipMateSources) @@ -389,7 +388,7 @@ endf " adds leading tab " and replaces leading spaces by tabs " see ftplugin/snippet.vim -fun! snipMate#RetabSnip() range +fun! snipMate#RetabSnip() range abort let leadingTab = expand('%:e') == 'snippets' let lines = getline(a:firstline, a:lastline) @@ -424,7 +423,7 @@ fun! snipMate#RetabSnip() range endfor endf -fun! snipMate#OpenSnippetFiles() +fun! snipMate#OpenSnippetFiles() abort let dict = snipMate#GetSnippetFiles(0, snipMate#ScopesByFile(), '*') " sort by files wether they exist - put existing files first let exists = [] @@ -445,13 +444,13 @@ fun! snipMate#OpenSnippetFiles() endfor endf -fun! snipMate#ScopesByFile() +fun! snipMate#ScopesByFile() abort " duplicates are removed in AddScopeAliases return filter(funcref#Call(g:snipMate.get_scopes), "v:val != ''") endf " used by both: completion and insert snippet -fun! snipMate#GetSnippetsForWordBelowCursor(word, exact) +fun! snipMate#GetSnippetsForWordBelowCursor(word, exact) abort " Setup lookups: '1.2.3' becomes [1.2.3] + [3, 2.3] let parts = split(a:word, '\W\zs') " Since '\W\zs' results in splitting *after* a non-keyword character, the @@ -499,7 +498,7 @@ endf " snippets: dict containing snippets by name " usually this is just {'default' : snippet_contents } -fun! s:ChooseSnippet(snippets) +fun! s:ChooseSnippet(snippets) abort let snippet = [] let keys = keys(a:snippets) let i = 1 @@ -521,22 +520,22 @@ fun! s:ChooseSnippet(snippets) return funcref#Call(a:snippets[keys(a:snippets)[idx]]) endf -fun! snipMate#WordBelowCursor() +fun! snipMate#WordBelowCursor() abort return matchstr(getline('.'), '\S\+\%' . col('.') . 'c') endf -fun! snipMate#GetSnippetsForWordBelowCursorForComplete(word) +fun! snipMate#GetSnippetsForWordBelowCursorForComplete(word) abort let snippets = map(snipMate#GetSnippetsForWordBelowCursor(a:word, 0), 'v:val[0]') return filter(snippets, 'v:val =~# "\\V\\^' . escape(a:word, '"\') . '"') endf -fun! snipMate#CanBeTriggered() +fun! snipMate#CanBeTriggered() abort let word = snipMate#WordBelowCursor() let matches = snipMate#GetSnippetsForWordBelowCursorForComplete(word) return len(matches) > 0 endf -fun! snipMate#ShowAvailableSnips() +fun! snipMate#ShowAvailableSnips() abort let col = col('.') let word = snipMate#WordBelowCursor() let matches = snipMate#GetSnippetsForWordBelowCursorForComplete(word) @@ -552,7 +551,7 @@ fun! snipMate#ShowAvailableSnips() endf " Pass an argument to force snippet expansion instead of triggering or jumping -function! snipMate#TriggerSnippet(...) +function! snipMate#TriggerSnippet(...) abort if exists('g:SuperTabMappingForward') if g:SuperTabMappingForward == "" let SuperTabPlug = maparg('SuperTabForward', 'i') @@ -610,7 +609,7 @@ function! snipMate#TriggerSnippet(...) \ : "\=snipMate#ShowAvailableSnips()\" endfunction -fun! snipMate#BackwardsSnippet() +fun! snipMate#BackwardsSnippet() abort if exists('b:snip_state') | return b:snip_state.jump_stop(1) | endif if exists('g:SuperTabMappingForward') diff --git a/sources_non_forked/vim-snipmate/autoload/snipMate_python_demo.vim b/sources_non_forked/vim-snipmate/autoload/snipMate_python_demo.vim index 33d0f28c..de495d27 100644 --- a/sources_non_forked/vim-snipmate/autoload/snipMate_python_demo.vim +++ b/sources_non_forked/vim-snipmate/autoload/snipMate_python_demo.vim @@ -9,7 +9,7 @@ " will create a snippet on the fly which looks like this: " abc(${1:a}, ${2:b}, ${3:c=None}) -fun! snipMate_python_demo#Activate() +fun! snipMate_python_demo#Activate() abort if !exists('g:snipMateSources') let g:snipMateSources = {} endif @@ -17,7 +17,7 @@ fun! snipMate_python_demo#Activate() let g:snipMateSources['python'] = funcref#Function('snipMate_python_demo#FunctionsFromCurrentFileAndTags') endf -fun! s:Add(dict, line, source, trigger) +fun! s:Add(dict, line, source, trigger) abort let matched = matchlist(a:line,'def\s\+\([^( \t]\+\)[ \t]*(\([^)]*\)') if len(matched) > 2 let name = matched[1] @@ -34,7 +34,7 @@ fun! s:Add(dict, line, source, trigger) let sd[a:source] = name.'('.join(args,', ').')' endif endf -fun! snipMate_python_demo#FunctionsFromCurrentFileAndTags(scopes, trigger, result) +fun! snipMate_python_demo#FunctionsFromCurrentFileAndTags(scopes, trigger, result) abort " getting all might be too much if a:trigger == '*' | return | endif if index(a:scopes, 'python') < 0 | return | endif diff --git a/sources_non_forked/vim-snipmate/autoload/snipmate/jumping.vim b/sources_non_forked/vim-snipmate/autoload/snipmate/jumping.vim index 1bce416e..25db9614 100644 --- a/sources_non_forked/vim-snipmate/autoload/snipmate/jumping.vim +++ b/sources_non_forked/vim-snipmate/autoload/snipmate/jumping.vim @@ -1,25 +1,25 @@ -function! s:sfile() +function! s:sfile() abort return expand('') endfunction let s:state_proto = {} -function! snipmate#jumping#state() +function! snipmate#jumping#state() abort return copy(s:state_proto) endfunction -function! s:listize_mirror(mirrors) +function! s:listize_mirror(mirrors) abort return map(copy(a:mirrors), '[v:val.line, v:val.col]') endfunction " Removes snippet state info -function! s:state_remove() dict +function! s:state_remove() dict abort " Remove all autocmds in group snipmate_changes in the current buffer unlet! b:snip_state silent! au! snipmate_changes * endfunction -function! s:state_find_next_stop(backwards) dict +function! s:state_find_next_stop(backwards) dict abort let self.stop_no += a:backwards? -1 : 1 while !has_key(self.stops, self.stop_no) if self.stop_no == self.stop_count @@ -33,7 +33,7 @@ function! s:state_find_next_stop(backwards) dict endfunction " Update state information to correspond to the given tab stop -function! s:state_set_stop(backwards) dict +function! s:state_set_stop(backwards) dict abort call self.find_next_stop(a:backwards) let self.cur_stop = self.stops[self.stop_no] let self.stop_len = (type(self.cur_stop.placeholder) == type(0)) @@ -54,7 +54,7 @@ function! s:state_set_stop(backwards) dict endfunction " Jump to the next/previous tab stop -function! s:state_jump_stop(backwards) dict +function! s:state_jump_stop(backwards) dict abort " Update changes just in case " This seems to be only needed because insert completion does not trigger " the CursorMovedI event @@ -72,7 +72,7 @@ function! s:state_jump_stop(backwards) dict return self.set_stop(a:backwards) endfunction -function! s:state_remove_nested(...) dict +function! s:state_remove_nested(...) dict abort let id = a:0 ? a:1 : self.stop_no if type(self.stops[id].placeholder) == type([]) for i in self.stops[id].placeholder @@ -90,7 +90,7 @@ function! s:state_remove_nested(...) dict endfunction " Select the placeholder for the current tab stop -function! s:state_select_word() dict +function! s:state_select_word() dict abort let len = self.stop_len if !len | return '' | endif let l = col('.') != 1 ? 'l' : '' @@ -103,7 +103,7 @@ endfunction " Update the snippet as text is typed. The self.update_mirrors() function does " the actual work. " If the cursor moves outside of a placeholder, call self.remove() -function! s:state_update_changes() dict +function! s:state_update_changes() dict abort let change_len = col('$') - self.prev_len let self.changed = self.changed || change_len != 0 let self.end_col += change_len @@ -122,7 +122,7 @@ function! s:state_update_changes() dict endfunction " Actually update the mirrors for any changed text -function! s:state_update_mirrors(change) dict +function! s:state_update_mirrors(change) dict abort let newWordLen = self.end_col - self.start_col let newWord = strpart(getline('.'), self.start_col - 1, newWordLen) let changeLen = a:change @@ -159,7 +159,7 @@ function! s:state_update_mirrors(change) dict endif endfunction -function! s:state_find_update_objects(item) dict +function! s:state_find_update_objects(item) dict abort let item = a:item let item.update_objects = [] @@ -179,7 +179,7 @@ function! s:state_find_update_objects(item) dict return item.update_objects endfunction -function! s:state_update(item, change_len) dict +function! s:state_update(item, change_len) dict abort let item = a:item if exists('item.update_objects') let to_update = item.update_objects diff --git a/sources_non_forked/vim-snipmate/autoload/snipmate/legacy.vim b/sources_non_forked/vim-snipmate/autoload/snipmate/legacy.vim index 53eb0cbd..6d4563a3 100644 --- a/sources_non_forked/vim-snipmate/autoload/snipmate/legacy.vim +++ b/sources_non_forked/vim-snipmate/autoload/snipmate/legacy.vim @@ -2,7 +2,7 @@ let s:sigil = nr2char(31) let snipmate#legacy#sigil = s:sigil " Prepare snippet to be processed by s:BuildTabStops -function! snipmate#legacy#process_snippet(snip) +function! snipmate#legacy#process_snippet(snip) abort let snippet = a:snip let esc_bslash = '\%(\\\@') endfunction let s:parser_proto = {} -function! s:new_parser(text) +function! s:new_parser(text) abort let ret = copy(s:parser_proto) let ret.input = a:text let ret.len = strlen(ret.input) @@ -18,12 +18,12 @@ function! s:new_parser(text) return ret endfunction -function! s:parser_advance(...) dict +function! s:parser_advance(...) dict abort let self.pos += a:0 ? a:1 : 1 let self.next = self.input[self.pos] endfunction -function! s:parser_same(tok) dict +function! s:parser_same(tok) dict abort if self.next == a:tok call self.advance() return 1 @@ -32,7 +32,7 @@ function! s:parser_same(tok) dict endif endfunction -function! s:parser_id() dict +function! s:parser_id() dict abort if self.input[(self.pos):(self.pos+5)] == 'VISUAL' call self.advance(6) return 'VISUAL' @@ -45,7 +45,7 @@ function! s:parser_id() dict return -1 endfunction -function! s:parser_add_var(var) dict +function! s:parser_add_var(var) dict abort let id = a:var[0] if !has_key(self.vars, id) let self.vars[id] = { 'instances' : [] } @@ -53,7 +53,7 @@ function! s:parser_add_var(var) dict call add(self.vars[id].instances, a:var) endfunction -function! s:parser_var() dict +function! s:parser_var() dict abort let ret = [] if self.same('{') let id = self.id() @@ -70,7 +70,7 @@ function! s:parser_var() dict return ret endfunction -function! s:parser_varend() dict +function! s:parser_varend() dict abort let ret = [] if self.same(':') call extend(ret, self.placeholder()) @@ -81,11 +81,11 @@ function! s:parser_varend() dict return ret endfunction -function! s:parser_placeholder() dict +function! s:parser_placeholder() dict abort return self.parse('}') endfunction -function! s:parser_subst() dict +function! s:parser_subst() dict abort let ret = {} let ret.pat = join(self.text('/', 1)) if self.same('/') @@ -97,14 +97,14 @@ function! s:parser_subst() dict return ret endfunction -function! s:parser_expr() dict +function! s:parser_expr() dict abort let str = join(self.text('`', 1)) let ret = eval(str) call self.same('`') return type(ret) == type('') ? ret : string(ret) endfunction -function! s:parser_text(...) dict +function! s:parser_text(...) dict abort let res = [] let val = '' if a:0 == 2 && a:2 @@ -140,7 +140,7 @@ function! s:parser_text(...) dict return res endfunction -function! s:parser_parse(...) dict +function! s:parser_parse(...) dict abort let ret = a:0 ? [] : self.value while self.pos < self.len if self.same('$') @@ -186,7 +186,7 @@ call extend(s:parser_proto, snipmate#util#add_methods(s:sfile(), 'parser', \ [ 'advance', 'same', 'id', 'add_var', 'var', 'varend', \ 'placeholder', 'subst', 'expr', 'text', 'parse' ]), 'error') -function! s:indent(count) +function! s:indent(count) abort if &expandtab let shift = repeat(' ', (&sts > 0) ? &sts : &sw) else @@ -195,7 +195,7 @@ function! s:indent(count) return repeat(shift, a:count) endfunction -function! s:visual_placeholder(var, indent) +function! s:visual_placeholder(var, indent) abort let arg = get(a:var, 1, {}) if type(arg) == type({}) let pat = get(arg, 'pat', '') @@ -212,7 +212,7 @@ function! s:visual_placeholder(var, indent) return content endfunction -function! snipmate#parse#snippet(text) +function! snipmate#parse#snippet(text) abort let parser = s:new_parser(a:text) call parser.parse() unlet! b:snipmate_visual diff --git a/sources_non_forked/vim-snipmate/autoload/snipmate/util.vim b/sources_non_forked/vim-snipmate/autoload/snipmate/util.vim index 654c0ae3..5ba21cc2 100644 --- a/sources_non_forked/vim-snipmate/autoload/snipmate/util.vim +++ b/sources_non_forked/vim-snipmate/autoload/snipmate/util.vim @@ -1,6 +1,6 @@ " The next function was based on s:function and s:add_methods in fugitive " -function! snipmate#util#add_methods(sfile, namespace, methods) +function! snipmate#util#add_methods(sfile, namespace, methods) abort let dict = {} for name in a:methods let dict[name] = function(join([matchstr(a:sfile, '\d\+'), diff --git a/sources_non_forked/vim-snipmate/ftplugin/html_snip_helper.vim b/sources_non_forked/vim-snipmate/ftplugin/html_snip_helper.vim index 2e545707..4d523922 100644 --- a/sources_non_forked/vim-snipmate/ftplugin/html_snip_helper.vim +++ b/sources_non_forked/vim-snipmate/ftplugin/html_snip_helper.vim @@ -5,6 +5,6 @@ endif let s:did_snip_helper = 1 " Automatically closes tag if in xhtml -fun! Close() +fun! Close() abort return stridx(&ft, 'xhtml') == -1 ? '' : ' /' endf diff --git a/sources_non_forked/vim-snipmate/plugin/snipMate.vim b/sources_non_forked/vim-snipmate/plugin/snipMate.vim index 5c1b48fc..c82e43a0 100644 --- a/sources_non_forked/vim-snipmate/plugin/snipMate.vim +++ b/sources_non_forked/vim-snipmate/plugin/snipMate.vim @@ -105,7 +105,7 @@ let g:snipMate['get_scopes'] = get(g:snipMate, 'get_scopes', funcref#Function('r " Modified from Luc Hermitte's function on StackOverflow " -function! s:grab_visual() +function! s:grab_visual() abort let a_save = @a try normal! gv"ay @@ -116,7 +116,7 @@ function! s:grab_visual() endfunction " TODO: Allow specifying an arbitrary snippets file -function! s:load_scopes(bang, ...) +function! s:load_scopes(bang, ...) abort let gb = a:bang ? g: : b: let gb.snipMate = get(gb, 'snipMate', {}) let gb.snipMate.scope_aliases = get(gb.snipMate, 'scope_aliases', {}) diff --git a/sources_non_forked/vim-snipmate/t/jumping.vim b/sources_non_forked/vim-snipmate/t/jumping.vim index 7bc22b3b..1c3ab0d3 100644 --- a/sources_non_forked/vim-snipmate/t/jumping.vim +++ b/sources_non_forked/vim-snipmate/t/jumping.vim @@ -1,12 +1,12 @@ -function! Setup(snip) +function! Setup(snip) abort return snipMate#expandSnip(join(a:snip, "\n"), 1) endfunction -function! s:to_be_file(expected) +function! s:to_be_file(expected) abort return a:expected == getline(1,'$') endfunction -function! s:to_be_in(item, list) +function! s:to_be_in(item, list) abort return !empty(filter(copy(a:list), 'v:val is a:item')) endfunction diff --git a/sources_non_forked/vim-snippets/UltiSnips/all.snippets b/sources_non_forked/vim-snippets/UltiSnips/all.snippets index e33d2c51..75783785 100644 --- a/sources_non_forked/vim-snippets/UltiSnips/all.snippets +++ b/sources_non_forked/vim-snippets/UltiSnips/all.snippets @@ -29,7 +29,7 @@ def _parse_comments(s): if len(flags) == 0: rv.append((text, text, text, "")) # parse 3-part comment, but ignore those with O flag - elif flags[0] == 's' and 'O' not in flags: + elif 's' in flags and 'O' not in flags: ctriple = [] indent = "" @@ -47,7 +47,7 @@ def _parse_comments(s): ctriple.append(indent) rv.append(ctriple) - elif flags[0] == 'b': + elif 'b' in flags: if len(text) == 1: rv.insert(0, (text,text,text, "")) except StopIteration: diff --git a/sources_non_forked/vim-snippets/UltiSnips/php.snippets b/sources_non_forked/vim-snippets/UltiSnips/php.snippets index 366346a6..cd9c55b9 100644 --- a/sources_non_forked/vim-snippets/UltiSnips/php.snippets +++ b/sources_non_forked/vim-snippets/UltiSnips/php.snippets @@ -261,36 +261,56 @@ if (${1:/* condition */}) { $0 endsnippet +snippet ns "namespace declaration" b +namespace ${1:`!p +abspath = os.path.abspath(path) +m = re.search(r'[A-Z].+(?=/)', abspath) +if m: +› snip.rv = m.group().replace('/', '\\') +`}; +endsnippet + snippet class "Class declaration template" b + -" Version: 2.0 +" Version: 2.1 " GetLatestVimScripts: 1697 1 :AutoInstall: surround.vim if exists("g:loaded_surround") || &cp || v:version < 700 @@ -457,7 +457,7 @@ function! s:dosurround(...) " {{{1 if newchar == "" silent! call repeat#set("\Dsurround".char,scount) else - silent! call repeat#set("\C".(a:0 > 2 && a:3 ? "S" : "s")."urround".char.newchar.s:inpur,scount) + silent! call repeat#set("\C".(a:0 > 2 && a:3 ? "S" : "s")."urround".char.newchar.s:input,scount) endif endfunction " }}}1 diff --git a/vimrcs/plugins_config.vim b/vimrcs/plugins_config.vim index fc0072bd..dd385672 100644 --- a/vimrcs/plugins_config.vim +++ b/vimrcs/plugins_config.vim @@ -76,6 +76,7 @@ set grepprg=/bin/grep\ -nH """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Nerd Tree """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +let g:NERDTreeWinPos = "right" map nn :NERDTreeToggle map nb :NERDTreeFromBookmark map nf :NERDTreeFind