dotfiles

Configuration for the software I use.
git clone https://git.sr.ht/~jbauer/dotfiles
Log | Files | Refs | README | LICENSE

commit dffac47f3fe754c8183c2d1c864db61d5b1f2ba2
parent 1b0d7f87bd93a0d58249dd9c8885afc68e6972e1
Author: Jake Bauer <jbauer@paritybit.ca>
Date:   Tue,  2 Feb 2021 20:46:44 -0500

Remove supertab plugin

Diffstat:
D.config/nvim/bundle/supertab/doc/supertab.txt | 473-------------------------------------------------------------------------------
D.config/nvim/bundle/supertab/ftplugin/html.vim | 61-------------------------------------------------------------
D.config/nvim/bundle/supertab/ftplugin/xml.vim | 45---------------------------------------------
D.config/nvim/bundle/supertab/plugin/supertab.vim | 1144-------------------------------------------------------------------------------
M.config/nvim/init.vim | 1-
5 files changed, 0 insertions(+), 1724 deletions(-)

diff --git a/.config/nvim/bundle/supertab/doc/supertab.txt b/.config/nvim/bundle/supertab/doc/supertab.txt @@ -1,473 +0,0 @@ -*supertab.txt* - -Author: Eric Van Dewoestine <ervandew@gmail.com> - Original concept and versions up to 0.32 written by - Gergely Kontra <kgergely@mcl.hu> - -This plugin is licensed under the terms of the BSD License. Please see -supertab.vim for the license in its entirety. - -============================================================================== -Supertab *supertab* - -1. Introduction |supertab-intro| -2. Supertab Usage |supertab-usage| -3. Supertab Options |supertab-options| - Default completion type |supertab-defaultcompletion| - Secondary default completion type |supertab-contextdefault| - Completion contexts |supertab-completioncontexts| - Context text |supertab-contexttext| - Context Discover |supertab-contextdiscover| - Example |supertab-contextexample| - Completion Duration |supertab-duration| - Preventing Completion After/Before... |supertab-preventcomplete| - Changing default mapping |supertab-forwardbackward| - Inserting true tabs |supertab-mappingtabliteral| - Enhanced longest match support |supertab-longestenhanced| - Preselecting the first entry |supertab-longesthighlight| - Mapping <cr> to end completion |supertab-crmapping| - Auto close the preview window |supertab-closepreviewonpopupclose| - Keyword completion ignore/match case |supertab-completecase| - Completion Chaining |supertab-completionchaining| - -============================================================================== -1. Introduction *supertab-intro* - -Supertab is a plugin which allows you to perform all your insert completion -(|ins-completion|) using the tab key. - -Supertab requires Vim version 7.0 or above. - -============================================================================== -2. Supertab usage *supertab-usage* - -Using Supertab is as easy as hitting <Tab> or <S-Tab> (shift+tab) while in -insert mode, with at least one non whitespace character before the cursor, to -start the completion and then <Tab> or <S-Tab> again to cycle forwards or -backwards through the available completions. - -Example ('|' denotes the cursor location): - -bar -baz -b|<Tab> Hitting <Tab> here will start the completion, allowing you to - then cycle through the suggested words ('bar' and 'baz'). - -============================================================================== -3. Supertab Options *supertab-options* - -Supertab is configured via several global variables that you can set in your -|vimrc| file according to your needs. Below is a comprehensive list of -the variables available. - - -Default Completion Type *supertab-defaultcompletion* - *g:SuperTabDefaultCompletionType* - -g:SuperTabDefaultCompletionType (default value: "<c-p>") - -Used to set the default completion type. There is no need to escape this -value as that will be done for you when the type is set. - - Example: setting the default completion to 'user' completion: - -> - let g:SuperTabDefaultCompletionType = "<c-x><c-u>" -< - -Note: a special value of 'context' is supported which will result in -super tab attempting to use the text preceding the cursor to decide which -type of completion to attempt. Currently supertab can recognize method calls -or attribute references via '.', '::' or '->', and file path references -containing '/'. If the language you are using doesn't use any of the member -reference characters listed above, or you'd like to add additional patterns, -you can write a custom context function also described in the next section -(Completion context). - - Example: setting the default completion to supertab's 'context' completion: -> - let g:SuperTabDefaultCompletionType = "context" -< - - /usr/l<tab> # will use filename completion - myvar.t<tab> # will use user completion if completefunc set, - # or omni completion if omnifunc set. - myvar-><tab> # same as above - -When using context completion, super tab will fall back to a secondary default -completion type set by |g:SuperTabContextDefaultCompletionType|. - -Note: once the buffer has been initialized, changing the value of this setting -will not change the default complete type used. If you want to change the -default completion type for the current buffer after it has been set, perhaps -in an ftplugin, you'll need to call *SuperTabSetDefaultCompletionType* like so, -supplying the completion type you wish to switch to: - -> - call SuperTabSetDefaultCompletionType("<c-x><c-u>") -< - - -Secondary default completion type *supertab-contextdefault* - *g:SuperTabContextDefaultCompletionType* - -g:SuperTabContextDefaultCompletionType (default value: "<c-p>") - -Sets the default completion type used when g:SuperTabDefaultCompletionType is -set to 'context' and no completion type is returned by any of the configured -contexts. - - Note: supertab also supports the b:SuperTabContextDefaultCompletionType - variable allowing you to set the default type separately for the current - buffer, like from an ftplugin for example. - - -Completion contexts *supertab-completioncontexts* - *g:SuperTabCompletionContexts* - -g:SuperTabCompletionContexts (default value: ['s:ContextText']) - -Sets the list of contexts used for context completion. This value should -be a list of function names which provide the context implementation. - -When supertab starts context completion, each of these contexts will be -consulted, in the order they were supplied, to determine the completion type -to use. If a context returns a completion type, that type will be used, -otherwise the next context in the list will be consulted. If after executing -all the context functions, no completion type has been determined, then the -value of |g:SuperTabContextDefaultCompletionType| will be used. - - Note: supertab also supports the b:SuperTabCompletionContexts variable - allowing you to set the list of contexts separately for the current buffer, - like from an ftplugin for example. - -Built in completion contexts: - - s:ContextText *supertab-contexttext* - - The text context will examine the text near the cursor to decide which type - of completion to attempt. Currently the text context can recognize method - calls or attribute references via '.', '::' or '->', and file path - references containing '/'. - - /usr/l<tab> # will use filename completion - myvar.t<tab> # will use user completion if completefunc set, or - # omni completion if omnifunc set. - myvar-><tab> # same as above - - Supported configuration attributes: - - *g:SuperTabContextTextFileTypeExclusions* - List of file types for which the text context will be skipped. - - *g:SuperTabContextTextOmniPrecedence* (default: ['&completefunc', '&omnifunc']) - *b:SuperTabContextTextOmniPrecedence* - List of omni completion option names in the order of precedence that they - should be used if available. By default, user completion will be given - precedence over omni completion, but you can use this variable to give - omni completion higher precedence by placing it first in the list. - - *g:SuperTabContextTextMemberPatterns* (default: ['\.', '>\?::', '->']) - *b:SuperTabContextTextMemberPatterns* - List of patterns used to determine when omni/user completion should be - used. The default list consists of the most common patterns used to access - module/class/object members. - - Note: For html and xml based files, the buffer local version of the above - two settings are set to trigger omni completion first when encountering a - potential end tag pattern of '</'. - - s:ContextDiscover *supertab-contextdiscover* - - This context will use the 'g:SuperTabContextDiscoverDiscovery' variable to - determine the completion type to use. It will evaluate each value, in the - order they were defined, until a variable evaluates to a non-zero or - non-empty value, then the associated completion type is used. - - Supported configuration properties: - - g:SuperTabContextDiscoverDiscovery - List of variable:completionType mappings. - - Example context configuration: *supertab-contextexample* - -> - let g:SuperTabCompletionContexts = ['s:ContextText', 's:ContextDiscover'] - let g:SuperTabContextTextOmniPrecedence = ['&omnifunc', '&completefunc'] - let g:SuperTabContextDiscoverDiscovery = - \ ["&completefunc:<c-x><c-u>", "&omnifunc:<c-x><c-o>"] -< - - In addition to the default completion contexts, you can plug in your own - implementation by creating a globally accessible function that returns - the completion type to use (eg. "\<c-x>\<c-u>"). - -> - function MyTagContext() - if filereadable(expand('%:p:h') . '/tags') - return "\<c-x>\<c-]>" - endif - " no return will result in the evaluation of the next - " configured context - endfunction - let g:SuperTabCompletionContexts = - \ ['MyTagContext', 's:ContextText', 's:ContextDiscover'] -< - - Here is another example that could be used to add context support for - clojure, and perhaps other lisp variants: - -> - let b:SuperTabCompletionContexts = - \ ['ClojureContext'] + g:SuperTabCompletionContexts - - function! ClojureContext() - let curline = getline('.') - let cnum = col('.') - let synname = synIDattr(synID(line('.'), cnum - 1, 1), 'name') - if curline =~ '(\S\+\%' . cnum . 'c' && synname !~ '\(String\|Comment\)' - return "\<c-x>\<c-o>" - endif - endfunction -< - - -Completion Duration *supertab-duration* - *g:SuperTabRetainCompletionDuration* - -g:SuperTabRetainCompletionDuration (default value: 'insert') - -Determines if, and for how long, the current completion type is retained. -The possible values include: -'completion' - The current completion type is only retained for the - current completion. Once you have chosen a completion - result or exited the completion mode, the default - completion type is restored. -'insert' - The current completion type is saved until you exit insert - mode (via ESC). Once you exit insert mode the default - completion type is restored. (supertab default) -'session' - The current completion type is saved for the duration of - your vim session or until you enter a different completion - mode. - - -Preventing completion after... *supertab-preventcomplete* - *g:SuperTabNoCompleteBefore* - *g:SuperTabNoCompleteAfter* - -g:SuperTabNoCompleteBefore (default value: []) -g:SuperTabNoCompleteAfter (default value: ['^', '\s']) - -These two variables are used to control when supertab will attempt completion -or instead fall back to inserting a literal <tab>. There are two possible ways -to define these variables: - - 1) by specifying a list of patterns which are tested against the text before - and after the current cursor position that when matched, prevent completion. - So if you don't want supertab to start completion at the start of a line, - after a comma, or after a space, you can set g:SuperTabNoCompleteAfter - to ['^', ',', '\s']. - - 2) by specifying a funcref to a global accessible function which expects - as parameter the text to be inspected (before or after) and, based on that (or - other factors), it returns 1 if completion must be prevented, 0 otherwise. - -Note: That a buffer local version of these variables -(b:SuperTabNoCompleteBefore, b:SuperTabNoCompleteAfter) are also supported -should you wish to have different values depending on the file type for -instance. - -Changing the default mapping *supertab-forwardbackward* - *g:SuperTabMappingForward* - *g:SuperTabMappingBackward* - -g:SuperTabMappingForward (default value: '<tab>') -g:SuperTabMappingBackward (default value: '<s-tab>') - -These two variables allow you to set the keys used to kick off the current -completion. By default this is <tab> and <s-tab>. To change to something -like <c-space> and <s-c-space>, you can add the following to your |vimrc|. - -> - let g:SuperTabMappingForward = '<c-space>' - let g:SuperTabMappingBackward = '<s-c-space>' -> - -Note: if the above does not have the desired effect (which may happen in -console version of vim), you can try the following mappings. Although the -backwards mapping still doesn't seem to work in the console for me, your -milage may vary. - -> - let g:SuperTabMappingForward = '<nul>' - let g:SuperTabMappingBackward = '<s-nul>' -< - - -Inserting true tabs *supertab-mappingtabliteral* - *g:SuperTabMappingTabLiteral* - -g:SuperTabMappingTabLiteral (default value: '<c-tab>') - -Sets the key mapping used to insert a literal tab where supertab would -otherwise attempt to kick off insert completion. The default is '<c-tab>' -(ctrl-tab) which unfortunately might not work at the console. So if you are -using a console vim and want this functionality, you may have to change it to -something that is supported. Alternatively, you can escape the <tab> with -<c-v> (see |i_CTRL-V| for more infos). - -See also |supertab-preventcomplete|. - - -Enhanced longest match support *supertab-longestenhanced* - *g:SuperTabLongestEnhanced* - -g:SuperTabLongestEnhanced (default value: 0) - -When enabled and 'longest' is in your |completeopt| setting, supertab will -provide an enhanced longest match support where typing one or more letters and -hitting tab again while in a completion mode will complete the longest common -match using the new text in the buffer. - -For example, say you have a buffer with the following contents: - FooBarFoo - FooBar - Foo - FooBarBaz -And you then type F<tab>. Vim's builtin longest support will complete the -longest common text 'Foo' and offer 'FooBarFoo', 'FooBar', 'Foo', and -'FooBarBaz' as possible completions. With supertab's longest match -enhancement disabled, typing B<tab> while still in the completion mode will -end up completing 'FooBarBaz' or 'FooBarFoo' depending your settings, instead -of the next longest common match of 'FooBar'. With supertab's enhanced -longest match feature enabled, the typing of B<tab> will result in the next -longest text being completed. - - -Preselecting the first entry *supertab-longesthighlight* - *g:SuperTabLongestHighlight* - -g:SuperTabLongestHighlight (default value: 0) - -Sets whether or not to pre-highlight the first match when completeopt has the -popup menu enabled and the 'longest' option as well. When enabled, <tab> will -kick off completion and pre-select the first entry in the popup menu, allowing -you to simply hit <enter> to use it. - - -Mapping <cr> to end completion *supertab-crmapping* - *g:SuperTabCrMapping* - -g:SuperTabCrMapping (default value: 0) - -When enabled, <cr> will cancel completion mode preserving the current text. - -Compatibility with other plugins: - - endwise: compatible - - delimitMate: not compatible (disabled if the delimitMate <cr> mapping is - detected.) - -Note: if you have an insert expression mapping with a <cr> in it or an insert -abbreviation containing a <cr>, then supertab will not create a <cr> mapping -which could potentially cause problems with those. - - -Auto close the preview window *supertab-closepreviewonpopupclose* - *g:SuperTabClosePreviewOnPopupClose* - -g:SuperTabClosePreviewOnPopupClose (default value: 0) - -When enabled, supertab will attempt to close vim's completion preview window -when the completion popup closes (completion is finished or canceled). - - -Completion ignore/match case *supertab-completecase* - *g:SuperTabCompleteCase* - -g:SuperTabCompleteCase (default value: 'inherit') - -When issuing completions (keyword and potentially others), the value of your -|'ignorecase'| setting will determine what results are returned based on -whether or not you've chosen to ignore case or not. However, you may have -|'ignorecase'| set or unset for other reasons and don't want that value -considered when using insert completion. SuperTab allows you temporarily -override |'ignorecase'| by setting g:SuperTabCompleteCase to either 'ignore' -or 'match' depending on whether you want to always ignore or match case when -using insert completion. - -Note: third party omni/user completion plugins may or may not honor -|'ignorecase'|. If they do not, then you can probably contact them to add that -support. - -Completion Chaining *supertab-completionchaining* - -SuperTab provides the ability to chain one of the completion functions -(|completefunc| or |omnifunc|) together with one of the default vim -completion key sequences (|ins-completion|), giving you the ability to attempt -completion with the first, and upon no results, fall back to the second. - -To utilize this feature you need to call the *SuperTabChain* function where -the first argument is the name of a vim compatible |complete-function| and the -second is one of vim's insert completion (|ins-completion|) key bindings -(<c-p>, <c-n>, <c-x><c-]>, etc). Calling this function will set the current -buffer's |completefunc| option to a supertab provided implementation which -utilizes the supplied arguments to perform the completion. - -Here is an example that can be added to your .vimrc which will setup the -supertab chaining for any filetype that has a provided |omnifunc| to first -try that, then fall back to supertab's default, <c-p>, completion: - -> - autocmd FileType * - \ if &omnifunc != '' | - \ call SuperTabChain(&omnifunc, "<c-p>") | - \ endif -< - -You can also specify whether or not the 'context' completion method will -be used as part of your completion chaining. If you've already set your -default completion type to 'context', then no further action is needed. If -however you haven't set that or don't want to use 'context' completion in this -case, then you can supply a third argument to SuperTabChain which is a boolean -(1 or 0) indicationg whether you want to use 'context' completion (1) or not -(0). - -Here is an example where 'context' is the global default and completion -chaining is enabled for file types that have omni completion support: - -> - let g:SuperTabDefaultCompletionType = 'context' - autocmd FileType * - \ if &omnifunc != '' | - \ call SuperTabChain(&omnifunc, "<c-p>") | - \ endif -< - -This configuration will result in a completion flow like so: - - if text before the cursor looks like a file path: - use file completion - elif text before the cursor looks like an attempt to access a member - (method, field, etc): - use user completion - where user completion is currently set to supertab's - completion chaining, resulting in: - if omni completion has results: - use omni completion - else: - use keyword completion - else: - use keyword completion - -Note: Completion chaining only supports chaining 1 completion function (omni -or user) with 1 regular completion keybinding. All other combinations of -completions (2 or more completion functions, 2 or more key bindings, etc.) are -not supported due to limitations imposed by vim's code completion -implementation. - -Note: If the |completefunc| or |omnifunc| use vim's |complete_add()| instead -of returning completion results as a list, then Supertab's completion chaining -won't work properly with it since Supertab uses the function result to -determine if it should fallback to the next completion type. - -vim:tw=78:ts=8:ft=help:norl: diff --git a/.config/nvim/bundle/supertab/ftplugin/html.vim b/.config/nvim/bundle/supertab/ftplugin/html.vim @@ -1,61 +0,0 @@ -" Author: Eric Van Dewoestine <ervandew@gmail.com> -" -" License: {{{ -" Copyright (c) 2014 -" All rights reserved. -" -" Redistribution and use of this software in source and binary forms, with -" or without modification, are permitted provided that the following -" conditions are met: -" -" * Redistributions of source code must retain the above -" copyright notice, this list of conditions and the -" following disclaimer. -" -" * Redistributions in binary form must reproduce the above -" copyright notice, this list of conditions and the -" following disclaimer in the documentation and/or other -" materials provided with the distribution. -" -" * Neither the name of Gergely Kontra or Eric Van Dewoestine nor the names -" of its contributors may be used to endorse or promote products derived -" from this software without specific prior written permission of Gergely -" Kontra or Eric Van Dewoestine. -" -" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -" IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -" THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -" EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -" PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -" PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -" LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -" NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -" SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -" }}} - -if !exists('b:SuperTabContextTextMemberPatterns') - let b:SuperTabContextTextMemberPatterns = ['</'] -endif -if !exists('b:SuperTabContextTextOmniPrecedence') - let set_precedence = 1 - - " don't set omni precedence when user is using eclim + php - if &ft == 'php' - try - let project = eclim#project#util#GetCurrentProjectName() - if project != '' - let natures = eclim#project#util#GetProjectNatureAliases(project) - let set_precedence = !eclim#util#ListContains(natures, 'php') - endif - catch /E117/ - endtry - endif - - if set_precedence - let b:SuperTabContextTextOmniPrecedence = ['&omnifunc', '&completefunc'] - endif -endif - -" vim:ft=vim:fdm=marker diff --git a/.config/nvim/bundle/supertab/ftplugin/xml.vim b/.config/nvim/bundle/supertab/ftplugin/xml.vim @@ -1,45 +0,0 @@ -" Author: Eric Van Dewoestine <ervandew@gmail.com> -" -" License: {{{ -" Copyright (c) 2014 -" All rights reserved. -" -" Redistribution and use of this software in source and binary forms, with -" or without modification, are permitted provided that the following -" conditions are met: -" -" * Redistributions of source code must retain the above -" copyright notice, this list of conditions and the -" following disclaimer. -" -" * Redistributions in binary form must reproduce the above -" copyright notice, this list of conditions and the -" following disclaimer in the documentation and/or other -" materials provided with the distribution. -" -" * Neither the name of Gergely Kontra or Eric Van Dewoestine nor the names -" of its contributors may be used to endorse or promote products derived -" from this software without specific prior written permission of Gergely -" Kontra or Eric Van Dewoestine. -" -" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -" IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -" THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -" EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -" PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -" PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -" LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -" NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -" SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -" }}} - -if !exists('b:SuperTabContextTextMemberPatterns') - let b:SuperTabContextTextMemberPatterns = ['</'] -endif -if !exists('b:SuperTabContextTextOmniPrecedence') - let b:SuperTabContextTextOmniPrecedence = ['&omnifunc', '&completefunc'] -endif - -" vim:ft=vim:fdm=marker diff --git a/.config/nvim/bundle/supertab/plugin/supertab.vim b/.config/nvim/bundle/supertab/plugin/supertab.vim @@ -1,1144 +0,0 @@ -" Author: Eric Van Dewoestine <ervandew@gmail.com> -" Original concept and versions up to 0.32 written by -" Gergely Kontra <kgergely@mcl.hu> -" Version: 2.1 -" GetLatestVimScripts: 1643 1 :AutoInstall: supertab.vim -" -" Description: {{{ -" Use your tab key to do all your completion in insert mode! -" You can cycle forward and backward with the <Tab> and <S-Tab> keys -" Note: you must press <Tab> once to be able to cycle back -" -" http://www.vim.org/scripts/script.php?script_id=1643 -" }}} -" -" License: {{{ -" Copyright (c) 2002 - 2016 -" All rights reserved. -" -" Redistribution and use of this software in source and binary forms, with -" or without modification, are permitted provided that the following -" conditions are met: -" -" * Redistributions of source code must retain the above -" copyright notice, this list of conditions and the -" following disclaimer. -" -" * Redistributions in binary form must reproduce the above -" copyright notice, this list of conditions and the -" following disclaimer in the documentation and/or other -" materials provided with the distribution. -" -" * Neither the name of Gergely Kontra or Eric Van Dewoestine nor the names -" of its contributors may be used to endorse or promote products derived -" from this software without specific prior written permission of Gergely -" Kontra or Eric Van Dewoestine. -" -" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -" IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -" THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -" EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -" PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -" PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -" LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -" NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -" SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -" }}} -" -" Testing Info: {{{ -" Running vim + supertab with the absolute bare minimum settings: -" $ vim -u NONE -U NONE -c "set nocp | runtime plugin/supertab.vim" -" }}} - -if v:version < 700 - finish -endif - -if exists('complType') " Integration with other completion functions. - finish -endif - -if exists("loaded_supertab") - finish -endif -let loaded_supertab = 1 - -let s:save_cpo=&cpo -set cpo&vim - -" Global Variables {{{ - - if !exists("g:SuperTabDefaultCompletionType") - let g:SuperTabDefaultCompletionType = "<c-p>" - endif - - if !exists("g:SuperTabContextDefaultCompletionType") - let g:SuperTabContextDefaultCompletionType = "<c-p>" - endif - - if !exists("g:SuperTabContextTextMemberPatterns") - let g:SuperTabContextTextMemberPatterns = ['\.', '>\?::', '->'] - endif - - if !exists("g:SuperTabCompletionContexts") - let g:SuperTabCompletionContexts = ['s:ContextText'] - endif - - if !exists("g:SuperTabRetainCompletionDuration") - let g:SuperTabRetainCompletionDuration = 'insert' - endif - - if !exists("g:SuperTabNoCompleteBefore") - " retain backwards compatability - if exists("g:SuperTabMidWordCompletion") && !g:SuperTabMidWordCompletion - let g:SuperTabNoCompleteBefore = ['\k'] - else - let g:SuperTabNoCompleteBefore = [] - endif - endif - - if !exists("g:SuperTabNoCompleteAfter") - " retain backwards compatability - if exists("g:SuperTabLeadingSpaceCompletion") && g:SuperTabLeadingSpaceCompletion - let g:SuperTabNoCompleteAfter = [] - else - let g:SuperTabNoCompleteAfter = ['^', '\s'] - endif - endif - - if !exists("g:SuperTabMappingForward") - let g:SuperTabMappingForward = '<tab>' - endif - if !exists("g:SuperTabMappingBackward") - let g:SuperTabMappingBackward = '<s-tab>' - endif - - if !exists("g:SuperTabMappingTabLiteral") - let g:SuperTabMappingTabLiteral = '<c-tab>' - endif - - if !exists("g:SuperTabLongestEnhanced") - let g:SuperTabLongestEnhanced = 0 - endif - - if !exists("g:SuperTabLongestHighlight") - let g:SuperTabLongestHighlight = 0 - endif - - if !exists("g:SuperTabCrMapping") - let g:SuperTabCrMapping = 0 - endif - - if !exists("g:SuperTabClosePreviewOnPopupClose") - let g:SuperTabClosePreviewOnPopupClose = 0 - endif - - if !exists("g:SuperTabUndoBreak") - let g:SuperTabUndoBreak = 0 - endif - - if !exists("g:SuperTabCompleteCase") - let g:SuperTabCompleteCase = 'inherit' - endif - -" }}} - -" Script Variables {{{ - - " construct the help text. - let s:tabHelp = - \ "Hit <CR> or CTRL-] on the completion type you wish to switch to.\n" . - \ "Use :help ins-completion for more information.\n" . - \ "\n" . - \ "|<c-n>| - Keywords in 'complete' searching down.\n" . - \ "|<c-p>| - Keywords in 'complete' searching up (SuperTab default).\n" . - \ "|<c-x><c-l>| - Whole lines.\n" . - \ "|<c-x><c-n>| - Keywords in current file.\n" . - \ "|<c-x><c-k>| - Keywords in 'dictionary'.\n" . - \ "|<c-x><c-t>| - Keywords in 'thesaurus', thesaurus-style.\n" . - \ "|<c-x><c-i>| - Keywords in the current and included files.\n" . - \ "|<c-x><c-]>| - Tags.\n" . - \ "|<c-x><c-f>| - File names.\n" . - \ "|<c-x><c-d>| - Definitions or macros.\n" . - \ "|<c-x><c-v>| - Vim command-line.\n" . - \ "|<c-x><c-u>| - User defined completion.\n" . - \ "|<c-x><c-o>| - Omni completion.\n" . - \ "|<c-x>s| - Spelling suggestions." - - " set the available completion types and modes. - let s:types = - \ "\<c-e>\<c-y>\<c-l>\<c-n>\<c-k>\<c-t>\<c-i>\<c-]>" . - \ "\<c-f>\<c-d>\<c-v>\<c-n>\<c-p>\<c-u>\<c-o>\<c-n>\<c-p>s" - let s:modes = '/^E/^Y/^L/^N/^K/^T/^I/^]/^F/^D/^V/^P/^U/^O/s' - let s:types = s:types . "np" - let s:modes = s:modes . '/n/p' - -" }}} - -function! SuperTabSetDefaultCompletionType(type) " {{{ - " Globally available function that users can use to set the default - " completion type for the current buffer, like in an ftplugin. - - " don't allow overriding what SuperTabChain has set, otherwise chaining may - " not work. - if exists('b:SuperTabChain') - return - endif - - " init hack for <c-x><c-v> workaround. - let b:complCommandLine = 0 - - let b:SuperTabDefaultCompletionType = a:type - - " set the current completion type to the default - call SuperTabSetCompletionType(b:SuperTabDefaultCompletionType) -endfunction " }}} - -function! SuperTabSetCompletionType(type) " {{{ - " Globally available function that users can use to create mappings to quickly - " switch completion modes. Useful when a user wants to restore the default or - " switch to another mode without having to kick off a completion of that type - " or use SuperTabHelp. Note, this function only changes the current - " completion type, not the default, meaning that the default will still be - " restored once the configured retension duration has been met (see - " g:SuperTabRetainCompletionDuration). To change the default for the current - " buffer, use SuperTabDefaultCompletionType(type) instead. Example mapping to - " restore SuperTab default: - " nmap <F6> :call SetSuperTabCompletionType("<c-p>")<cr> - - " don't allow overriding what SuperTabChain has set, otherwise chaining may - " not work. - if exists('b:SuperTabChain') - return - endif - - call s:InitBuffer() - exec "let b:complType = \"" . escape(a:type, '<') . "\"" -endfunction " }}} - -function! SuperTabAlternateCompletion(type) " {{{ - " Function which can be mapped to a key to kick off an alternate completion - " other than the default. For instance, if you have 'context' as the default - " and want to map ctrl+space to issue keyword completion. - " Note: due to the way vim expands ctrl characters in mappings, you cannot - " create the alternate mapping like so: - " imap <c-space> <c-r>=SuperTabAlternateCompletion("<c-p>")<cr> - " instead, you have to use \<lt> to prevent vim from expanding the key - " when creating the mapping. - " gvim: - " imap <c-space> <c-r>=SuperTabAlternateCompletion("\<lt>c-p>")<cr> - " console: - " imap <nul> <c-r>=SuperTabAlternateCompletion("\<lt>c-p>")<cr> - - call SuperTabSetCompletionType(a:type) - " end any current completion before attempting to start the new one. - " use feedkeys to prevent possible remapping of <c-e> from causing issues. - "call feedkeys("\<c-e>", 'n') - " ^ since we can't detect completion mode vs regular insert mode, we force - " vim into keyword completion mode and end that mode to prevent the regular - " insert behavior of <c-e> from occurring. - call feedkeys("\<c-x>\<c-p>\<c-e>", 'n') - call feedkeys(b:complType, 'n') - return '' -endfunction " }}} - -function! SuperTabLongestHighlight(dir) " {{{ - " When longest highlight is enabled, this function is used to do the actual - " selection of the completion popup entry. - - if !pumvisible() - return '' - endif - return a:dir == -1 ? "\<up>" : "\<down>" -endfunction " }}} - -function! s:Init() " {{{ - " Setup mechanism to restore original completion type upon leaving insert - " mode if configured to do so - if g:SuperTabRetainCompletionDuration == 'insert' - augroup supertab_retain - autocmd! - autocmd InsertLeave * call s:SetDefaultCompletionType() - augroup END - endif -endfunction " }}} - -function! s:InitBuffer() " {{{ - if exists('b:SuperTabNoCompleteBefore') - return - endif - - let b:complReset = 0 - let b:complTypeManual = !exists('b:complTypeManual') ? '' : b:complTypeManual - let b:complTypeContext = '' - - " init hack for <c-x><c-v> workaround. - let b:complCommandLine = 0 - - if !exists('b:SuperTabNoCompleteBefore') - let b:SuperTabNoCompleteBefore = g:SuperTabNoCompleteBefore - endif - if !exists('b:SuperTabNoCompleteAfter') - let b:SuperTabNoCompleteAfter = g:SuperTabNoCompleteAfter - endif - - if !exists('b:SuperTabDefaultCompletionType') - let b:SuperTabDefaultCompletionType = g:SuperTabDefaultCompletionType - endif - - if !exists('b:SuperTabContextDefaultCompletionType') - let b:SuperTabContextDefaultCompletionType = - \ g:SuperTabContextDefaultCompletionType - endif - - " set the current completion type to the default - call SuperTabSetCompletionType(b:SuperTabDefaultCompletionType) - - " hack to programatically revert a change to snipmate that breaks supertab - " but which the new maintainers don't care about: - " http://github.com/garbas/vim-snipmate/issues/37 - let snipmate = maparg('<tab>', 'i') - if snipmate =~ '<C-G>u' && g:SuperTabMappingForward =~? '<tab>' - let snipmate = substitute(snipmate, '<C-G>u', '', '') - iunmap <tab> - exec "inoremap <silent> <tab> " . snipmate - endif -endfunction " }}} - -function! s:ManualCompletionEnter() " {{{ - " Handles manual entrance into completion mode. - - if &smd - echo '' | echohl ModeMsg | echo '-- ^X++ mode (' . s:modes . ')' | echohl None - endif - let complType = nr2char(getchar()) - if stridx(s:types, complType) != -1 - if !exists('b:supertab_close_preview') - let b:supertab_close_preview = !s:IsPreviewOpen() - endif - - if stridx("\<c-e>\<c-y>", complType) != -1 " no memory, just scroll... - return "\<c-x>" . complType - elseif stridx('np', complType) != -1 - let complType = nr2char(char2nr(complType) - 96) - else - let complType = "\<c-x>" . complType - endif - - let b:complTypeManual = complType - - if index(['insert', 'session'], g:SuperTabRetainCompletionDuration) != -1 - let b:complType = complType - endif - - " Hack to workaround bug when invoking command line completion via <c-r>= - if complType == "\<c-x>\<c-v>" - return s:CommandLineCompletion() - endif - - call s:InitBuffer() - - " optionally enable enhanced longest completion - if g:SuperTabLongestEnhanced && &completeopt =~ 'longest' - call s:EnableLongestEnhancement() - " handle backspacing which triggers g:SuperTabNoCompleteAfter match - elseif s:IsNoCompleteAfterReset() - call s:EnableNoCompleteAfterReset() - endif - - if g:SuperTabLongestHighlight && - \ &completeopt =~ 'longest' && - \ &completeopt =~ 'menu' && - \ !s:CompletionMode() - let dir = (complType == "\<c-x>\<c-p>") ? -1 : 1 - call feedkeys("\<c-r>=SuperTabLongestHighlight(" . dir . ")\<cr>", 'n') - endif - - call s:StartCompletionMode() - return complType - endif - - echohl "Unknown mode" - return complType -endfunction " }}} - -function! s:SetCompletionType() " {{{ - " Sets the completion type based on what the user has chosen from the help - " buffer. - - let chosen = substitute(getline('.'), '.*|\(.*\)|.*', '\1', '') - if chosen != getline('.') - let winnr = b:winnr - close - exec winnr . 'winc w' - call SuperTabSetCompletionType(chosen) - endif -endfunction " }}} - -function! s:SetDefaultCompletionType() " {{{ - if exists('b:SuperTabDefaultCompletionType') && - \ (!exists('b:complCommandLine') || !b:complCommandLine) - call SuperTabSetCompletionType(b:SuperTabDefaultCompletionType) - endif -endfunction " }}} - -function! SuperTab(command) " {{{ - " Used to perform proper cycle navigation as the user requests the next or - " previous entry in a completion list, and determines whether or not to simply - " retain the normal usage of <tab> based on the cursor position. - - if exists('b:SuperTabDisabled') && b:SuperTabDisabled - if exists('s:Tab') - return s:Tab() - endif - return ( - \ g:SuperTabMappingForward ==? '<tab>' || - \ g:SuperTabMappingBackward ==? '<tab>' - \ ) ? "\<tab>" : '' - endif - - call s:InitBuffer() - - if s:WillComplete() - if !exists('b:supertab_close_preview') - let b:supertab_close_preview = !s:IsPreviewOpen() - endif - - " optionally enable enhanced longest completion - if g:SuperTabLongestEnhanced && &completeopt =~ 'longest' - call s:EnableLongestEnhancement() - " handle backspacing which triggers g:SuperTabNoCompleteAfter match - elseif s:IsNoCompleteAfterReset() - call s:EnableNoCompleteAfterReset() - endif - - if !s:CompletionMode() - let b:complTypeManual = '' - endif - - " exception: if in <c-p> mode, then <c-n> should move up the list, and - " <c-p> down the list. - if a:command == 'p' && !b:complReset && - \ (b:complType == "\<c-p>" || - \ (b:complType == 'context' && - \ b:complTypeManual == '' && - \ b:complTypeContext == "\<c-p>")) - return "\<c-n>" - - elseif a:command == 'p' && !b:complReset && - \ (b:complType == "\<c-n>" || - \ (b:complType == 'context' && - \ b:complTypeManual == '' && - \ b:complTypeContext == "\<c-n>")) - return "\<c-p>" - - " already in completion mode and not resetting for longest enhancement, so - " just scroll to next/previous - elseif s:CompletionMode() && !b:complReset - let type = b:complType == 'context' ? b:complTypeContext : b:complType - if a:command == 'n' - return type == "\<c-p>" || type == "\<c-x>\<c-p>" ? "\<c-p>" : "\<c-n>" - endif - return type == "\<c-p>" || type == "\<c-x>\<c-p>" ? "\<c-n>" : "\<c-p>" - endif - - " handle 'context' completion. - if b:complType == 'context' - let complType = s:ContextCompletion() - if complType == '' - exec "let complType = \"" . - \ escape(b:SuperTabContextDefaultCompletionType, '<') . "\"" - endif - let b:complTypeContext = complType - - " Hack to workaround bug when invoking command line completion via <c-r>= - elseif b:complType == "\<c-x>\<c-v>" - let complType = s:CommandLineCompletion() - else - let complType = b:complType - endif - - " switch <c-x><c-p> / <c-x><c-n> completion in <c-p> mode - if a:command == 'p' - if complType == "\<c-x>\<c-p>" - let complType = "\<c-x>\<c-n>" - elseif complType == "\<c-x>\<c-n>" - let complType = "\<c-x>\<c-p>" - endif - endif - - " highlight first result if longest enabled - if g:SuperTabLongestHighlight && - \ &completeopt =~ 'longest' && - \ &completeopt =~ 'menu' && - \ (!s:CompletionMode() || b:complReset) - let dir = (complType == "\<c-p>") ? -1 : 1 - call feedkeys("\<c-r>=SuperTabLongestHighlight(" . dir . ")\<cr>", 'n') - endif - - if b:complReset - let b:complReset = 0 - " not an accurate condition for everyone, but better than sending <c-e> - " at the wrong time. - if s:CompletionMode() - return "\<c-e>" . complType - endif - endif - - if g:SuperTabUndoBreak && !s:CompletionMode() - call s:StartCompletionMode() - return "\<c-g>u" . complType - endif - - if g:SuperTabCompleteCase == 'ignore' || - \ g:SuperTabCompleteCase == 'match' - if exists('##CompleteDone') - let ignorecase = g:SuperTabCompleteCase == 'ignore' ? 1 : 0 - if &ignorecase != ignorecase - let b:supertab_ignorecase_save = &ignorecase - let &ignorecase = ignorecase - augroup supertab_ignorecase - autocmd CompleteDone <buffer> - \ let &ignorecase = b:supertab_ignorecase_save | - \ unlet b:supertab_ignorecase_save | - \ autocmd! supertab_ignorecase - augroup END - endif - endif - endif - - call s:StartCompletionMode() - return complType - endif - - if (a:command == 'n' && g:SuperTabMappingForward ==? '<tab>') || - \ (a:command == 'p' && g:SuperTabMappingBackward ==? '<tab>') - - " trigger our func ref to the smart tabs plugin if present. - if exists('s:Tab') - return s:Tab() - endif - - return "\<tab>" - endif - - if (a:command == 'n' && g:SuperTabMappingForward ==? '<s-tab>') || - \ (a:command == 'p' && g:SuperTabMappingBackward ==? '<s-tab>') - " support triggering <s-tab> mappings users might have. - if exists('s:ShiftTab') - if type(s:ShiftTab) == 2 - return s:ShiftTab() - else - call feedkeys(s:ShiftTab, 'n') - endif - endif - endif - - return '' -endfunction " }}} - -function! s:SuperTabHelp() " {{{ - " Opens a help window where the user can choose a completion type to enter. - - let winnr = winnr() - if bufwinnr("SuperTabHelp") == -1 - keepalt botright split SuperTabHelp - - setlocal noswapfile - setlocal buftype=nowrite - setlocal bufhidden=wipe - - silent put =s:tabHelp - call cursor(1, 1) - silent 1,delete _ - call cursor(4, 1) - exec "resize " . line('$') - - syntax match Special "|.\{-}|" - - setlocal readonly - setlocal nomodifiable - - nmap <silent> <buffer> <cr> :call <SID>SetCompletionType()<cr> - nmap <silent> <buffer> <c-]> :call <SID>SetCompletionType()<cr> - else - exec bufwinnr("SuperTabHelp") . "winc w" - endif - let b:winnr = winnr -endfunction " }}} - -function! s:CompletionMode() " {{{ - return pumvisible() || exists('b:supertab_completion_mode') -endfunction " }}} - -function! s:StartCompletionMode() " {{{ - if exists('##CompleteDone') - let b:supertab_completion_mode = 1 - augroup supertab_completion_mode - autocmd CompleteDone <buffer> - \ if exists('b:supertab_completion_mode') | - \ unlet b:supertab_completion_mode | - \ endif | - \ autocmd! supertab_completion_mode - augroup END - endif -endfunction " }}} - -function! s:WillComplete(...) " {{{ - " Determines if completion should be kicked off at the current location. - " Optional arg: - " col: The column to check at, otherwise use the current column. - - " if an arg was supplied, then we will re-check even if already in - " completion mode. - if s:CompletionMode() && !a:0 - return 1 - endif - - let line = getline('.') - let cnum = a:0 ? a:1 : col('.') - - " honor SuperTabNoCompleteAfter - let pre = cnum >= 2 ? line[:cnum - 2] : '' - let complAfterType = type(b:SuperTabNoCompleteAfter) - if complAfterType == 3 - " the option was provided as a list of patterns - for pattern in b:SuperTabNoCompleteAfter - if pre =~ pattern . '$' - return 0 - endif - endfor - elseif complAfterType == 2 - " the option was provided as a funcref - return !b:SuperTabNoCompleteAfter(pre) - endif - - " honor SuperTabNoCompleteBefore - " Within a word, but user does not have mid word completion enabled. - let post = line[cnum - 1:] - let complBeforeType = type(b:SuperTabNoCompleteBefore) - if complBeforeType == 3 - " a list of patterns - for pattern in b:SuperTabNoCompleteBefore - if post =~ '^' . pattern - return 0 - endif - endfor - elseif complBeforeType == 2 - " the option was provided as a funcref - return !b:SuperTabNoCompleteBefore(post) - endif - - return 1 -endfunction " }}} - -function! s:EnableLongestEnhancement() " {{{ - augroup supertab_reset - autocmd! - autocmd InsertLeave,CursorMovedI <buffer> - \ call s:ReleaseKeyPresses() | autocmd! supertab_reset - augroup END - call s:CaptureKeyPresses() -endfunction " }}} - -function! s:IsNoCompleteAfterReset() " {{{ - " if the user has g:SuperTabNoCompleteAfter set, then re-map <bs> so that - " backspacing to a point where one of the g:SuperTabNoCompleteAfter - " entries matches will cause completion mode to exit. - let complAfterType = type(b:SuperTabNoCompleteAfter) - if complAfterType == 2 - return 1 - endif - return len(g:SuperTabNoCompleteAfter) && g:SuperTabNoCompleteAfter != ['^', '\s'] -endfunction " }}} - -function! s:EnableNoCompleteAfterReset() " {{{ - augroup supertab_reset - autocmd! - autocmd InsertLeave,CursorMovedI <buffer> - \ call s:ReleaseKeyPresses() | autocmd! supertab_reset - augroup END - - " short version of s:CaptureKeyPresses - if !exists('b:capturing') || !b:capturing - let b:capturing = 1 - let b:capturing_start = col('.') - let b:captured = { - \ '<bs>': s:CaptureKeyMap('<bs>'), - \ '<c-h>': s:CaptureKeyMap('<c-h>'), - \ } - imap <buffer> <bs> <c-r>=<SID>CompletionReset("\<lt>bs>")<cr> - imap <buffer> <c-h> <c-r>=<SID>CompletionReset("\<lt>c-h>")<cr> - endif -endfunction " }}} - -function! s:CompletionReset(char) " {{{ - let b:complReset = 1 - - " handle exiting completion mode if user has g:SuperTabNoCompleteAfter set - " and they are about to backspace to a point where that maches one of the - " entries in that var. - if (a:char == "\<bs>" || a:char == "\<c-h>") && s:IsNoCompleteAfterReset() - if !s:WillComplete(col('.') - 1) - " Exit from completion mode then issue the currently requested - " backspace (mapped). - call feedkeys("\<space>\<bs>", 'n') - call s:ReleaseKeyPresses() - call feedkeys("\<bs>", 'mt') - return '' - endif - endif - - return a:char -endfunction " }}} - -function! s:CaptureKeyPresses() " {{{ - if !exists('b:capturing') || !b:capturing - let b:capturing = 1 - let b:capturing_start = col('.') - " save any previous mappings - let b:captured = { - \ '<bs>': s:CaptureKeyMap('<bs>'), - \ '<c-h>': s:CaptureKeyMap('<c-h>'), - \ } - " TODO: use &keyword to get an accurate list of chars to map - for c in split('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_', '.\zs') - let existing = s:CaptureKeyMap(c) - let b:captured[c] = existing - exec 'imap <buffer> ' . c . ' <c-r>=<SID>CompletionReset("' . c . '")<cr>' - endfor - imap <buffer> <bs> <c-r>=<SID>CompletionReset("\<lt>bs>")<cr> - imap <buffer> <c-h> <c-r>=<SID>CompletionReset("\<lt>c-h>")<cr> - endif -endfunction " }}} - -function! s:CaptureKeyMap(key) " {{{ - " as of 7.3.032 maparg supports obtaining extended information about the - " mapping. - if s:has_dict_maparg - return maparg(a:key, 'i', 0, 1) - endif - return maparg(a:key, 'i') -endfunction " }}} - -function! s:IsPreviewOpen() " {{{ - let wins = tabpagewinnr(tabpagenr(), '$') - let winnr = 1 - while winnr <= wins - if getwinvar(winnr, '&previewwindow') == 1 - return 1 - endif - let winnr += 1 - endwhile - return 0 -endfunction " }}} - -function! s:ClosePreview() " {{{ - if exists('b:supertab_close_preview') && b:supertab_close_preview - let preview = 0 - for bufnum in tabpagebuflist() - if getwinvar(bufwinnr(bufnum), '&previewwindow') - let preview = 1 - break - endif - endfor - if preview - pclose - try - doautocmd <nomodeline> supertab_preview_closed User <supertab> - catch /E216/ - " ignore: no autocmds defined - endtry - endif - endif - silent! unlet b:supertab_close_preview -endfunction " }}} - -function! s:ReleaseKeyPresses() " {{{ - if exists('b:capturing') && b:capturing - let b:capturing = 0 - for c in keys(b:captured) - exec 'iunmap <buffer> ' . c - endfor - - " restore any previous mappings - for [key, mapping] in items(b:captured) - if !len(mapping) - continue - endif - - if type(mapping) == 4 - let restore = mapping.noremap ? "inoremap" : "imap" - let restore .= " <buffer>" - if mapping.silent - let restore .= " <silent>" - endif - if mapping.expr - let restore .= " <expr>" - endif - let rhs = substitute(mapping.rhs, '<SID>\c', '<SNR>' . mapping.sid . '_', 'g') - let restore .= ' ' . key . ' ' . rhs - exec restore - elseif type(c) == 1 - let args = substitute(mapping, '.*\(".\{-}"\).*', '\1', '') - if args != mapping - let args = substitute(args, '<', '<lt>', 'g') - let expr = substitute(mapping, '\(.*\)".\{-}"\(.*\)', '\1%s\2', '') - let mapping = printf(expr, args) - endif - exec printf("imap <silent> <buffer> %s %s", key, mapping) - endif - endfor - unlet b:captured - - if mode() == 'i' && &completeopt =~ 'menu' && b:capturing_start != col('.') - " force full exit from completion mode (don't exit insert mode since - " that will break repeating with '.') - call feedkeys("\<space>\<bs>", 'n') - endif - unlet b:capturing_start - endif -endfunction " }}} - -function! s:CommandLineCompletion() " {{{ - " Hack needed to account for apparent bug in vim command line mode completion - " when invoked via <c-r>= - - " This hack will trigger InsertLeave which will then invoke - " s:SetDefaultCompletionType. To prevent default completion from being - " restored prematurely, set an internal flag for s:SetDefaultCompletionType - " to check for. - let b:complCommandLine = 1 - return "\<c-\>\<c-o>:call feedkeys('\<c-x>\<c-v>\<c-v>', 'n') | " . - \ "let b:complCommandLine = 0\<cr>" -endfunction " }}} - -function! s:ContextCompletion() " {{{ - let contexts = exists('b:SuperTabCompletionContexts') ? - \ b:SuperTabCompletionContexts : g:SuperTabCompletionContexts - - for context in contexts - try - let Context = function(context) - let complType = Context() - unlet Context - if type(complType) == 1 && complType != '' - return complType - endif - catch /E700/ - echohl Error - echom 'supertab: no context function "' . context . '" found.' - echohl None - endtry - endfor - return '' -endfunction " }}} - -function! s:ContextDiscover() " {{{ - let discovery = exists('g:SuperTabContextDiscoverDiscovery') ? - \ g:SuperTabContextDiscoverDiscovery : [] - - " loop through discovery list to find the default - if !empty(discovery) - for pair in discovery - let var = substitute(pair, '\(.*\):.*', '\1', '') - let type = substitute(pair, '.*:\(.*\)', '\1', '') - exec 'let value = ' . var - if value !~ '^\s*$' && value != '0' - exec "let complType = \"" . escape(type, '<') . "\"" - return complType - endif - endfor - endif -endfunction " }}} - -function! s:ContextText() " {{{ - let exclusions = exists('g:SuperTabContextTextFileTypeExclusions') ? - \ g:SuperTabContextTextFileTypeExclusions : [] - - if index(exclusions, &ft) == -1 - let curline = getline('.') - let cnum = col('.') - let synname = synIDattr(synID(line('.'), cnum - 1, 1), 'name') - - let member_patterns = exists('b:SuperTabContextTextMemberPatterns') ? - \ b:SuperTabContextTextMemberPatterns : g:SuperTabContextTextMemberPatterns - let member_pattern = join(member_patterns, '\|') - - " don't kick off file completion if the pattern is '</' (to account for - " sgml languanges), that's what the following <\@<! pattern is doing. - if curline =~ '<\@<!/\.\?\w*\%' . cnum . 'c' || - \ ((has('win32') || has('win64')) && curline =~ '\\\w*\%' . cnum . 'c') - - return "\<c-x>\<c-f>" - - elseif curline =~ '\(' . member_pattern . '\)\w*\%' . cnum . 'c' && - \ synname !~ '\(String\|Comment\)' - let omniPrecedence = exists('g:SuperTabContextTextOmniPrecedence') ? - \ g:SuperTabContextTextOmniPrecedence : ['&completefunc', '&omnifunc'] - let omniPrecedence = exists('b:SuperTabContextTextOmniPrecedence') ? - \ b:SuperTabContextTextOmniPrecedence : omniPrecedence - - for omniFunc in omniPrecedence - if omniFunc !~ '^&' - let omniFunc = '&' . omniFunc - endif - if getbufvar(bufnr('%'), omniFunc) != '' - return omniFunc == '&omnifunc' ? "\<c-x>\<c-o>" : "\<c-x>\<c-u>" - endif - endfor - endif - endif -endfunction " }}} - -function! s:ExpandMap(map) " {{{ - let map = a:map - if map =~ '<Plug>' - let plug = substitute(map, '.\{-}\(<Plug>\w\+\).*', '\1', '') - let plug_map = maparg(plug, 'i') - let map = substitute(map, '.\{-}\(<Plug>\w\+\).*', plug_map, '') - endif - return map -endfunction " }}} - -function! SuperTabChain(completefunc, completekeys, ...) " {{{ - if a:completefunc != 'SuperTabCodeComplete' - call s:InitBuffer() - if (a:0 && a:1) || (!a:0 && b:SuperTabDefaultCompletionType == 'context') - let b:SuperTabContextTextOmniPrecedence = ['&completefunc', '&omnifunc'] - call SuperTabSetDefaultCompletionType("context") - else - call SuperTabSetDefaultCompletionType("<c-x><c-u>") - endif - - let b:SuperTabChain = [a:completefunc, a:completekeys] - setlocal completefunc=SuperTabCodeComplete - endif -endfunction " }}} - -function! SuperTabCodeComplete(findstart, base) " {{{ - if !exists('b:SuperTabChain') - echoe 'No completion chain has been set.' - return -2 - endif - - if len(b:SuperTabChain) != 2 - echoe 'Completion chain can only be used with 1 completion function ' . - \ 'and 1 fallback completion key binding.' - return -2 - endif - - let Func = function(b:SuperTabChain[0]) - - if a:findstart - let start = Func(a:findstart, a:base) - if start >= 0 - return start - endif - - return col('.') - 1 - endif - - let results = Func(a:findstart, a:base) - " Handle dict case, with 'words' and 'refresh' (optional). - " This is used by YouCompleteMe. (See complete-functions). - if type(results) == type({}) && has_key(results, 'words') - if len(results.words) - return results - endif - elseif len(results) - return results - endif - - exec 'let keys = "' . escape(b:SuperTabChain[1], '<') . '"' - " <c-e>: stop completion and go back to the originally typed text. - call feedkeys("\<c-e>" . keys, 'nt') - return [] -endfunction " }}} - -" Autocmds {{{ - if g:SuperTabClosePreviewOnPopupClose - augroup supertab_close_preview - autocmd! - autocmd InsertLeave,CursorMovedI * call s:ClosePreview() - augroup END - endif -" }}} - -" Key Mappings {{{ - " map a regular tab to ctrl-tab (note: doesn't work in console vim) - exec 'inoremap ' . g:SuperTabMappingTabLiteral . ' <tab>' - - inoremap <silent> <c-x> <c-r>=<SID>ManualCompletionEnter()<cr> - - imap <script> <Plug>SuperTabForward <c-r>=SuperTab('n')<cr> - imap <script> <Plug>SuperTabBackward <c-r>=SuperTab('p')<cr> - - let s:has_dict_maparg = v:version > 703 || (v:version == 703 && has('patch32')) - - " support delegating to smart tabs plugin - if g:SuperTabMappingForward ==? '<tab>' || g:SuperTabMappingBackward ==? '<tab>' - let existing_tab = maparg('<tab>', 'i') - if existing_tab =~ '\d\+_InsertSmartTab()$' - let s:Tab = function(substitute(existing_tab, '()$', '', '')) - endif - endif - - " save user's existing <s-tab> mapping if they have one. - " Note: this could cause more problems than it solves if it picks up <s-tab> - " mappings from other plugins and misinterprets them, etc, so this block is - " experimental and could be removed later. - if g:SuperTabMappingForward ==? '<s-tab>' || g:SuperTabMappingBackward ==? '<s-tab>' - let stab = maparg('<s-tab>', 'i') - if s:has_dict_maparg - let existing_stab = maparg('<s-tab>', 'i', 0, 1) - if len(existing_stab) && existing_stab.expr - let stab = substitute(stab, '<SID>\c', '<SNR>' . existing_stab.sid . '_', '') - let stab = substitute(stab, '()$', '', '') - let s:ShiftTab = function(stab) - let stab = '' - endif - endif - if stab != '' - let stab = substitute(stab, '\(<[-a-zA-Z0-9]\+>\)', '\\\1', 'g') - exec "let stab = \"" . stab . "\"" - let s:ShiftTab = stab - endif - endif - - exec 'imap ' . g:SuperTabMappingForward . ' <Plug>SuperTabForward' - exec 'imap ' . g:SuperTabMappingBackward . ' <Plug>SuperTabBackward' - - if g:SuperTabCrMapping - let expr_map = 0 - if s:has_dict_maparg - let map_dict = maparg('<cr>', 'i', 0, 1) - let expr_map = has_key(map_dict, 'expr') && map_dict.expr - else - let expr_map = maparg('<cr>', 'i') =~? '\<cr>' - endif - - redir => iabbrevs - silent iabbrev - redir END - let iabbrev_map = iabbrevs =~? '\<cr>' - - if expr_map - " Not compatible w/ expr mappings. This is most likely a user mapping, - " typically with the same functionality anyways. - let g:SuperTabCrMapping = 0 - elseif iabbrev_map - " Not compatible w/ insert abbreviations containing <cr> - let g:SuperTabCrMapping = 0 - elseif maparg('<CR>', 'i') =~ '<Plug>delimitMateCR' - " Not compatible w/ delimitMate since it doesn't play well with others - " and will always return a <cr> which we don't want when selecting a - " completion. - let g:SuperTabCrMapping = 0 - elseif maparg('<CR>', 'i') =~ '<CR>' - let map = maparg('<cr>', 'i') - let cr = !(map =~? '\(^\|[^)]\)<cr>' || map =~ 'ExpandCr') - let map = s:ExpandMap(map) - exec "inoremap <script> <cr> <c-r>=<SID>SelectCompletion(" . cr . ")<cr>" . map - else - inoremap <silent> <cr> <c-r>=<SID>SelectCompletion(1)<cr> - endif - function! s:SelectCompletion(cr) - " selecting a completion - if s:CompletionMode() - " ugly hack to let other <cr> mappings for other plugins cooperate - " with supertab - let b:supertab_pumwasvisible = 1 - - " close the preview window if configured to do so - if &completeopt =~ 'preview' && g:SuperTabClosePreviewOnPopupClose - if !exists('b:supertab_close_preview') - let b:supertab_close_preview = !s:IsPreviewOpen() - endif - call s:ClosePreview() - endif - - return "\<c-y>" - endif - - " only needed when chained with other mappings and one of them will - " issue a <cr>. - if exists('b:supertab_pumwasvisible') && !a:cr - unlet b:supertab_pumwasvisible - return '' - endif - - " not so pleasant hack to keep <cr> working for abbreviations - let word = substitute(getline('.'), '^.*\s\+\(.*\%' . col('.') . 'c\).*', '\1', '') - let result = maparg(word, 'i', 1) - if result != '' - let bs = "" - let i = 0 - while i < len(word) - let bs .= "\<bs>" - let i += 1 - endwhile - " escape keys - let result = substitute(result, '\(<[a-zA-Z][-a-zA-Z]*>\)', '\\\1', 'g') - " ensure escaped keys are properly recognized - exec 'let result = "' . escape(result, '"') . '"' - return bs . result . (a:cr ? "\<cr>" : "") - endif - - " only return a cr if nothing else is mapped to it since we don't want - " to duplicate a cr returned by another mapping. - return a:cr ? "\<cr>" : "" - endfunction - endif -" }}} - -" Command Mappings {{{ - if !exists(":SuperTabHelp") - command SuperTabHelp :call <SID>SuperTabHelp() - endif -" }}} - -call s:Init() - -function! TestSuperTabCodeComplete(findstart, base) " {{{ - " Test supertab completion chaining w/ a minimal vim environment: - " $ vim -u NONE -U NONE \ - " --cmd "set nocp | sy on" \ - " -c "so ~/.vim/plugin/supertab.vim" \ - " -c "let g:SuperTabDefaultCompletionType = '<c-x><c-u>'" \ - " -c "set completefunc=TestSuperTabCodeComplete" \ - " -c "call SuperTabChain(&completefunc, '<c-p>')" - if a:findstart - let line = getline('.') - let start = col('.') - 1 - if line[start] =~ '\.' - let start -= 1 - endif - while start > 0 && line[start - 1] =~ '\w' - let start -= 1 - endwhile - return start - else - let completions = [] - if getline('.') =~ 'TestC' - call add(completions, { - \ 'word': 'test1(', - \ 'kind': 'm', - \ 'menu': 'test1(...)', - \ }) - call add(completions, { - \ 'word': 'testing2(', - \ 'kind': 'm', - \ 'menu': 'testing2(...)', - \ }) - endif - - return completions - endif -endfunction " }}} - -let &cpo = s:save_cpo - -" vim:ft=vim:fdm=marker diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim @@ -3,7 +3,6 @@ source ~/.config/nvim/autoload/spell.vim "Plugins Used: {{{ " iceberg.vim — (colour scheme) -" supertab — (nicely remaps tab for autocompletion) " vim-buftabline — (shows open buffers using the tabline at the top) " vim-commentary — (shortcuts for (un)commenting lines/blocks of code) " vim-css-color – (highlight CSS hex colours with their actual colours)