I don't use your plugins so I can't be entirely sure it will fix your issue, but it seems you want mappings in insert mode which behave differently depending on whether the popup menu is visible or not.
You can use the pumvisible() function to test if the popup menu is visible, it returns 0 when it's not, 1 otherwise.
Then you can build an expression with ...
You are right about tab being the same same as ctrl+i, as explained in :help key-codes:
*key-notation* *key-codes* *keycodes*
These names for keys are used in the documentation. They can also be used
with the ":map" command (insert the key name by pressing CTRL-K and then the
key you want the name for).
notation meaning ...
Thanks to @Hotschke's comments.
run vim without any plugins/options excepting supertab and vim-go
enable options/plugins one-by-one
find that the set paste option was the cause
Useful links related to this "issue":
make sure you don't have the paste option enabled in your vimrc or elsewhere
You can always bypass the effects of a keypress by preceding it with a ctrl-v. For example, if you'd like to insert a literal escape character without returning to normal mode, you can do from insert mode:
This also works on the command line. I don't have YouCompleteMe, or SuperTab installed so I haven't tested this solution, but it ...
I would just use a different key mapping for completion instead of hijacking the Tab key. Having one key to preform two actions and "guess" which one it should do is just a misguided approach IMHO.
For SuperTab see :help supertab-forwardbackward:
g:SuperTabMappingForward (default value: '<tab>')
g:SuperTabMappingBackward (default value: '<s-tab&...
guess you need autocompleter+snippet plugin, since Supertab will be slow when the tags file are large, recommand you two group plugins:
(1) YouCompleteMe + UltiSnips
(2) Neocomplete + clang_complete + Jedi + neosnippet + neosnippet-snippets
They are the best C/C++/Python completer+snippet plugin combinations I ever used, but incompatible with each other.
As a simple solution, try adding this line to your vimrc:
let g:SuperTabDefaultCompletionType = "context"
This will result in the following behavior, which should be what you need in most cases:
/usr/l<tab> # will use filename completion
myvar.t<tab> # will use user completion if completefunc set, or
# omni completion if omnifunc ...