[
  {
    "path": ".gitignore",
    "content": "doc/tags*\n*.swp\n"
  },
  {
    "path": "README.md",
    "content": "**neocomplcache**\n=================\n\n**Note**: The development of this plugin is finished. Accepts minor patches and\nissues but no new features.\n[ddc.vim](https://github.com/Shougo/ddc.vim) is the next generation auto\ncompletion plugin. Consider migrating to it.\n\n\nDescription\n-----------\n\nneocomplcache is the abbreviation of \"neo-completion with cache\". It\nprovides keyword completion system by maintaining a cache of keywords in the\ncurrent buffer. neocomplcache could be customized easily and has a lot more\nfeatures than the Vim's standard completion feature.\n\nIf you use Vim 7.3.885 or above with if\\_lua feature, you should use\nneocomplete.  It is faster than neocomplcache.\n\nhttps://github.com/Shougo/neocomplete.vim\n\nInstallation\n============\n\n* Extract the file and put files in your Vim directory\n   (usually ~/.vim/ or Program Files/Vim/vimfiles on Windows).\n* Execute `|:NeoComplCacheEnable|` command or\n`let g:neocomplcache_enable_at_startup = 1`\nin your `.vimrc`. Not in `.gvimrc`(`_gvimrc`)!\n\nCaution\n-------\n\nBecause all variable names were changed in neocomplcache Ver.5, it is not\nbackwards compatible. If you want to upgrade, you should use the following\nscript from Mr.thinca.\n\nhttp://gist.github.com/422503\n\nSnippets feature(snippets\\_complete source) was split from Ver.7.\nIf you used it, please install neosnippet source manually.\n\nhttps://github.com/Shougo/neosnippet\n\nScreen shots\n============\n\nOriginal filename completion.\n-----------\n![Original filename completion.](http://1.bp.blogspot.com/_ci2yBnqzJgM/TD1O5_bOQ2I/AAAAAAAAADE/vHf9Xg_mrTI/s1600/filename_complete.png)\n\nOmni completion.\n----------------\n![Omni completion.](http://2.bp.blogspot.com/_ci2yBnqzJgM/TD1PTolkTBI/AAAAAAAAADU/knJ3eniuHWI/s1600/omni_complete.png)\n\nCompletion with vimshell(http://github.com/Shougo/vimshell).\n------------------------------------------------------------\n![Completion with vimshell(http://github.com/Shougo/vimshell).](http://1.bp.blogspot.com/_ci2yBnqzJgM/TD1PLfdQrwI/AAAAAAAAADM/2pSFRTHwYOY/s1600/neocomplcache_with_vimshell.png)\n\nVim completion\n------------------------------------------------------------\n![Vim completion.](http://1.bp.blogspot.com/_ci2yBnqzJgM/TD1PfKTlwnI/AAAAAAAAADs/nOGWTRLuae8/s1600/vim_complete.png)\n\nSetting examples\n\n```vim\n\"Note: This option must set it in .vimrc(_vimrc).  NOT IN .gvimrc(_gvimrc)!\n\" Disable AutoComplPop.\nlet g:acp_enableAtStartup = 0\n\" Use neocomplcache.\nlet g:neocomplcache_enable_at_startup = 1\n\" Use smartcase.\nlet g:neocomplcache_enable_smart_case = 1\n\" Set minimum syntax keyword length.\nlet g:neocomplcache_min_syntax_length = 3\nlet g:neocomplcache_lock_buffer_name_pattern = '\\*ku\\*'\n\n\" Enable heavy features.\n\" Use camel case completion.\n\"let g:neocomplcache_enable_camel_case_completion = 1\n\" Use underbar completion.\n\"let g:neocomplcache_enable_underbar_completion = 1\n\n\" Define dictionary.\nlet g:neocomplcache_dictionary_filetype_lists = {\n    \\ 'default' : '',\n    \\ 'vimshell' : $HOME.'/.vimshell_hist',\n    \\ 'scheme' : $HOME.'/.gosh_completions'\n    \\ }\n\n\" Define keyword.\nif !exists('g:neocomplcache_keyword_patterns')\n    let g:neocomplcache_keyword_patterns = {}\nendif\nlet g:neocomplcache_keyword_patterns['default'] = '\\h\\w*'\n\n\" Plugin key-mappings.\ninoremap <expr><C-g>     neocomplcache#undo_completion()\ninoremap <expr><C-l>     neocomplcache#complete_common_string()\n\n\" Recommended key-mappings.\n\" <CR>: close popup and save indent.\ninoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>\nfunction! s:my_cr_function()\n  return neocomplcache#smart_close_popup() . \"\\<CR>\"\n  \" For no inserting <CR> key.\n  \"return pumvisible() ? neocomplcache#close_popup() : \"\\<CR>\"\nendfunction\n\" <TAB>: completion.\ninoremap <expr><TAB>  pumvisible() ? \"\\<C-n>\" : \"\\<TAB>\"\n\" <C-h>, <BS>: close popup and delete backword char.\ninoremap <expr><C-h> neocomplcache#smart_close_popup().\"\\<C-h>\"\ninoremap <expr><BS> neocomplcache#smart_close_popup().\"\\<C-h>\"\ninoremap <expr><C-y>  neocomplcache#close_popup()\ninoremap <expr><C-e>  neocomplcache#cancel_popup()\n\" Close popup by <Space>.\n\"inoremap <expr><Space> pumvisible() ? neocomplcache#close_popup() : \"\\<Space>\"\n\n\" For cursor moving in insert mode(Not recommended)\n\"inoremap <expr><Left>  neocomplcache#close_popup() . \"\\<Left>\"\n\"inoremap <expr><Right> neocomplcache#close_popup() . \"\\<Right>\"\n\"inoremap <expr><Up>    neocomplcache#close_popup() . \"\\<Up>\"\n\"inoremap <expr><Down>  neocomplcache#close_popup() . \"\\<Down>\"\n\" Or set this.\n\"let g:neocomplcache_enable_cursor_hold_i = 1\n\" Or set this.\n\"let g:neocomplcache_enable_insert_char_pre = 1\n\n\" AutoComplPop like behavior.\n\"let g:neocomplcache_enable_auto_select = 1\n\n\" Shell like behavior(not recommended).\n\"set completeopt+=longest\n\"let g:neocomplcache_enable_auto_select = 1\n\"let g:neocomplcache_disable_auto_complete = 1\n\"inoremap <expr><TAB>  pumvisible() ? \"\\<Down>\" : \"\\<C-x>\\<C-u>\"\n\n\" Enable omni completion.\nautocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS\nautocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags\nautocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS\nautocmd FileType python setlocal omnifunc=pythoncomplete#Complete\nautocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags\n\n\" Enable heavy omni completion.\nif !exists('g:neocomplcache_force_omni_patterns')\n  let g:neocomplcache_force_omni_patterns = {}\nendif\nlet g:neocomplcache_force_omni_patterns.php = '[^. \\t]->\\h\\w*\\|\\h\\w*::'\nlet g:neocomplcache_force_omni_patterns.c = '[^.[:digit:] *\\t]\\%(\\.\\|->\\)'\nlet g:neocomplcache_force_omni_patterns.cpp = '[^.[:digit:] *\\t]\\%(\\.\\|->\\)\\|\\h\\w*::'\n\n\" For perlomni.vim setting.\n\" https://github.com/c9s/perlomni.vim\nlet g:neocomplcache_force_omni_patterns.perl = '\\h\\w*->\\h\\w*\\|\\h\\w*::'\n```\n"
  },
  {
    "path": "autoload/neocomplcache/async_cache.vim",
    "content": "\"=============================================================================\n\" FILE: async_cache.vim\n\" AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 16 Jul 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following condition\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! s:main(argv) \"{{{\n  \" args: funcname, outputname filename pattern_file_name mark minlen maxfilename\n  let [funcname, outputname, filename, pattern_file_name, mark, minlen, maxfilename, fileencoding]\n        \\ = a:argv\n\n  if funcname ==# 'load_from_file'\n    let keyword_list = s:load_from_file(\n          \\ filename, pattern_file_name, mark, minlen, maxfilename, fileencoding, 1)\n  else\n    let keyword_list = s:load_from_tags(\n          \\ filename, pattern_file_name, mark, minlen, maxfilename, fileencoding)\n  endif\n\n  if empty(keyword_list)\n    return\n  endif\n\n  \" Output cache.\n  call writefile([string(keyword_list)], outputname)\nendfunction\"}}}\n\nfunction! s:load_from_file(filename, pattern_file_name, mark, minlen, maxfilename, fileencoding, is_string) \"{{{\n  if !filereadable(a:filename) || !filereadable(a:pattern_file_name)\n    \" File not found.\n    return []\n  endif\n\n  let lines = map(readfile(a:filename),\n        \\ 's:iconv(v:val, a:fileencoding, &encoding)')\n\n  let pattern = get(readfile(a:pattern_file_name), 0, '\\h\\w*')\n\n  let max_lines = len(lines)\n\n  let keyword_list = []\n  let dup_check = {}\n  let keyword_pattern2 = '^\\%('.pattern.'\\m\\)'\n\n  for line in lines \"{{{\n    let match = match(line, pattern)\n    while match >= 0 \"{{{\n      let match_str = matchstr(line, keyword_pattern2, match)\n\n      if !has_key(dup_check, match_str) && len(match_str) >= a:minlen\n        \" Append list.\n        call add(keyword_list, (a:is_string ?\n              \\ match_str : { 'word' : match_str }))\n\n        let dup_check[match_str] = 1\n      endif\n\n      let match += len(match_str)\n\n      let match = match(line, pattern, match)\n    endwhile\"}}}\n  endfor\"}}}\n\n  return keyword_list\nendfunction\"}}}\n\nfunction! s:load_from_tags(filename, pattern_file_name, mark, minlen, maxfilename, fileencoding) \"{{{\n  let keyword_lists = []\n  let dup_check = {}\n\n  let [pattern, tags_file_name, filter_pattern, filetype] =\n        \\ readfile(a:pattern_file_name)[: 4]\n  if tags_file_name !=# '$dummy$'\n    \" Check output.\n    let tags_list = []\n\n    let i = 0\n    while i < 2\n      if filereadable(tags_file_name)\n        \" Use filename.\n        let tags_list = map(readfile(tags_file_name),\n              \\ 's:iconv(v:val, a:fileencoding, &encoding)')\n        break\n      endif\n\n      sleep 500m\n      let i += 1\n    endwhile\n  else\n    if !filereadable(a:filename)\n      return []\n    endif\n\n    \" Use filename.\n    let tags_list = map(readfile(a:filename),\n          \\ 's:iconv(v:val, a:fileencoding, &encoding)')\n  endif\n\n  if empty(tags_list)\n    \" File caching.\n    return s:load_from_file(a:filename, a:pattern_file_name,\n          \\ a:mark, a:minlen, a:maxfilename, a:fileencoding, 0)\n  endif\n\n  for line in tags_list \"{{{\n    let tag = split(substitute(line, \"\\<CR>\", '', 'g'), '\\t', 1)\n\n    \" Add keywords.\n    if line =~ '^!' || len(tag) < 3 || len(tag[0]) < a:minlen\n          \\ || has_key(dup_check, tag[0])\n      continue\n    endif\n\n    let opt = join(tag[2:], \"\\<TAB>\")\n    let cmd = matchstr(opt, '.*/;\"')\n\n    let option = {\n          \\ 'cmd' : substitute(substitute(substitute(cmd,\n          \\'^\\%([/?]\\^\\?\\)\\?\\s*\\|\\%(\\$\\?[/?]\\)\\?;\"$', '', 'g'),\n          \\ '\\\\\\\\', '\\\\', 'g'), '\\\\/', '/', 'g'),\n          \\ 'kind' : ''\n          \\}\n    if option.cmd =~ '\\d\\+'\n      let option.cmd = tag[0]\n    endif\n\n    for opt in split(opt[len(cmd):], '\\t', 1)\n      let key = matchstr(opt, '^\\h\\w*\\ze:')\n      if key == ''\n        let option['kind'] = opt\n      else\n        let option[key] = matchstr(opt, '^\\h\\w*:\\zs.*')\n      endif\n    endfor\n\n    if has_key(option, 'file')\n          \\ || (has_key(option, 'access') && option.access != 'public')\n      continue\n    endif\n\n    let abbr = has_key(option, 'signature')? tag[0] . option.signature :\n          \\ (option['kind'] == 'd' || option['cmd'] == '') ?\n          \\ tag[0] : option['cmd']\n    let abbr = substitute(abbr, '\\s\\+', ' ', 'g')\n    \" Substitute \"namespace foobar\" to \"foobar <namespace>\".\n    let abbr = substitute(abbr,\n          \\'^\\(namespace\\|class\\|struct\\|enum\\|union\\)\\s\\+\\(.*\\)$',\n          \\'\\2 <\\1>', '')\n    \" Substitute typedef.\n    let abbr = substitute(abbr,\n          \\'^typedef\\s\\+\\(.*\\)\\s\\+\\(\\h\\w*\\%(::\\w*\\)*\\);\\?$',\n          \\'\\2 <typedef \\1>', 'g')\n\n    let keyword = {\n          \\ 'word' : tag[0], 'abbr' : abbr,\n          \\ 'kind' : option['kind'], 'dup' : 1,\n          \\ }\n    if has_key(option, 'struct')\n      let keyword.menu = option.struct\n    elseif has_key(option, 'class')\n      let keyword.menu = option.class\n    elseif has_key(option, 'enum')\n      let keyword.menu = option.enum\n    elseif has_key(option, 'union')\n      let keyword.menu = option.union\n    endif\n\n    call add(keyword_lists, keyword)\n    let dup_check[tag[0]] = 1\n  endfor\"}}}\n\n  if filter_pattern != ''\n    call filter(keyword_lists, filter_pattern)\n  endif\n\n  return keyword_lists\nendfunction\"}}}\n\nfunction! s:truncate(str, width) \"{{{\n  \" Original function is from mattn.\n  \" http://github.com/mattn/googlereader-vim/tree/master\n\n  if a:str =~# '^[\\x00-\\x7f]*$'\n    return len(a:str) < a:width ?\n          \\ printf('%-'.a:width.'s', a:str) : strpart(a:str, 0, a:width)\n  endif\n\n  let ret = a:str\n  let width = s:wcswidth(a:str)\n  if width > a:width\n    let ret = s:strwidthpart(ret, a:width)\n    let width = s:wcswidth(ret)\n  endif\n\n  if width < a:width\n    let ret .= repeat(' ', a:width - width)\n  endif\n\n  return ret\nendfunction\"}}}\n\nfunction! s:strwidthpart(str, width) \"{{{\n  let ret = a:str\n  let width = s:wcswidth(a:str)\n  while width > a:width\n    let char = matchstr(ret, '.$')\n    let ret = ret[: -1 - len(char)]\n    let width -= s:wcwidth(char)\n  endwhile\n\n  return ret\nendfunction\"}}}\n\nfunction! s:iconv(expr, from, to)\n  if a:from == '' || a:to == '' || a:from ==? a:to\n    return a:expr\n  endif\n  let result = iconv(a:expr, a:from, a:to)\n  return result != '' ? result : a:expr\nendfunction\n\nif v:version >= 703\n  \" Use builtin function.\n  function! s:wcswidth(str) \"{{{\n    return strdisplaywidth(a:str)\n  endfunction\"}}}\n  function! s:wcwidth(str) \"{{{\n    return strwidth(a:str)\n  endfunction\"}}}\nelse\n  function! s:wcswidth(str) \"{{{\n    if a:str =~# '^[\\x00-\\x7f]*$'\n      return strlen(a:str)\n    end\n\n    let mx_first = '^\\(.\\)'\n    let str = a:str\n    let width = 0\n    while 1\n      let ucs = char2nr(substitute(str, mx_first, '\\1', ''))\n      if ucs == 0\n        break\n      endif\n      let width += s:wcwidth(ucs)\n      let str = substitute(str, mx_first, '', '')\n    endwhile\n    return width\n  endfunction\"}}}\n\n  \" UTF-8 only.\n  function! s:wcwidth(ucs) \"{{{\n    let ucs = a:ucs\n    if (ucs >= 0x1100\n          \\  && (ucs <= 0x115f\n          \\  || ucs == 0x2329\n          \\  || ucs == 0x232a\n          \\  || (ucs >= 0x2e80 && ucs <= 0xa4cf\n          \\      && ucs != 0x303f)\n          \\  || (ucs >= 0xac00 && ucs <= 0xd7a3)\n          \\  || (ucs >= 0xf900 && ucs <= 0xfaff)\n          \\  || (ucs >= 0xfe30 && ucs <= 0xfe6f)\n          \\  || (ucs >= 0xff00 && ucs <= 0xff60)\n          \\  || (ucs >= 0xffe0 && ucs <= 0xffe6)\n          \\  || (ucs >= 0x20000 && ucs <= 0x2fffd)\n          \\  || (ucs >= 0x30000 && ucs <= 0x3fffd)\n          \\  ))\n      return 2\n    endif\n    return 1\n  endfunction\"}}}\nendif\n\nif argc() == 8 &&\n      \\ (argv(0) ==# 'load_from_file' || argv(0) ==# 'load_from_tags')\n  try\n    call s:main(argv())\n  catch\n    call writefile([v:throwpoint, v:exception],\n          \\     fnamemodify(argv(1), ':h:h').'/async_error_log')\n  endtry\n\n  qall!\nelse\n  function! neocomplcache#async_cache#main(argv) \"{{{\n    call s:main(a:argv)\n  endfunction\"}}}\nendif\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/cache.vim",
    "content": "\"=============================================================================\n\" FILE: cache.vim\n\" AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 26 Sep 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditionneocomplcache#cache#\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\n\" Cache loader.\nfunction! neocomplcache#cache#check_cache_list(cache_dir, key, async_cache_dictionary, index_keyword_list, ...) \"{{{\n  if !has_key(a:async_cache_dictionary, a:key)\n    return\n  endif\n\n  let is_string = get(a:000, 0, 0)\n\n  let keyword_list = []\n  let cache_list = a:async_cache_dictionary[a:key]\n  for cache in cache_list\n    if filereadable(cache.cachename)\n      let keyword_list += neocomplcache#cache#load_from_cache(\n            \\ a:cache_dir, cache.filename, is_string)\n    endif\n  endfor\n\n  call neocomplcache#cache#list2index(keyword_list, a:index_keyword_list, is_string)\n  call filter(cache_list, '!filereadable(v:val.cachename)')\n\n  if empty(cache_list)\n    \" Delete from dictionary.\n    call remove(a:async_cache_dictionary, a:key)\n  endif\nendfunction\"}}}\nfunction! neocomplcache#cache#check_cache(cache_dir, key, async_cache_dictionary, keyword_list_dictionary, ...) \"{{{\n  let is_string = get(a:000, 0, 0)\n\n  \" Caching.\n  if !has_key(a:keyword_list_dictionary, a:key)\n    let a:keyword_list_dictionary[a:key] = {}\n  endif\n  return neocomplcache#cache#check_cache_list(\n        \\ a:cache_dir, a:key, a:async_cache_dictionary,\n        \\ a:keyword_list_dictionary[a:key], is_string)\nendfunction\"}}}\nfunction! neocomplcache#cache#load_from_cache(cache_dir, filename, ...) \"{{{\n  let is_string = get(a:000, 0, 0)\n\n  try\n    let list = eval(get(neocomplcache#cache#readfile(\n          \\ a:cache_dir, a:filename), 0, '[]'))\n    if !empty(list) && is_string && type(list[0]) != type('')\n      \" Type check.\n      throw 'Type error'\n    endif\n\n    return list\n  catch\n    \" Delete old cache file.\n    let cache_name =\n          \\ neocomplcache#cache#encode_name(a:cache_dir, a:filename)\n    if filereadable(cache_name)\n      call delete(cache_name)\n    endif\n\n    return []\n  endtry\nendfunction\"}}}\nfunction! neocomplcache#cache#index_load_from_cache(cache_dir, filename, ...) \"{{{\n  let is_string = get(a:000, 0, 0)\n  let keyword_lists = {}\n\n  let completion_length = 2\n  for keyword in neocomplcache#cache#load_from_cache(\n        \\ a:cache_dir, a:filename, is_string)\n    let key = tolower(\n          \\ (is_string ? keyword : keyword.word)[: completion_length-1])\n    if !has_key(keyword_lists, key)\n      let keyword_lists[key] = []\n    endif\n    call add(keyword_lists[key], keyword)\n  endfor\n\n  return keyword_lists\nendfunction\"}}}\nfunction! neocomplcache#cache#list2index(list, dictionary, is_string) \"{{{\n  let completion_length = 2\n  for keyword in a:list\n    let word = a:is_string ? keyword : keyword.word\n\n    let key = tolower(word[: completion_length-1])\n    if !has_key(a:dictionary, key)\n      let a:dictionary[key] = {}\n    endif\n    let a:dictionary[key][word] = keyword\n  endfor\n\n  return a:dictionary\nendfunction\"}}}\n\nfunction! neocomplcache#cache#save_cache(cache_dir, filename, keyword_list) \"{{{\n  if neocomplcache#util#is_sudo()\n    return\n  endif\n\n  call neocomplcache#cache#writefile(\n        \\ a:cache_dir, a:filename, [string(a:keyword_list)])\nendfunction\"}}}\nfunction! neocomplcache#cache#save_cache_old(cache_dir, filename, keyword_list) \"{{{\n  if neocomplcache#util#is_sudo()\n    return\n  endif\n\n  \" Create dictionary key.\n  for keyword in a:keyword_list\n    if !has_key(keyword, 'abbr')\n      let keyword.abbr = keyword.word\n    endif\n    if !has_key(keyword, 'kind')\n      let keyword.kind = ''\n    endif\n    if !has_key(keyword, 'menu')\n      let keyword.menu = ''\n    endif\n  endfor\n\n  \" Output cache.\n  let word_list = []\n  for keyword in a:keyword_list\n    call add(word_list, printf('%s|||%s|||%s|||%s',\n          \\keyword.word, keyword.abbr, keyword.menu, keyword.kind))\n  endfor\n\n  call neocomplcache#cache#writefile(\n        \\ a:cache_dir, a:filename, word_list)\nendfunction\"}}}\n\n\" Cache helper.\nfunction! neocomplcache#cache#getfilename(cache_dir, filename) \"{{{\n  let cache_dir = neocomplcache#get_temporary_directory() . '/' . a:cache_dir\n  return s:_encode_name(cache_dir, a:filename)\nendfunction\"}}}\nfunction! neocomplcache#cache#filereadable(cache_dir, filename) \"{{{\n  let cache_dir = neocomplcache#get_temporary_directory() . '/' . a:cache_dir\n  let cache_name = s:_encode_name(cache_dir, a:filename)\n  return filereadable(cache_name)\nendfunction\"}}}\nfunction! neocomplcache#cache#readfile(cache_dir, filename) \"{{{\n  let cache_dir = neocomplcache#get_temporary_directory() . '/' . a:cache_dir\n  let cache_name = s:_encode_name(cache_dir, a:filename)\n  return filereadable(cache_name) ? readfile(cache_name) : []\nendfunction\"}}}\nfunction! neocomplcache#cache#writefile(cache_dir, filename, list) \"{{{\n  if neocomplcache#util#is_sudo()\n    return\n  endif\n\n  let cache_dir = neocomplcache#get_temporary_directory() . '/' . a:cache_dir\n  let cache_name = s:_encode_name(cache_dir, a:filename)\n\n  call writefile(a:list, cache_name)\nendfunction\"}}}\nfunction! neocomplcache#cache#encode_name(cache_dir, filename)\n  let cache_dir = neocomplcache#get_temporary_directory() . '/' . a:cache_dir\n  return s:_encode_name(cache_dir, a:filename)\nendfunction\nfunction! neocomplcache#cache#check_old_cache(cache_dir, filename) \"{{{\n  let cache_dir = neocomplcache#get_temporary_directory() . '/' . a:cache_dir\n  \" Check old cache file.\n  let cache_name = s:_encode_name(cache_dir, a:filename)\n  let ret = getftime(cache_name) == -1\n        \\ || getftime(cache_name) <= getftime(a:filename)\n  if ret && filereadable(cache_name)\n    \" Delete old cache.\n    call delete(cache_name)\n  endif\n\n  return ret\nendfunction\"}}}\n\nlet s:sdir = neocomplcache#util#substitute_path_separator(\n      \\ fnamemodify(expand('<sfile>'), ':p:h'))\n\nfunction! neocomplcache#cache#async_load_from_file(cache_dir, filename, pattern, mark) \"{{{\n  if !neocomplcache#cache#check_old_cache(a:cache_dir, a:filename)\n        \\ || neocomplcache#util#is_sudo()\n    return neocomplcache#cache#encode_name(a:cache_dir, a:filename)\n  endif\n\n  let pattern_file_name =\n        \\ neocomplcache#cache#encode_name('keyword_patterns', a:filename)\n  let cache_name =\n        \\ neocomplcache#cache#encode_name(a:cache_dir, a:filename)\n\n  \" Create pattern file.\n  call neocomplcache#cache#writefile(\n        \\ 'keyword_patterns', a:filename, [a:pattern])\n\n  \" args: funcname, outputname, filename pattern mark\n  \"       minlen maxlen encoding\n  let fileencoding =\n        \\ &fileencoding == '' ? &encoding : &fileencoding\n  let argv = [\n        \\  'load_from_file', cache_name, a:filename, pattern_file_name, a:mark,\n        \\  g:neocomplcache_min_keyword_length,\n        \\  g:neocomplcache_max_menu_width, fileencoding\n        \\ ]\n  return s:async_load(argv, a:cache_dir, a:filename)\nendfunction\"}}}\nfunction! neocomplcache#cache#async_load_from_tags(cache_dir, filename, filetype, mark, is_create_tags) \"{{{\n  if !neocomplcache#cache#check_old_cache(a:cache_dir, a:filename)\n        \\ || neocomplcache#util#is_sudo()\n    return neocomplcache#cache#encode_name(a:cache_dir, a:filename)\n  endif\n\n  let cache_name =\n        \\ neocomplcache#cache#encode_name(a:cache_dir, a:filename)\n  let pattern_file_name =\n        \\ neocomplcache#cache#encode_name('tags_pattens', a:filename)\n\n  if a:is_create_tags\n    if !executable(g:neocomplcache_ctags_program)\n      echoerr 'Create tags error! Please install '\n            \\ . g:neocomplcache_ctags_program . '.'\n      return neocomplcache#cache#encode_name(a:cache_dir, a:filename)\n    endif\n\n    \" Create tags file.\n    let tags_file_name =\n          \\ neocomplcache#cache#encode_name('tags_output', a:filename)\n\n    let default = get(g:neocomplcache_ctags_arguments_list, '_', '')\n    let args = get(g:neocomplcache_ctags_arguments_list, a:filetype, default)\n\n    if has('win32') || has('win64')\n      let filename =\n            \\ neocomplcache#util#substitute_path_separator(a:filename)\n      let command = printf('%s -f \"%s\" %s \"%s\" ',\n            \\ g:neocomplcache_ctags_program, tags_file_name, args, filename)\n    else\n      let command = printf('%s -f ''%s'' 2>/dev/null %s ''%s''',\n            \\ g:neocomplcache_ctags_program, tags_file_name, args, a:filename)\n    endif\n\n    if neocomplcache#has_vimproc()\n      call vimproc#system_bg(command)\n    else\n      call system(command)\n    endif\n  else\n    let tags_file_name = '$dummy$'\n  endif\n\n  let filter_pattern =\n        \\ get(g:neocomplcache_tags_filter_patterns, a:filetype, '')\n  call neocomplcache#cache#writefile('tags_pattens', a:filename,\n        \\ [neocomplcache#get_keyword_pattern(),\n        \\  tags_file_name, filter_pattern, a:filetype])\n\n  \" args: funcname, outputname, filename pattern mark\n  \"       minlen maxlen encoding\n  let fileencoding = &fileencoding == '' ? &encoding : &fileencoding\n  let argv = [\n        \\  'load_from_tags', cache_name, a:filename, pattern_file_name, a:mark,\n        \\  g:neocomplcache_min_keyword_length,\n        \\  g:neocomplcache_max_menu_width, fileencoding\n        \\ ]\n  return s:async_load(argv, a:cache_dir, a:filename)\nendfunction\"}}}\nfunction! s:async_load(argv, cache_dir, filename) \"{{{\n  \" if 0\n  if neocomplcache#has_vimproc()\n    let paths = vimproc#get_command_name(v:progname, $PATH, -1)\n    if empty(paths)\n      if has('gui_macvim')\n        \" MacVim check.\n        if !executable('/Applications/MacVim.app/Contents/MacOS/Vim')\n          call neocomplcache#print_error(\n                \\ 'You installed MacVim in not default directory!'.\n                \\ ' You must add MacVim installed path in $PATH.')\n          let g:neocomplcache_use_vimproc = 0\n          return\n        endif\n\n        let vim_path = '/Applications/MacVim.app/Contents/MacOS/Vim'\n      else\n        call neocomplcache#print_error(\n              \\ printf('Vim path : \"%s\" is not found.'.\n              \\        ' You must add \"%s\" installed path in $PATH.',\n              \\        v:progname, v:progname))\n        let g:neocomplcache_use_vimproc = 0\n        return\n      endif\n    else\n      let base_path = neocomplcache#util#substitute_path_separator(\n            \\ fnamemodify(paths[0], ':p:h'))\n\n      let vim_path = base_path .\n            \\ (neocomplcache#util#is_windows() ? '/vim.exe' : '/vim')\n    endif\n\n    if !executable(vim_path) && neocomplcache#util#is_mac()\n      \" Note: Search \"Vim\" instead of vim.\n      let vim_path = base_path. '/Vim'\n    endif\n\n    if !executable(vim_path)\n      call neocomplcache#print_error(\n            \\ printf('Vim path : \"%s\" is not executable.', vim_path))\n      let g:neocomplcache_use_vimproc = 0\n      return\n    endif\n\n    let args = [vim_path, '-u', 'NONE', '-i', 'NONE', '-n',\n          \\       '-N', '-S', s:sdir.'/async_cache.vim']\n          \\ + a:argv\n    call vimproc#system_bg(args)\n    \" call vimproc#system(args)\n    \" call system(join(args))\n  else\n    call neocomplcache#async_cache#main(a:argv)\n  endif\n\n  return neocomplcache#cache#encode_name(a:cache_dir, a:filename)\nendfunction\"}}}\n\nfunction! s:_encode_name(cache_dir, filename)\n  \" Check cache directory.\n  if !isdirectory(a:cache_dir)\n    call mkdir(a:cache_dir, 'p')\n  endif\n  let cache_dir = a:cache_dir\n  if cache_dir !~ '/$'\n    let cache_dir .= '/'\n  endif\n\n  return cache_dir . s:_create_hash(cache_dir, a:filename)\nendfunction\n\n\" Check md5.\ntry\n  call md5#md5()\n  let s:exists_md5 = 1\ncatch\n  let s:exists_md5 = 0\nendtry\n\nfunction! s:_create_hash(dir, str)\n  if len(a:dir) + len(a:str) < 150\n    let hash = substitute(substitute(\n          \\ a:str, ':', '=-', 'g'), '[/\\\\]', '=+', 'g')\n  elseif s:exists_md5\n    \" Use md5.vim.\n    let hash = md5#md5(a:str)\n  else\n    \" Use simple hash.\n    let sum = 0\n    for i in range(len(a:str))\n      let sum += char2nr(a:str[i]) * (i + 1)\n    endfor\n\n    let hash = printf('%x', sum)\n  endif\n\n  return hash\nendfunction\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/commands.vim",
    "content": "\"=============================================================================\n\" FILE: commands.vim\n\" AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 12 Apr 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#commands#_initialize() \"{{{\n  command! -nargs=? Neco call s:display_neco(<q-args>)\n  command! -nargs=1 NeoComplCacheAutoCompletionLength\n        \\ call s:set_auto_completion_length(<args>)\nendfunction\"}}}\n\nfunction! neocomplcache#commands#_toggle_lock() \"{{{\n  if neocomplcache#get_current_neocomplcache().lock\n    echo 'neocomplcache is unlocked!'\n    call neocomplcache#commands#_unlock()\n  else\n    echo 'neocomplcache is locked!'\n    call neocomplcache#commands#_lock()\n  endif\nendfunction\"}}}\n\nfunction! neocomplcache#commands#_lock() \"{{{\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  let neocomplcache.lock = 1\nendfunction\"}}}\n\nfunction! neocomplcache#commands#_unlock() \"{{{\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  let neocomplcache.lock = 0\nendfunction\"}}}\n\nfunction! neocomplcache#commands#_lock_source(source_name) \"{{{\n  if !neocomplcache#is_enabled()\n    call neocomplcache#print_warning(\n          \\ 'neocomplcache is disabled! This command is ignored.')\n    return\n  endif\n\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n\n  let neocomplcache.lock_sources[a:source_name] = 1\nendfunction\"}}}\n\nfunction! neocomplcache#commands#_unlock_source(source_name) \"{{{\n  if !neocomplcache#is_enabled()\n    call neocomplcache#print_warning(\n          \\ 'neocomplcache is disabled! This command is ignored.')\n    return\n  endif\n\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n\n  let neocomplcache.lock_sources[a:source_name] = 1\nendfunction\"}}}\n\nfunction! neocomplcache#commands#_clean() \"{{{\n  \" Delete cache files.\n  for directory in filter(neocomplcache#util#glob(\n        \\ g:neocomplcache_temporary_dir.'/*'), 'isdirectory(v:val)')\n    for filename in filter(neocomplcache#util#glob(directory.'/*'),\n          \\ '!isdirectory(v:val)')\n      call delete(filename)\n    endfor\n  endfor\n\n  echo 'Cleaned cache files in: ' . g:neocomplcache_temporary_dir\nendfunction\"}}}\n\nfunction! neocomplcache#commands#_set_file_type(filetype) \"{{{\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  let neocomplcache.filetype = a:filetype\nendfunction\"}}}\n\nfunction! s:display_neco(number) \"{{{\n  let cmdheight_save = &cmdheight\n\n  let animation = [\n    \\[\n        \\[\n        \\ \"   A A\",\n        \\ \"~(-'_'-)\"\n        \\],\n        \\[\n        \\ \"      A A\",\n        \\ \"   ~(-'_'-)\",\n        \\],\n        \\[\n        \\ \"        A A\",\n        \\ \"     ~(-'_'-)\",\n        \\],\n        \\[\n        \\ \"          A A  \",\n        \\ \"       ~(-'_'-)\",\n        \\],\n        \\[\n        \\ \"             A A\",\n        \\ \"          ~(-^_^-)\",\n        \\],\n    \\],\n    \\[\n        \\[\n        \\ \"   A A\",\n        \\ \"~(-'_'-)\",\n        \\],\n        \\[\n        \\ \"      A A\",\n        \\ \"   ~(-'_'-)\",\n        \\],\n        \\[\n        \\ \"        A A\",\n        \\ \"     ~(-'_'-)\",\n        \\],\n        \\[\n        \\ \"          A A  \",\n        \\ \"       ~(-'_'-)\",\n        \\],\n        \\[\n        \\ \"             A A\",\n        \\ \"          ~(-'_'-)\",\n        \\],\n        \\[\n        \\ \"          A A  \",\n        \\ \"       ~(-'_'-)\"\n        \\],\n        \\[\n        \\ \"        A A\",\n        \\ \"     ~(-'_'-)\"\n        \\],\n        \\[\n        \\ \"      A A\",\n        \\ \"   ~(-'_'-)\"\n        \\],\n        \\[\n        \\ \"   A A\",\n        \\ \"~(-'_'-)\"\n        \\],\n    \\],\n    \\[\n        \\[\n        \\ \"   A A\",\n        \\ \"~(-'_'-)\",\n        \\],\n        \\[\n        \\ \"        A A\",\n        \\ \"     ~(-'_'-)\",\n        \\],\n        \\[\n        \\ \"             A A\",\n        \\ \"          ~(-'_'-)\",\n        \\],\n        \\[\n        \\ \"                  A A\",\n        \\ \"               ~(-'_'-)\",\n        \\],\n        \\[\n        \\ \"                       A A\",\n        \\ \"                    ~(-'_'-)\",\n        \\],\n        \\[\"                           A A\",\n        \\ \"                        ~(-'_'-)\",\n        \\],\n    \\],\n    \\[\n        \\[\n        \\ \"\",\n        \\ \"   A A\",\n        \\ \"~(-'_'-)\",\n        \\],\n        \\[\"      A A\",\n        \\ \"   ~(-'_'-)\",\n        \\ \"\",\n        \\],\n        \\[\n        \\ \"\",\n        \\ \"        A A\",\n        \\ \"     ~(-'_'-)\",\n        \\],\n        \\[\n        \\ \"          A A  \",\n        \\ \"       ~(-'_'-)\",\n        \\ \"\",\n        \\],\n        \\[\n        \\ \"\",\n        \\ \"             A A\",\n        \\ \"          ~(-^_^-)\",\n        \\],\n    \\],\n    \\[\n        \\[\n        \\ \"   A A        A A\",\n        \\ \"~(-'_'-)  -8(*'_'*)\"\n        \\],\n        \\[\n        \\ \"     A A        A A\",\n        \\ \"  ~(-'_'-)  -8(*'_'*)\"\n        \\],\n        \\[\n        \\ \"       A A        A A\",\n        \\ \"    ~(-'_'-)  -8(*'_'*)\"\n        \\],\n        \\[\n        \\ \"     A A        A A\",\n        \\ \"  ~(-'_'-)  -8(*'_'*)\"\n        \\],\n        \\[\n        \\ \"   A A        A A\",\n        \\ \"~(-'_'-)  -8(*'_'*)\"\n        \\],\n    \\],\n    \\[\n        \\[\n        \\ \"  A\\\\_A\\\\\",\n        \\ \"(=' .' ) ~w\",\n        \\ \"(,(\\\")(\\\")\",\n        \\],\n    \\],\n  \\]\n\n  let number = (a:number != '') ? a:number : len(animation)\n  let anim = get(animation, number, animation[s:rand(len(animation) - 1)])\n  let &cmdheight = len(anim[0])\n\n  for frame in anim\n    echo repeat(\"\\n\", &cmdheight-2)\n    redraw\n    echon join(frame, \"\\n\")\n    sleep 300m\n  endfor\n  redraw\n\n  let &cmdheight = cmdheight_save\nendfunction\"}}}\n\nfunction! s:rand(max) \"{{{\n  if !has('reltime')\n    \" Same value.\n    return 0\n  endif\n\n  let time = reltime()[1]\n  return (time < 0 ? -time : time)% (a:max + 1)\nendfunction\"}}}\n\nfunction! s:set_auto_completion_length(len) \"{{{\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  let neocomplcache.completion_length = a:len\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/complete.vim",
    "content": "\"=============================================================================\n\" FILE: complete.vim\n\" AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 06 Jun 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#complete#manual_complete(findstart, base) \"{{{\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n\n  if a:findstart\n    let cur_text = neocomplcache#get_cur_text()\n    if !neocomplcache#is_enabled()\n          \\ || neocomplcache#helper#is_omni_complete(cur_text)\n      call neocomplcache#helper#clear_result()\n      let &l:completefunc = 'neocomplcache#complete#manual_complete'\n\n      return (neocomplcache#is_prefetch()\n            \\ || g:neocomplcache_enable_insert_char_pre) ?\n            \\ -1 : -3\n    endif\n\n    \" Get complete_pos.\n    if neocomplcache#is_prefetch() && !empty(neocomplcache.complete_results)\n      \" Use prefetch results.\n    else\n      let neocomplcache.complete_results =\n            \\ neocomplcache#complete#_get_results(cur_text)\n    endif\n    let complete_pos =\n          \\ neocomplcache#complete#_get_complete_pos(neocomplcache.complete_results)\n\n    if complete_pos < 0\n      call neocomplcache#helper#clear_result()\n\n      let neocomplcache = neocomplcache#get_current_neocomplcache()\n      let complete_pos = (neocomplcache#is_prefetch() ||\n            \\ g:neocomplcache_enable_insert_char_pre ||\n            \\ neocomplcache#get_current_neocomplcache().skipped) ?  -1 : -3\n      let neocomplcache.skipped = 0\n    endif\n\n    return complete_pos\n  else\n    let complete_pos = neocomplcache#complete#_get_complete_pos(\n          \\ neocomplcache.complete_results)\n    let neocomplcache.candidates = neocomplcache#complete#_get_words(\n          \\ neocomplcache.complete_results, complete_pos, a:base)\n    let neocomplcache.complete_str = a:base\n\n    if v:version > 703 || v:version == 703 && has('patch418')\n      let dict = { 'words' : neocomplcache.candidates }\n\n      if (g:neocomplcache_enable_cursor_hold_i\n            \\      || v:version > 703 || v:version == 703 && has('patch561'))\n            \\ && len(a:base) < g:neocomplcache_auto_completion_start_length\n        \" Note: If Vim is less than 7.3.561, it have broken register \".\" problem.\n        let dict.refresh = 'always'\n      endif\n      return dict\n    else\n      return neocomplcache.candidates\n    endif\n  endif\nendfunction\"}}}\n\nfunction! neocomplcache#complete#sources_manual_complete(findstart, base) \"{{{\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n\n  if a:findstart\n    if !neocomplcache#is_enabled()\n      call neocomplcache#helper#clear_result()\n      return -2\n    endif\n\n    \" Get complete_pos.\n    let complete_results = neocomplcache#complete#_get_results(\n          \\ neocomplcache#get_cur_text(1), neocomplcache.manual_sources)\n    let neocomplcache.complete_pos =\n          \\ neocomplcache#complete#_get_complete_pos(complete_results)\n\n    if neocomplcache.complete_pos < 0\n      call neocomplcache#helper#clear_result()\n\n      return -2\n    endif\n\n    let neocomplcache.complete_results = complete_results\n\n    return neocomplcache.complete_pos\n  endif\n\n  let neocomplcache.complete_pos =\n        \\ neocomplcache#complete#_get_complete_pos(\n        \\     neocomplcache.complete_results)\n  let candidates = neocomplcache#complete#_get_words(\n        \\ neocomplcache.complete_results,\n        \\ neocomplcache.complete_pos, a:base)\n\n  let neocomplcache.candidates = candidates\n  let neocomplcache.complete_str = a:base\n\n  return candidates\nendfunction\"}}}\n\nfunction! neocomplcache#complete#unite_complete(findstart, base) \"{{{\n  \" Dummy.\n  return a:findstart ? -1 : []\nendfunction\"}}}\n\nfunction! neocomplcache#complete#auto_complete(findstart, base) \"{{{\n  return neocomplcache#complete#manual_complete(a:findstart, a:base)\nendfunction\"}}}\n\nfunction! neocomplcache#complete#_get_results(cur_text, ...) \"{{{\n  if g:neocomplcache_enable_debug\n    echomsg 'start get_complete_results'\n  endif\n\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  let neocomplcache.start_time = reltime()\n\n  let complete_results = call(\n        \\ 'neocomplcache#complete#_set_results_pos', [a:cur_text] + a:000)\n  call neocomplcache#complete#_set_results_words(complete_results)\n\n  return filter(complete_results,\n        \\ '!empty(v:val.neocomplcache__context.candidates)')\nendfunction\"}}}\n\nfunction! neocomplcache#complete#_get_complete_pos(sources) \"{{{\n  if empty(a:sources)\n    return -1\n  endif\n\n  return min([col('.')] + map(copy(a:sources),\n        \\ 'v:val.neocomplcache__context.complete_pos'))\nendfunction\"}}}\n\nfunction! neocomplcache#complete#_get_words(sources, complete_pos, complete_str) \"{{{\n  let frequencies = neocomplcache#variables#get_frequencies()\n  if exists('*neocomplcache#sources#buffer_complete#get_frequencies')\n    let frequencies = extend(copy(\n          \\ neocomplcache#sources#buffer_complete#get_frequencies()),\n          \\ frequencies)\n  endif\n\n  \" Append prefix.\n  let candidates = []\n  let len_words = 0\n  for source in sort(filter(copy(a:sources),\n        \\ '!empty(v:val.neocomplcache__context.candidates)'),\n        \\  's:compare_source_rank')\n    let context = source.neocomplcache__context\n    let words =\n          \\ type(context.candidates[0]) == type('') ?\n          \\ map(copy(context.candidates), \"{'word': v:val}\") :\n          \\ deepcopy(context.candidates)\n    let context.candidates = words\n\n    call neocomplcache#helper#call_hook(\n          \\ source, 'on_post_filter', {})\n\n    if context.complete_pos > a:complete_pos\n      let prefix = a:complete_str[: context.complete_pos\n            \\                            - a:complete_pos - 1]\n\n      for candidate in words\n        let candidate.word = prefix . candidate.word\n      endfor\n    endif\n\n    for candidate in words\n      if !has_key(candidate, 'menu') && has_key(source, 'mark')\n        \" Set default menu.\n        let candidate.menu = source.mark\n      endif\n      if has_key(frequencies, candidate.word)\n        let candidate.rank = frequencies[candidate.word]\n      endif\n    endfor\n\n    let words = neocomplcache#helper#call_filters(\n          \\ source.sorters, source, {})\n\n    if source.max_candidates > 0\n      let words = words[: len(source.max_candidates)-1]\n    endif\n\n    let words = neocomplcache#helper#call_filters(\n          \\ source.converters, source, {})\n\n    let candidates += words\n    let len_words += len(words)\n\n    if g:neocomplcache_max_list > 0\n          \\ && len_words > g:neocomplcache_max_list\n      break\n    endif\n\n    if neocomplcache#complete_check()\n      return []\n    endif\n  endfor\n\n  if g:neocomplcache_max_list > 0\n    let candidates = candidates[: g:neocomplcache_max_list]\n  endif\n\n  \" Check dup and set icase.\n  let icase = g:neocomplcache_enable_ignore_case &&\n        \\!(g:neocomplcache_enable_smart_case && a:complete_str =~ '\\u')\n        \\ && !neocomplcache#is_text_mode()\n  for candidate in candidates\n    if has_key(candidate, 'kind') && candidate.kind == ''\n      \" Remove kind key.\n      call remove(candidate, 'kind')\n    endif\n\n    let candidate.icase = icase\n  endfor\n\n  if neocomplcache#complete_check()\n    return []\n  endif\n\n  return candidates\nendfunction\"}}}\nfunction! neocomplcache#complete#_set_results_pos(cur_text, ...) \"{{{\n  \" Set context filetype.\n  call neocomplcache#context_filetype#set()\n\n  \" Initialize sources.\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  for source in filter(values(neocomplcache#variables#get_sources()),\n        \\ '!v:val.loaded && (empty(v:val.filetypes) ||\n        \\       get(v:val.filetypes,\n        \\             neocomplcache.context_filetype, 0))')\n    call neocomplcache#helper#call_hook(source, 'on_init', {})\n    let source.loaded = 1\n  endfor\n\n  let sources = filter(copy(get(a:000, 0,\n        \\ neocomplcache#helper#get_sources_list())), 'v:val.loaded')\n  if a:0 < 1\n    call filter(sources, '!neocomplcache#is_plugin_locked(v:key)')\n  endif\n\n  \" Try source completion. \"{{{\n  let complete_sources = []\n  for source in values(sources)\n    let context = source.neocomplcache__context\n    let context.input = a:cur_text\n    let context.complete_pos = -1\n    let context.complete_str = ''\n    let context.candidates = []\n\n    let pos = winsaveview()\n\n    try\n      let complete_pos =\n            \\ has_key(source, 'get_keyword_pos') ?\n            \\ source.get_keyword_pos(context.input) :\n            \\ has_key(source, 'get_complete_position') ?\n            \\ source.get_complete_position(context) :\n            \\ neocomplcache#match_word(context.input)[0]\n    catch\n      call neocomplcache#print_error(v:throwpoint)\n      call neocomplcache#print_error(v:exception)\n      call neocomplcache#print_error(\n            \\ 'Error occurred in source''s get_complete_position()!')\n      call neocomplcache#print_error(\n            \\ 'Source name is ' . source.name)\n      return complete_sources\n    finally\n      if winsaveview() != pos\n        call winrestview(pos)\n      endif\n    endtry\n\n    if complete_pos < 0\n      continue\n    endif\n\n    let complete_str = context.input[complete_pos :]\n    if neocomplcache#is_auto_complete() &&\n          \\ neocomplcache#util#mb_strlen(complete_str)\n          \\     < neocomplcache#get_completion_length(source.name)\n      \" Skip.\n      continue\n    endif\n\n    let context.complete_pos = complete_pos\n    let context.complete_str = complete_str\n    call add(complete_sources, source)\n  endfor\n  \"}}}\n\n  return complete_sources\nendfunction\"}}}\nfunction! neocomplcache#complete#_set_results_words(sources) \"{{{\n  \" Try source completion.\n  for source in a:sources\n    if neocomplcache#complete_check()\n      return\n    endif\n\n    \" Save options.\n    let ignorecase_save = &ignorecase\n\n    let context = source.neocomplcache__context\n\n    if neocomplcache#is_text_mode()\n      let &ignorecase = 1\n    elseif g:neocomplcache_enable_smart_case\n          \\ && context.complete_str =~ '\\u'\n      let &ignorecase = 0\n    else\n      let &ignorecase = g:neocomplcache_enable_ignore_case\n    endif\n\n    let pos = winsaveview()\n\n    try\n      let context.candidates = has_key(source, 'get_keyword_list') ?\n            \\ source.get_keyword_list(context.complete_str) :\n            \\  has_key(source, 'get_complete_words') ?\n            \\ source.get_complete_words(\n            \\   context.complete_pos, context.complete_str) :\n            \\ source.gather_candidates(context)\n    catch\n      call neocomplcache#print_error(v:throwpoint)\n      call neocomplcache#print_error(v:exception)\n      call neocomplcache#print_error(\n            \\ 'Source name is ' . source.name)\n      call neocomplcache#print_error(\n            \\ 'Error occurred in source''s gather_candidates()!')\n      return\n    finally\n      if winsaveview() != pos\n        call winrestview(pos)\n      endif\n    endtry\n\n    if g:neocomplcache_enable_debug\n      echomsg source.name\n    endif\n\n    let &ignorecase = ignorecase_save\n  endfor\nendfunction\"}}}\n\n\" Source rank order. \"{{{\nfunction! s:compare_source_rank(i1, i2)\n  return a:i2.rank - a:i1.rank\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/context_filetype.vim",
    "content": "\"=============================================================================\n\" FILE: context_filetype.vim\n\" AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 18 Apr 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#context_filetype#initialize() \"{{{\n  \" Initialize context filetype lists.\n  call neocomplcache#util#set_default(\n        \\ 'g:neocomplcache_context_filetype_lists', {})\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_context_filetype_lists',\n        \\ 'c,cpp', [\n        \\ {'filetype' : 'masm',\n        \\  'start' : '_*asm_*\\s\\+\\h\\w*', 'end' : '$'},\n        \\ {'filetype' : 'masm',\n        \\  'start' : '_*asm_*\\s*\\%(\\n\\s*\\)\\?{', 'end' : '}'},\n        \\ {'filetype' : 'gas',\n        \\  'start' : '_*asm_*\\s*\\%(_*volatile_*\\s*\\)\\?(', 'end' : ');'},\n        \\])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_context_filetype_lists',\n        \\ 'd', [\n        \\ {'filetype' : 'masm',\n        \\  'start' : 'asm\\s*\\%(\\n\\s*\\)\\?{', 'end' : '}'},\n        \\])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_context_filetype_lists',\n        \\ 'perl6', [\n        \\ {'filetype' : 'pir', 'start' : 'Q:PIR\\s*{', 'end' : '}'},\n        \\])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_context_filetype_lists',\n        \\ 'vimshell', [\n        \\ {'filetype' : 'vim',\n        \\  'start' : 'vexe \\([''\"]\\)', 'end' : '\\\\\\@<!\\1'},\n        \\ {'filetype' : 'vim', 'start' : ' :\\w*', 'end' : '\\n'},\n        \\ {'filetype' : 'vim', 'start' : ' vexe\\s\\+', 'end' : '\\n'},\n        \\])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_context_filetype_lists',\n        \\ 'eruby', [\n        \\ {'filetype' : 'ruby', 'start' : '<%[=#]\\?', 'end' : '%>'},\n        \\])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_context_filetype_lists',\n        \\ 'vim', [\n        \\ {'filetype' : 'python',\n        \\  'start' : '^\\s*py\\%[thon\\]3\\? <<\\s*\\(\\h\\w*\\)', 'end' : '^\\1'},\n        \\ {'filetype' : 'ruby',\n        \\  'start' : '^\\s*rub\\%[y\\] <<\\s*\\(\\h\\w*\\)', 'end' : '^\\1'},\n        \\ {'filetype' : 'lua',\n        \\  'start' : '^\\s*lua <<\\s*\\(\\h\\w*\\)', 'end' : '^\\1'},\n        \\])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_context_filetype_lists',\n        \\ 'html,xhtml', [\n        \\ {'filetype' : 'javascript', 'start' :\n        \\'<script\\%( [^>]*\\)\\? type=\"text/javascript\"\\%( [^>]*\\)\\?>',\n        \\  'end' : '</script>'},\n        \\ {'filetype' : 'coffee', 'start' :\n        \\'<script\\%( [^>]*\\)\\? type=\"text/coffeescript\"\\%( [^>]*\\)\\?>',\n        \\  'end' : '</script>'},\n        \\ {'filetype' : 'css', 'start' :\n        \\'<style\\%( [^>]*\\)\\? type=\"text/css\"\\%( [^>]*\\)\\?>',\n        \\  'end' : '</style>'},\n        \\])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_context_filetype_lists',\n        \\ 'python', [\n        \\ {'filetype' : 'vim',\n        \\  'start' : 'vim.command\\s*(\\([''\"]\\)', 'end' : '\\\\\\@<!\\1\\s*)'},\n        \\ {'filetype' : 'vim',\n        \\  'start' : 'vim.eval\\s*(\\([''\"]\\)', 'end' : '\\\\\\@<!\\1\\s*)'},\n        \\])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_context_filetype_lists',\n        \\ 'help', [\n        \\ {'filetype' : 'vim', 'start' : '^>', 'end' : '^<'},\n        \\])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_context_filetype_lists',\n        \\ 'nyaos,int-nyaos', [\n        \\ {'filetype' : 'lua',\n        \\  'start' : '\\<lua_e\\s\\+\\([\"'']\\)', 'end' : '^\\1'},\n        \\])\nendfunction\"}}}\n\nfunction! neocomplcache#context_filetype#set() \"{{{\n  let old_filetype = neocomplcache#get_current_neocomplcache().filetype\n  if old_filetype == ''\n    let old_filetype = &filetype\n  endif\n  if old_filetype == ''\n    let old_filetype = 'nothing'\n  endif\n\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n\n  let dup_check = {}\n  while 1\n    let new_filetype = neocomplcache#context_filetype#get(old_filetype)\n\n    \" Check filetype root.\n    if get(dup_check, old_filetype, '') ==# new_filetype\n      let neocomplcache.context_filetype = old_filetype\n      break\n    endif\n\n    \" Save old -> new filetype graph.\n    let dup_check[old_filetype] = new_filetype\n    let old_filetype = new_filetype\n  endwhile\n\n  return neocomplcache.context_filetype\nendfunction\"}}}\nfunction! neocomplcache#context_filetype#get(filetype) \"{{{\n  \" Default.\n  let filetype = a:filetype\n  if filetype == ''\n    let filetype = 'nothing'\n  endif\n\n  \" Default range.\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n\n  let pos = [line('.'), col('.')]\n  for include in get(g:neocomplcache_context_filetype_lists, filetype, [])\n    let start_backward = searchpos(include.start, 'bneW')\n\n    \" Check pos > start.\n    if start_backward[0] == 0 || s:compare_pos(start_backward, pos) > 0\n      continue\n    endif\n\n    let end_pattern = include.end\n    if end_pattern =~ '\\\\1'\n      let match_list = matchlist(getline(start_backward[0]), include.start)\n      let end_pattern = substitute(end_pattern, '\\\\1', '\\=match_list[1]', 'g')\n    endif\n    let end_forward = searchpos(end_pattern, 'nW')\n    if end_forward[0] == 0\n      let end_forward = [line('$'), len(getline('$'))+1]\n    endif\n\n    \" Check end > pos.\n    if s:compare_pos(pos, end_forward) > 0\n      continue\n    endif\n\n    let end_backward = searchpos(end_pattern, 'bnW')\n\n    \" Check start <= end.\n    if s:compare_pos(start_backward, end_backward) < 0\n      continue\n    endif\n\n    if start_backward[1] == len(getline(start_backward[0]))\n      \" Next line.\n      let start_backward[0] += 1\n      let start_backward[1] = 1\n    endif\n    if end_forward[1] == 1\n      \" Previous line.\n      let end_forward[0] -= 1\n      let end_forward[1] = len(getline(end_forward[0]))\n    endif\n\n    let neocomplcache.context_filetype_range =\n          \\ [ start_backward, end_forward ]\n    return include.filetype\n  endfor\n\n  return filetype\nendfunction\"}}}\n\nfunction! s:compare_pos(i1, i2)\n  return a:i1[0] == a:i2[0] ? a:i1[1] - a:i2[1] : a:i1[0] - a:i2[0]\nendfunction\"\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/filters/converter_abbr.vim",
    "content": "\"=============================================================================\n\" FILE: converter_abbr.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 06 Jun 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#filters#converter_abbr#define() \"{{{\n  return s:converter\nendfunction\"}}}\n\nlet s:converter = {\n      \\ 'name' : 'converter_abbr',\n      \\ 'description' : 'abbr converter',\n      \\}\n\nfunction! s:converter.filter(context) \"{{{\n  if g:neocomplcache_max_keyword_width < 0\n    return a:context.candidates\n  endif\n\n  for candidate in a:context.candidates\n    let abbr = get(candidate, 'abbr', candidate.word)\n    if len(abbr) > g:neocomplcache_max_keyword_width\n      let len = neocomplcache#util#wcswidth(abbr)\n\n      if len > g:neocomplcache_max_keyword_width\n        let candidate.abbr = neocomplcache#util#truncate_smart(\n              \\ abbr, g:neocomplcache_max_keyword_width,\n              \\ g:neocomplcache_max_keyword_width/2, '..')\n      endif\n    endif\n  endfor\n\n  return a:context.candidates\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/filters/converter_case.vim",
    "content": "\"=============================================================================\n\" FILE: converter_case.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 02 Jun 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#filters#converter_case#define() \"{{{\n  return s:converter\nendfunction\"}}}\n\nlet s:converter = {\n      \\ 'name' : 'converter_case',\n      \\ 'description' : 'case converter',\n      \\}\n\nfunction! s:converter.filter(context) \"{{{\n  if !neocomplcache#is_text_mode() && !neocomplcache#within_comment()\n    return a:context.candidates\n  endif\n\n  let convert_candidates = filter(copy(a:context.candidates),\n        \\ \"get(v:val, 'neocomplcache__convertable', 1)\n        \\  && v:val.word =~ '^[a-zA-Z0-9_''-]\\\\+$'\")\n\n  if a:context.complete_str =~ '^\\l\\+$'\n    for candidate in convert_candidates\n      let candidate.word = tolower(candidate.word)\n      if has_key(candidate, 'abbr')\n        let candidate.abbr = tolower(candidate.abbr)\n      endif\n    endfor\n  elseif a:context.complete_str =~ '^\\u\\+$'\n    for candidate in convert_candidates\n      let candidate.word = toupper(candidate.word)\n      if has_key(candidate, 'abbr')\n        let candidate.abbr = toupper(candidate.abbr)\n      endif\n    endfor\n  elseif a:context.complete_str =~ '^\\u\\l\\+$'\n    for candidate in convert_candidates\n      let candidate.word = toupper(candidate.word[0]).\n            \\ tolower(candidate.word[1:])\n      if has_key(candidate, 'abbr')\n        let candidate.abbr = toupper(candidate.abbr[0]).\n              \\ tolower(candidate.abbr[1:])\n      endif\n    endfor\n  endif\n\n  return a:context.candidates\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/filters/converter_delimiter.vim",
    "content": "\"=============================================================================\n\" FILE: converter_delimiter.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 06 Jun 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#filters#converter_delimiter#define() \"{{{\n  return s:converter\nendfunction\"}}}\n\nlet s:converter = {\n      \\ 'name' : 'converter_delimiter',\n      \\ 'description' : 'delimiter converter',\n      \\}\n\nfunction! s:converter.filter(context) \"{{{\n  if g:neocomplcache_max_keyword_width < 0\n    return a:context.candidates\n  endif\n\n  \" Delimiter check.\n  let filetype = neocomplcache#get_context_filetype()\n\n  let next_keyword = neocomplcache#filters#\n        \\converter_remove_next_keyword#get_next_keyword(a:context.source_name)\n  for delimiter in ['/'] +\n        \\ get(g:neocomplcache_delimiter_patterns, filetype, [])\n    \" Count match.\n    let delim_cnt = 0\n    let matchend = matchend(a:context.complete_str, delimiter)\n    while matchend >= 0\n      let matchend = matchend(a:context.complete_str,\n            \\ delimiter, matchend)\n      let delim_cnt += 1\n    endwhile\n\n    for candidate in a:context.candidates\n      let split_list = split(candidate.word, delimiter.'\\ze.', 1)\n      if len(split_list) > 1\n        let delimiter_sub = substitute(\n              \\ delimiter, '\\\\\\([.^$]\\)', '\\1', 'g')\n        let candidate.word = join(split_list[ : delim_cnt], delimiter_sub)\n        let candidate.abbr = join(\n              \\ split(get(candidate, 'abbr', candidate.word),\n              \\             delimiter.'\\ze.', 1)[ : delim_cnt],\n              \\ delimiter_sub)\n\n        if g:neocomplcache_max_keyword_width >= 0\n              \\ && len(candidate.abbr) > g:neocomplcache_max_keyword_width\n          let candidate.abbr = substitute(candidate.abbr,\n                \\ '\\(\\h\\)\\w*'.delimiter, '\\1'.delimiter_sub, 'g')\n        endif\n        if delim_cnt+1 < len(split_list)\n          let candidate.abbr .= delimiter_sub . '~'\n          let candidate.dup = 0\n\n          if g:neocomplcache_enable_auto_delimiter && next_keyword == ''\n            let candidate.word .= delimiter_sub\n          endif\n        endif\n      endif\n    endfor\n  endfor\n\n  return a:context.candidates\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/filters/converter_nothing.vim",
    "content": "\"=============================================================================\n\" FILE: converter_nothing.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 24 Apr 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#filters#converter_nothing#define() \"{{{\n  return s:converter\nendfunction\"}}}\n\nlet s:converter = {\n      \\ 'name' : 'converter_nothing',\n      \\ 'description' : 'nothing converter',\n      \\}\n\nfunction! s:converter.filter(context) \"{{{\n  \" Nothing.\n  return a:context.candidates\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/filters/converter_remove_next_keyword.vim",
    "content": "\"=============================================================================\n\" FILE: converter_remove_next_keyword.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 31 May 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#filters#converter_remove_next_keyword#define() \"{{{\n  return s:converter\nendfunction\"}}}\n\nlet s:converter = {\n      \\ 'name' : 'converter_remove_next_keyword',\n      \\ 'description' : 'remove next keyword converter',\n      \\}\n\nfunction! s:converter.filter(context) \"{{{\n  \" Remove next keyword.\n  let next_keyword = neocomplcache#filters#\n        \\converter_remove_next_keyword#get_next_keyword(a:context.source_name)\n  if next_keyword == ''\n    return a:context.candidates\n  endif\n\n  let next_keyword = substitute(\n        \\ substitute(escape(next_keyword,\n        \\ '~\" \\.^$*[]'), \"'\", \"''\", 'g'), ')$', '', '').'$'\n\n  \" No ignorecase.\n  let ignorecase_save = &ignorecase\n  let &ignorecase = 0\n  try\n    for r in a:context.candidates\n      let pos = match(r.word, next_keyword)\n      if pos >= 0\n        if !has_key(r, 'abbr')\n          let r.abbr = r.word\n        endif\n\n        let r.word = r.word[: pos-1]\n      endif\n    endfor\n  finally\n    let &ignorecase = ignorecase_save\n  endtry\n\n  return a:context.candidates\nendfunction\"}}}\n\nfunction! neocomplcache#filters#converter_remove_next_keyword#get_next_keyword(source_name) \"{{{\n  let pattern = '^\\%(' .\n        \\ ((a:source_name ==# 'filename_complete' ||\n        \\  a:source_name ==# 'filename_complete') ?\n        \\   neocomplcache#get_next_keyword_pattern('filename') :\n        \\   neocomplcache#get_next_keyword_pattern()) . '\\m\\)'\n\n  let next_keyword = matchstr('a'.\n        \\ getline('.')[len(neocomplcache#get_cur_text(1)) :], pattern)[1:]\n  return next_keyword\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/filters/matcher_fuzzy.vim",
    "content": "\"=============================================================================\n\" FILE: matcher_fuzzy.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 24 Apr 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#filters#matcher_fuzzy#define() \"{{{\n  return s:matcher\nendfunction\"}}}\n\nlet s:matcher = {\n      \\ 'name' : 'matcher_fuzzy',\n      \\ 'description' : 'fuzzy matcher',\n      \\}\n\nfunction! s:matcher.filter(context) \"{{{\n  \" Todo:\n  return []\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/filters/matcher_head.vim",
    "content": "\"=============================================================================\n\" FILE: matcher_head.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 25 Apr 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#filters#matcher_head#define() \"{{{\n  return s:matcher\nendfunction\"}}}\n\nlet s:matcher = {\n      \\ 'name' : 'matcher_head',\n      \\ 'description' : 'head matcher',\n      \\}\n\nfunction! s:matcher.filter(context) \"{{{\n  \" Todo:\n  return []\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/filters/matcher_old.vim",
    "content": "\"=============================================================================\n\" FILE: matcher_old.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 25 Apr 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#filters#matcher_old#define() \"{{{\n  return s:matcher\nendfunction\"}}}\n\nlet s:matcher = {\n      \\ 'name' : 'matcher_old',\n      \\ 'description' : 'old matcher',\n      \\}\n\nfunction! s:matcher.filter(candidates, context) \"{{{\n  if a:context.input == ''\n    return neocomplcache#util#filter_matcher(\n          \\ a:candidates, '', a:context)\n  endif\n\n  let candidates = a:candidates\n  for input in a:context.input_list\n    let candidates = neocomplcache#filters#matcher_old#glob_matcher(\n          \\ candidates, input, a:context)\n  endfor\n\n  return candidates\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/filters/sorter_length.vim",
    "content": "\"=============================================================================\n\" FILE: sorter_length.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 09 May 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#filters#sorter_length#define() \"{{{\n  return s:sorter\nendfunction\"}}}\n\nlet s:sorter = {\n      \\ 'name' : 'sorter_length',\n      \\ 'description' : 'sort by length order',\n      \\}\n\nfunction! s:sorter.filter(context) \"{{{\n  return sort(a:context.candidates, 's:compare')\nendfunction\"}}}\n\nfunction! s:compare(i1, i2)\n  let diff = len(a:i1.word) - len(a:i2.word)\n  if !diff\n    let diff = (a:i1.word ># a:i2.word) ? 1 : -1\n  endif\n  return diff\nendfunction\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/filters/sorter_nothing.vim",
    "content": "\"=============================================================================\n\" FILE: sorter_nothing.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 24 Apr 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#filters#sorter_nothing#define() \"{{{\n  return s:sorter\nendfunction\"}}}\n\nlet s:sorter = {\n      \\ 'name' : 'sorter_nothing',\n      \\ 'description' : 'nothing sorter',\n      \\}\n\nfunction! s:sorter.filter(context) \"{{{\n  \" Nothing.\n  return a:candidates\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/filters/sorter_rank.vim",
    "content": "\"=============================================================================\n\" FILE: sorter_rank.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 09 May 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#filters#sorter_rank#define() \"{{{\n  return s:sorter\nendfunction\"}}}\n\nlet s:sorter = {\n      \\ 'name' : 'sorter_rank',\n      \\ 'description' : 'sort by matched rank order',\n      \\}\n\nfunction! s:sorter.filter(context) \"{{{\n  return sort(a:context.candidates, 's:compare')\nendfunction\"}}}\n\nfunction! s:compare(i1, i2)\n  let diff = (get(a:i2, 'rank', 0) - get(a:i1, 'rank', 0))\n  return (diff != 0) ? diff : (a:i1.word ># a:i2.word) ? 1 : -1\nendfunction\"\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/filters.vim",
    "content": "\"=============================================================================\n\" FILE: filters.vim\n\" AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 28 May 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#filters#keyword_filter(list, complete_str) \"{{{\n  let complete_str = a:complete_str\n\n  if g:neocomplcache_enable_debug\n    echomsg len(a:list)\n  endif\n\n  \" Delimiter check.\n  let filetype = neocomplcache#get_context_filetype()\n  for delimiter in get(g:neocomplcache_delimiter_patterns, filetype, [])\n    let complete_str = substitute(complete_str,\n          \\ delimiter, '*' . delimiter, 'g')\n  endfor\n\n  if complete_str == '' ||\n        \\ &l:completefunc ==# 'neocomplcache#complete#unite_complete' ||\n        \\ empty(a:list)\n    return a:list\n  elseif neocomplcache#check_match_filter(complete_str)\n    \" Match filter.\n    let word = type(a:list[0]) == type('') ? 'v:val' : 'v:val.word'\n\n    let expr = printf('%s =~ %s',\n          \\ word, string('^' .\n          \\ neocomplcache#keyword_escape(complete_str)))\n    if neocomplcache#is_auto_complete()\n      \" Don't complete cursor word.\n      let expr .= printf(' && %s !=? a:complete_str', word)\n    endif\n\n    \" Check head character.\n    if complete_str[0] != '\\' && complete_str[0] != '.'\n      let expr = word.'[0] == ' .\n            \\ string(complete_str[0]) .' && ' . expr\n    endif\n\n    call neocomplcache#print_debug(expr)\n\n    return filter(a:list, expr)\n  else\n    \" Use fast filter.\n    return s:head_filter(a:list, complete_str)\n  endif\nendfunction\"}}}\n\nfunction! s:head_filter(list, complete_str) \"{{{\n  let word = type(a:list[0]) == type('') ? 'v:val' : 'v:val.word'\n\n  if &ignorecase\n   let expr = printf('!stridx(tolower(%s), %s)',\n          \\ word, string(tolower(a:complete_str)))\n  else\n    let expr = printf('!stridx(%s, %s)',\n          \\ word, string(a:complete_str))\n  endif\n\n  if neocomplcache#is_auto_complete()\n    \" Don't complete cursor word.\n    let expr .= printf(' && %s !=? a:complete_str', word)\n  endif\n\n  return filter(a:list, expr)\nendfunction\"}}}\n\nfunction! neocomplcache#filters#dictionary_filter(dictionary, complete_str) \"{{{\n  if empty(a:dictionary)\n    return []\n  endif\n\n  let completion_length = 2\n  if len(a:complete_str) < completion_length ||\n        \\ neocomplcache#check_completion_length_match(\n        \\         a:complete_str, completion_length) ||\n        \\ &l:completefunc ==# 'neocomplcache#cunite_complete'\n    return neocomplcache#keyword_filter(\n          \\ neocomplcache#unpack_dictionary(a:dictionary), a:complete_str)\n  endif\n\n  let key = tolower(a:complete_str[: completion_length-1])\n\n  if !has_key(a:dictionary, key)\n    return []\n  endif\n\n  let list = a:dictionary[key]\n  if type(list) == type({})\n    \" Convert dictionary dictionary.\n    unlet list\n    let list = values(a:dictionary[key])\n  else\n    let list = copy(list)\n  endif\n\n  return (len(a:complete_str) == completion_length && &ignorecase\n        \\ && !neocomplcache#check_completion_length_match(\n        \\   a:complete_str, completion_length)) ?\n        \\ list : neocomplcache#keyword_filter(list, a:complete_str)\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/handler.vim",
    "content": "\"=============================================================================\n\" FILE: handler.vim\n\" AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 02 Oct 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#handler#_on_moved_i() \"{{{\n  \" Get cursor word.\n  let cur_text = neocomplcache#get_cur_text(1)\n\n  call s:close_preview_window()\nendfunction\"}}}\nfunction! neocomplcache#handler#_on_insert_enter() \"{{{\n  if &l:foldmethod ==# 'expr' && foldlevel('.') != 0\n    foldopen\n  endif\nendfunction\"}}}\nfunction! neocomplcache#handler#_on_insert_leave() \"{{{\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n\n  let neocomplcache.cur_text = ''\n  let neocomplcache.old_cur_text = ''\n\n  call s:close_preview_window()\nendfunction\"}}}\nfunction! neocomplcache#handler#_on_write_post() \"{{{\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n\n  \" Restore foldinfo.\n  for winnr in filter(range(1, winnr('$')),\n        \\ \"!empty(getwinvar(v:val, 'neocomplcache_foldinfo'))\")\n    let neocomplcache_foldinfo =\n          \\ getwinvar(winnr, 'neocomplcache_foldinfo')\n    call setwinvar(winnr, '&foldmethod',\n          \\ neocomplcache_foldinfo.foldmethod)\n    call setwinvar(winnr, '&foldexpr',\n          \\ neocomplcache_foldinfo.foldexpr)\n    call setwinvar(winnr,\n          \\ 'neocomplcache_foldinfo', {})\n  endfor\nendfunction\"}}}\nfunction! neocomplcache#handler#_on_complete_done() \"{{{\n  \" Get cursor word.\n  let [_, candidate] = neocomplcache#match_word(\n        \\ neocomplcache#get_cur_text(1))\n  if candidate == ''\n    return\n  endif\n\n  let frequencies = neocomplcache#variables#get_frequencies()\n  if !has_key(frequencies, candidate)\n    let frequencies[candidate] = 20\n  else\n    let frequencies[candidate] += 20\n  endif\nendfunction\"}}}\nfunction! neocomplcache#handler#_change_update_time() \"{{{\n  if &updatetime > g:neocomplcache_cursor_hold_i_time\n    \" Change updatetime.\n    let neocomplcache = neocomplcache#get_current_neocomplcache()\n    let neocomplcache.update_time_save = &updatetime\n    let &updatetime = g:neocomplcache_cursor_hold_i_time\n  endif\nendfunction\"}}}\nfunction! neocomplcache#handler#_restore_update_time() \"{{{\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  if &updatetime < neocomplcache.update_time_save\n    \" Restore updatetime.\n    let &updatetime = neocomplcache.update_time_save\n  endif\nendfunction\"}}}\n\nfunction! neocomplcache#handler#_do_auto_complete(event) \"{{{\n  if s:check_in_do_auto_complete()\n    return\n  endif\n\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  let neocomplcache.skipped = 0\n  let neocomplcache.event = a:event\n\n  let cur_text = neocomplcache#get_cur_text(1)\n\n  if g:neocomplcache_enable_debug\n    echomsg 'cur_text = ' . cur_text\n  endif\n\n  \" Prevent infinity loop.\n  if s:is_skip_auto_complete(cur_text)\n    \" Make cache.\n    if cur_text =~ '^\\s*$\\|\\s\\+$'\n      if neocomplcache#is_enabled_source('buffer_complete')\n        \" Caching current cache line.\n        call neocomplcache#sources#buffer_complete#caching_current_line()\n      endif\n      if neocomplcache#is_enabled_source('member_complete')\n        \" Caching current cache line.\n        call neocomplcache#sources#member_complete#caching_current_line()\n      endif\n    endif\n\n    if g:neocomplcache_enable_debug\n      echomsg 'Skipped.'\n    endif\n\n    call neocomplcache#helper#clear_result()\n    return\n  endif\n\n  let neocomplcache.old_cur_text = cur_text\n\n  if neocomplcache#helper#is_omni_complete(cur_text)\n    call feedkeys(\"\\<Plug>(neocomplcache_start_omni_complete)\")\n    return\n  endif\n\n  \" Check multibyte input or eskk.\n  if neocomplcache#is_eskk_enabled()\n        \\ || neocomplcache#is_multibyte_input(cur_text)\n    if g:neocomplcache_enable_debug\n      echomsg 'Skipped.'\n    endif\n\n    return\n  endif\n\n  \" Check complete position.\n  let complete_results = neocomplcache#complete#_set_results_pos(cur_text)\n  if empty(complete_results)\n    if g:neocomplcache_enable_debug\n      echomsg 'Skipped.'\n    endif\n\n    return\n  endif\n\n  let &l:completefunc = 'neocomplcache#complete#auto_complete'\n\n  if neocomplcache#is_prefetch()\n    \" Do prefetch.\n    let neocomplcache.complete_results =\n          \\ neocomplcache#complete#_get_results(cur_text)\n\n    if empty(neocomplcache.complete_results)\n      if g:neocomplcache_enable_debug\n        echomsg 'Skipped.'\n      endif\n\n      \" Skip completion.\n      let &l:completefunc = 'neocomplcache#complete#manual_complete'\n      call neocomplcache#helper#clear_result()\n      return\n    endif\n  endif\n\n  call s:save_foldinfo()\n\n  \" Set options.\n  set completeopt-=menu\n  set completeopt-=longest\n  set completeopt+=menuone\n\n  \" Start auto complete.\n  call feedkeys(&l:formatoptions !~ 'a' ?\n        \\ \"\\<Plug>(neocomplcache_start_auto_complete)\":\n        \\ \"\\<Plug>(neocomplcache_start_auto_complete_no_select)\")\nendfunction\"}}}\n\nfunction! s:save_foldinfo() \"{{{\n  \" Save foldinfo.\n  let winnrs = filter(range(1, winnr('$')),\n        \\ \"winbufnr(v:val) == bufnr('%')\")\n\n  \" Note: for foldmethod=expr or syntax.\n  call filter(winnrs, \"\n        \\  (getwinvar(v:val, '&foldmethod') ==# 'expr' ||\n        \\   getwinvar(v:val, '&foldmethod') ==# 'syntax') &&\n        \\  getwinvar(v:val, '&modifiable')\")\n  for winnr in winnrs\n    call setwinvar(winnr, 'neocomplcache_foldinfo', {\n          \\ 'foldmethod' : getwinvar(winnr, '&foldmethod'),\n          \\ 'foldexpr'   : getwinvar(winnr, '&foldexpr')\n          \\ })\n    call setwinvar(winnr, '&foldmethod', 'manual')\n    call setwinvar(winnr, '&foldexpr', 0)\n  endfor\nendfunction\"}}}\nfunction! s:check_in_do_auto_complete() \"{{{\n  if neocomplcache#is_locked()\n    return 1\n  endif\n\n  if &l:completefunc == ''\n    let &l:completefunc = 'neocomplcache#complete#manual_complete'\n  endif\n\n  \" Detect completefunc.\n  if &l:completefunc !~# '^neocomplcache#'\n    if &l:buftype =~ 'nofile'\n      return 1\n    endif\n\n    if g:neocomplcache_force_overwrite_completefunc\n      \" Set completefunc.\n      let &l:completefunc = 'neocomplcache#complete#manual_complete'\n    else\n      \" Warning.\n      redir => output\n      99verbose setl completefunc?\n      redir END\n      call neocomplcache#print_error(output)\n      call neocomplcache#print_error(\n            \\ 'Another plugin set completefunc! Disabled neocomplcache.')\n      NeoComplCacheLock\n      return 1\n    endif\n  endif\n\n  \" Detect AutoComplPop.\n  if exists('g:acp_enableAtStartup') && g:acp_enableAtStartup\n    call neocomplcache#print_error(\n          \\ 'Detected enabled AutoComplPop! Disabled neocomplcache.')\n    NeoComplCacheLock\n    return 1\n  endif\nendfunction\"}}}\nfunction! s:is_skip_auto_complete(cur_text) \"{{{\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n\n  if a:cur_text =~ '^\\s*$\\|\\s\\+$'\n        \\ || a:cur_text == neocomplcache.old_cur_text\n        \\ || (g:neocomplcache_lock_iminsert && &l:iminsert)\n        \\ || (&l:formatoptions =~# '[tc]' && &l:textwidth > 0\n        \\     && neocomplcache#util#wcswidth(a:cur_text) >= &l:textwidth)\n    return 1\n  endif\n\n  if !neocomplcache.skip_next_complete\n    return 0\n  endif\n\n  \" Check delimiter pattern.\n  let is_delimiter = 0\n  let filetype = neocomplcache#get_context_filetype()\n\n  for delimiter in ['/', '\\.'] +\n        \\ get(g:neocomplcache_delimiter_patterns, filetype, [])\n    if a:cur_text =~ delimiter . '$'\n      let is_delimiter = 1\n      break\n    endif\n  endfor\n\n  if is_delimiter && neocomplcache.skip_next_complete == 2\n    let neocomplcache.skip_next_complete = 0\n    return 0\n  endif\n\n  let neocomplcache.skip_next_complete = 0\n  let neocomplcache.cur_text = ''\n  let neocomplcache.old_cur_text = ''\n\n  return 1\nendfunction\"}}}\nfunction! s:close_preview_window() \"{{{\n  if g:neocomplcache_enable_auto_close_preview &&\n        \\ bufname('%') !=# '[Command Line]' &&\n        \\ winnr('$') != 1 && !&l:previewwindow\n    \" Close preview window.\n    pclose!\n  endif\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/helper.vim",
    "content": "\"=============================================================================\n\" FILE: helper.vim\n\" AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 20 Aug 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#helper#get_cur_text() \"{{{\n  let cur_text =\n        \\ (mode() ==# 'i' ? (col('.')-1) : col('.')) >= len(getline('.')) ?\n        \\      getline('.') :\n        \\      matchstr(getline('.'),\n        \\         '^.*\\%' . col('.') . 'c' . (mode() ==# 'i' ? '' : '.'))\n\n  if cur_text =~ '^.\\{-}\\ze\\S\\+$'\n    let complete_str = matchstr(cur_text, '\\S\\+$')\n    let cur_text = matchstr(cur_text, '^.\\{-}\\ze\\S\\+$')\n  else\n    let complete_str = ''\n  endif\n\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  if neocomplcache.event ==# 'InsertCharPre'\n    let complete_str .= v:char\n  endif\n\n  let filetype = neocomplcache#get_context_filetype()\n  let wildcard = get(g:neocomplcache_wildcard_characters, filetype,\n        \\ get(g:neocomplcache_wildcard_characters, '_', '*'))\n  if g:neocomplcache_enable_wildcard &&\n        \\ wildcard !=# '*' && len(wildcard) == 1\n    \" Substitute wildcard character.\n    while 1\n      let index = stridx(complete_str, wildcard)\n      if index <= 0\n        break\n      endif\n\n      let complete_str = complete_str[: index-1]\n            \\ . '*' . complete_str[index+1: ]\n    endwhile\n  endif\n\n  let neocomplcache.cur_text = cur_text . complete_str\n\n  \" Save cur_text.\n  return neocomplcache.cur_text\nendfunction\"}}}\n\nfunction! neocomplcache#helper#keyword_escape(complete_str) \"{{{\n  \" Fuzzy completion.\n  let keyword_len = len(a:complete_str)\n  let keyword_escape = s:keyword_escape(a:complete_str)\n  if g:neocomplcache_enable_fuzzy_completion\n        \\ && (g:neocomplcache_fuzzy_completion_start_length\n        \\          <= keyword_len && keyword_len < 20)\n    let pattern = keyword_len >= 8 ?\n          \\ '\\0\\\\w*' : '\\\\%(\\0\\\\w*\\\\|\\U\\0\\E\\\\l*\\\\)'\n\n    let start = g:neocomplcache_fuzzy_completion_start_length\n    if start <= 1\n      let keyword_escape =\n            \\ substitute(keyword_escape, '\\w', pattern, 'g')\n    elseif keyword_len < 8\n      let keyword_escape = keyword_escape[: start - 2]\n            \\ . substitute(keyword_escape[start-1 :], '\\w', pattern, 'g')\n    else\n      let keyword_escape = keyword_escape[: 3] .\n            \\ substitute(keyword_escape[4:12], '\\w',\n            \\   pattern, 'g') . keyword_escape[13:]\n    endif\n  else\n    \" Underbar completion. \"{{{\n    if g:neocomplcache_enable_underbar_completion\n          \\ && keyword_escape =~ '[^_]_\\|^_'\n      let keyword_escape = substitute(keyword_escape,\n            \\ '\\%(^\\|[^_]\\)\\zs_', '[^_]*_', 'g')\n    endif\n    if g:neocomplcache_enable_underbar_completion\n          \\ && '-' =~ '\\k' && keyword_escape =~ '[^-]-'\n      let keyword_escape = substitute(keyword_escape,\n            \\ '[^-]\\zs-', '[^-]*-', 'g')\n    endif\n    \"}}}\n    \" Camel case completion. \"{{{\n    if g:neocomplcache_enable_camel_case_completion\n          \\ && keyword_escape =~ '\\u\\?\\U*'\n      let keyword_escape =\n            \\ substitute(keyword_escape,\n            \\ '\\u\\?\\zs\\U*',\n            \\ '\\\\%(\\0\\\\l*\\\\|\\U\\0\\E\\\\u*_\\\\?\\\\)', 'g')\n    endif\n    \"}}}\n  endif\n\n  call neocomplcache#print_debug(keyword_escape)\n  return keyword_escape\nendfunction\"}}}\n\nfunction! neocomplcache#helper#is_omni_complete(cur_text) \"{{{\n  \" Check eskk complete length.\n  if neocomplcache#is_eskk_enabled()\n        \\ && exists('g:eskk#start_completion_length')\n    if !neocomplcache#is_eskk_convertion(a:cur_text)\n          \\ || !neocomplcache#is_multibyte_input(a:cur_text)\n      return 0\n    endif\n\n    let complete_pos = call(&l:omnifunc, [1, ''])\n    let complete_str = a:cur_text[complete_pos :]\n    return neocomplcache#util#mb_strlen(complete_str) >=\n          \\ g:eskk#start_completion_length\n  endif\n\n  let filetype = neocomplcache#get_context_filetype()\n  let omnifunc = get(g:neocomplcache_omni_functions,\n        \\ filetype, &l:omnifunc)\n\n  if neocomplcache#check_invalid_omnifunc(omnifunc)\n    return 0\n  endif\n\n  let syn_name = neocomplcache#helper#get_syn_name(1)\n  if syn_name ==# 'Comment' || syn_name ==# 'String'\n    \" Skip omni_complete in string literal.\n    return 0\n  endif\n\n  if has_key(g:neocomplcache_force_omni_patterns, omnifunc)\n    let pattern = g:neocomplcache_force_omni_patterns[omnifunc]\n  elseif filetype != '' &&\n        \\ get(g:neocomplcache_force_omni_patterns, filetype, '') != ''\n    let pattern = g:neocomplcache_force_omni_patterns[filetype]\n  else\n    return 0\n  endif\n\n  if a:cur_text !~# '\\%(' . pattern . '\\m\\)$'\n    return 0\n  endif\n\n  \" Set omnifunc.\n  let &omnifunc = omnifunc\n\n  return 1\nendfunction\"}}}\n\nfunction! neocomplcache#helper#is_enabled_source(source_name) \"{{{\n  if neocomplcache#is_disabled_source(a:source_name)\n    return 0\n  endif\n\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  if !has_key(neocomplcache, 'sources')\n    call neocomplcache#helper#get_sources_list()\n  endif\n\n  return index(keys(neocomplcache.sources), a:source_name) >= 0\nendfunction\"}}}\n\nfunction! neocomplcache#helper#get_source_filetypes(filetype) \"{{{\n  let filetype = (a:filetype == '') ? 'nothing' : a:filetype\n\n  let filetype_dict = {}\n\n  let filetypes = [filetype]\n  if filetype =~ '\\.'\n    if exists('g:neocomplcache_ignore_composite_filetype_lists')\n          \\ && has_key(g:neocomplcache_ignore_composite_filetype_lists, filetype)\n      let filetypes = [g:neocomplcache_ignore_composite_filetype_lists[filetype]]\n    else\n      \" Set composite filetype.\n      let filetypes += split(filetype, '\\.')\n    endif\n  endif\n\n  if exists('g:neocomplcache_same_filetype_lists')\n    for ft in copy(filetypes)\n      let filetypes += split(get(g:neocomplcache_same_filetype_lists, ft,\n            \\ get(g:neocomplcache_same_filetype_lists, '_', '')), ',')\n    endfor\n  endif\n\n  return neocomplcache#util#uniq(filetypes)\nendfunction\"}}}\n\nfunction! neocomplcache#helper#get_completion_length(plugin_name) \"{{{\n  \" Todo.\nendfunction\"}}}\n\nfunction! neocomplcache#helper#complete_check() \"{{{\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  if g:neocomplcache_enable_debug\n    echomsg split(reltimestr(reltime(neocomplcache.start_time)))[0]\n  endif\n  let ret = (!neocomplcache#is_prefetch() && complete_check())\n        \\ || (neocomplcache#is_auto_complete()\n        \\     && g:neocomplcache_skip_auto_completion_time != ''\n        \\     && split(reltimestr(reltime(neocomplcache.start_time)))[0] >\n        \\          g:neocomplcache_skip_auto_completion_time)\n  if ret\n    let neocomplcache = neocomplcache#get_current_neocomplcache()\n    let neocomplcache.skipped = 1\n\n    redraw\n    echo 'Skipped.'\n  endif\n\n  return ret\nendfunction\"}}}\n\nfunction! neocomplcache#helper#get_syn_name(is_trans) \"{{{\n  return len(getline('.')) < 200 ?\n        \\ synIDattr(synIDtrans(synID(line('.'), mode() ==# 'i' ?\n        \\          col('.')-1 : col('.'), a:is_trans)), 'name') : ''\nendfunction\"}}}\n\nfunction! neocomplcache#helper#match_word(cur_text, ...) \"{{{\n  let pattern = a:0 >= 1 ? a:1 : neocomplcache#get_keyword_pattern_end()\n\n  \" Check wildcard.\n  let complete_pos = s:match_wildcard(\n        \\ a:cur_text, pattern, match(a:cur_text, pattern))\n\n  let complete_str = (complete_pos >=0) ?\n        \\ a:cur_text[complete_pos :] : ''\n\n  return [complete_pos, complete_str]\nendfunction\"}}}\n\nfunction! neocomplcache#helper#filetype_complete(arglead, cmdline, cursorpos) \"{{{\n  \" Dup check.\n  let ret = {}\n  for item in map(\n        \\ split(globpath(&runtimepath, 'syntax/*.vim'), '\\n') +\n        \\ split(globpath(&runtimepath, 'indent/*.vim'), '\\n') +\n        \\ split(globpath(&runtimepath, 'ftplugin/*.vim'), '\\n')\n        \\ , 'fnamemodify(v:val, \":t:r\")')\n    if !has_key(ret, item) && item =~ '^'.a:arglead\n      let ret[item] = 1\n    endif\n  endfor\n\n  return sort(keys(ret))\nendfunction\"}}}\n\nfunction! neocomplcache#helper#unite_patterns(pattern_var, filetype) \"{{{\n  let keyword_patterns = []\n  let dup_check = {}\n\n  \" Composite filetype.\n  for ft in split(a:filetype, '\\.')\n    if has_key(a:pattern_var, ft) && !has_key(dup_check, ft)\n      let dup_check[ft] = 1\n      call add(keyword_patterns, a:pattern_var[ft])\n    endif\n\n    \" Same filetype.\n    if exists('g:neocomplcache_same_filetype_lists')\n          \\ && has_key(g:neocomplcache_same_filetype_lists, ft)\n      for ft in split(g:neocomplcache_same_filetype_lists[ft], ',')\n        if has_key(a:pattern_var, ft) && !has_key(dup_check, ft)\n          let dup_check[ft] = 1\n          call add(keyword_patterns, a:pattern_var[ft])\n        endif\n      endfor\n    endif\n  endfor\n\n  if empty(keyword_patterns)\n    let default = get(a:pattern_var, '_', get(a:pattern_var, 'default', ''))\n    if default != ''\n      call add(keyword_patterns, default)\n    endif\n  endif\n\n  return join(keyword_patterns, '\\m\\|')\nendfunction\"}}}\n\nfunction! neocomplcache#helper#ftdictionary2list(dictionary, filetype) \"{{{\n  let list = []\n  for filetype in neocomplcache#get_source_filetypes(a:filetype)\n    if has_key(a:dictionary, filetype)\n      call add(list, a:dictionary[filetype])\n    endif\n  endfor\n\n  return list\nendfunction\"}}}\n\nfunction! neocomplcache#helper#get_sources_list(...) \"{{{\n  let filetype = neocomplcache#get_context_filetype()\n\n  let source_names = exists('b:neocomplcache_sources_list') ?\n        \\ b:neocomplcache_sources_list :\n        \\ get(a:000, 0,\n        \\   get(g:neocomplcache_sources_list, filetype,\n        \\     get(g:neocomplcache_sources_list, '_', ['_'])))\n  let disabled_sources = get(\n        \\ g:neocomplcache_disabled_sources_list, filetype,\n        \\   get(g:neocomplcache_disabled_sources_list, '_', []))\n  call neocomplcache#init#_sources(source_names)\n\n  let all_sources = neocomplcache#available_sources()\n  let sources = {}\n  for source_name in source_names\n    if source_name ==# '_'\n      \" All sources.\n      let sources = all_sources\n      break\n    endif\n\n    if !has_key(all_sources, source_name)\n      call neocomplcache#print_warning(printf(\n            \\ 'Invalid source name \"%s\" is given.', source_name))\n      continue\n    endif\n\n    let sources[source_name] = all_sources[source_name]\n  endfor\n\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  let neocomplcache.sources = filter(sources, \"\n        \\ index(disabled_sources, v:val.name) < 0 &&\n        \\   (empty(v:val.filetypes) ||\n        \\    get(v:val.filetypes, neocomplcache.context_filetype, 0))\")\n\n  return neocomplcache.sources\nendfunction\"}}}\n\nfunction! neocomplcache#helper#clear_result() \"{{{\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n\n  let neocomplcache.complete_str = ''\n  let neocomplcache.candidates = []\n  let neocomplcache.complete_results = []\n  let neocomplcache.complete_pos = -1\nendfunction\"}}}\n\nfunction! neocomplcache#helper#call_hook(sources, hook_name, context) \"{{{\n  for source in neocomplcache#util#convert2list(a:sources)\n    try\n      if !has_key(source.hooks, a:hook_name)\n        if a:hook_name ==# 'on_init' && has_key(source, 'initialize')\n          call source.initialize()\n        elseif a:hook_name ==# 'on_final' && has_key(source, 'finalize')\n          call source.finalize()\n        endif\n      else\n        call call(source.hooks[a:hook_name],\n              \\ [extend(source.neocomplcache__context, a:context)],\n              \\ source.hooks)\n      endif\n    catch\n      call neocomplcache#print_error(v:throwpoint)\n      call neocomplcache#print_error(v:exception)\n      call neocomplcache#print_error(\n            \\ '[unite.vim] Error occurred in calling hook \"' . a:hook_name . '\"!')\n      call neocomplcache#print_error(\n            \\ '[unite.vim] Source name is ' . source.name)\n    endtry\n  endfor\nendfunction\"}}}\n\nfunction! neocomplcache#helper#call_filters(filters, source, context) \"{{{\n  let context = extend(a:source.neocomplcache__context, a:context)\n  let _ = []\n  for filter in neocomplcache#init#_filters(\n        \\ neocomplcache#util#convert2list(a:filters))\n    try\n      let context.candidates = call(filter.filter, [context], filter)\n    catch\n      call neocomplcache#print_error(v:throwpoint)\n      call neocomplcache#print_error(v:exception)\n      call neocomplcache#print_error(\n            \\ '[unite.vim] Error occurred in calling filter '\n            \\   . filter.name . '!')\n      call neocomplcache#print_error(\n            \\ '[unite.vim] Source name is ' . a:source.name)\n    endtry\n  endfor\n\n  return context.candidates\nendfunction\"}}}\n\nfunction! s:match_wildcard(cur_text, pattern, complete_pos) \"{{{\n  let complete_pos = a:complete_pos\n  while complete_pos > 1 && a:cur_text[complete_pos - 1] == '*'\n    let left_text = a:cur_text[: complete_pos - 2]\n    if left_text == '' || left_text !~ a:pattern\n      break\n    endif\n\n    let complete_pos = match(left_text, a:pattern)\n  endwhile\n\n  return complete_pos\nendfunction\"}}}\n\nfunction! s:keyword_escape(complete_str) \"{{{\n  let keyword_escape = escape(a:complete_str, '~\" \\.^$[]')\n  if g:neocomplcache_enable_wildcard\n    let keyword_escape = substitute(\n          \\ substitute(keyword_escape, '.\\zs\\*', '.*', 'g'),\n          \\ '\\%(^\\|\\*\\)\\zs\\*', '\\\\*', 'g')\n  else\n    let keyword_escape = escape(keyword_escape, '*')\n  endif\n\n  return keyword_escape\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/init.vim",
    "content": "\"=============================================================================\n\" FILE: init.vim\n\" AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 25 Oct 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nif !exists('s:is_enabled')\n  let s:is_enabled = 0\nendif\n\nfunction! neocomplcache#init#lazy() \"{{{\n  if !exists('s:lazy_progress')\n    let s:lazy_progress = 0\n  endif\n\n  if s:lazy_progress == 0\n    call neocomplcache#init#_others()\n    let s:is_enabled = 0\n  elseif s:lazy_progress == 1\n    call neocomplcache#init#_sources(get(g:neocomplcache_sources_list,\n          \\ neocomplcache#get_context_filetype(), ['_']))\n  else\n    call neocomplcache#init#_autocmds()\n    let s:is_enabled = 1\n  endif\n\n  let s:lazy_progress += 1\nendfunction\"}}}\n\nfunction! neocomplcache#init#enable() \"{{{\n  if neocomplcache#is_enabled()\n    return\n  endif\n\n  call neocomplcache#init#_autocmds()\n  call neocomplcache#init#_others()\n\n  call neocomplcache#init#_sources(get(g:neocomplcache_sources_list,\n        \\ neocomplcache#get_context_filetype(), ['_']))\n  let s:is_enabled = 1\nendfunction\"}}}\n\nfunction! neocomplcache#init#disable() \"{{{\n  if !neocomplcache#is_enabled()\n    call neocomplcache#print_warning(\n          \\ 'neocomplcache is disabled! This command is ignored.')\n    return\n  endif\n\n  let s:is_enabled = 0\n\n  augroup neocomplcache\n    autocmd!\n  augroup END\n\n  delcommand NeoComplCacheDisable\n\n  call neocomplcache#helper#call_hook(filter(values(\n        \\ neocomplcache#variables#get_sources()), 'v:val.loaded'),\n        \\ 'on_final', {})\nendfunction\"}}}\n\nfunction! neocomplcache#init#is_enabled() \"{{{\n  return s:is_enabled\nendfunction\"}}}\n\nfunction! neocomplcache#init#_autocmds() \"{{{\n  augroup neocomplcache\n    autocmd!\n    autocmd InsertEnter *\n          \\ call neocomplcache#handler#_on_insert_enter()\n    autocmd InsertLeave *\n          \\ call neocomplcache#handler#_on_insert_leave()\n    autocmd CursorMovedI *\n          \\ call neocomplcache#handler#_on_moved_i()\n    autocmd BufWritePost *\n          \\ call neocomplcache#handler#_on_write_post()\n  augroup END\n\n  if g:neocomplcache_enable_insert_char_pre\n        \\ && (v:version > 703 || v:version == 703 && has('patch418'))\n    autocmd neocomplcache InsertCharPre *\n          \\ call neocomplcache#handler#_do_auto_complete('InsertCharPre')\n  elseif g:neocomplcache_enable_cursor_hold_i\n    augroup neocomplcache\n      autocmd CursorHoldI *\n            \\ call neocomplcache#handler#_do_auto_complete('CursorHoldI')\n      autocmd InsertEnter *\n            \\ call neocomplcache#handler#_change_update_time()\n      autocmd InsertLeave *\n            \\ call neocomplcache#handler#_restore_update_time()\n    augroup END\n  else\n    autocmd neocomplcache CursorMovedI *\n          \\ call neocomplcache#handler#_do_auto_complete('CursorMovedI')\n  endif\n\n  if (v:version > 703 || v:version == 703 && has('patch598'))\n    autocmd neocomplcache CompleteDone *\n          \\ call neocomplcache#handler#_on_complete_done()\n  endif\nendfunction\"}}}\n\nfunction! neocomplcache#init#_others() \"{{{\n  call neocomplcache#init#_variables()\n\n  call neocomplcache#context_filetype#initialize()\n\n  call neocomplcache#commands#_initialize()\n\n  \" Save options.\n  let s:completefunc_save = &completefunc\n  let s:completeopt_save = &completeopt\n\n  \" Set completefunc.\n  let completefunc_save = &l:completefunc\n  let &completefunc = 'neocomplcache#complete#manual_complete'\n  if completefunc_save != ''\n    let &l:completefunc = completefunc_save\n  endif\n\n  \" For auto complete keymappings.\n  call neocomplcache#mappings#define_default_mappings()\n\n  \" Detect set paste.\n  if &paste\n    redir => output\n    99verbose set paste\n    redir END\n    call neocomplcache#print_error(output)\n    call neocomplcache#print_error(\n          \\ 'Detected set paste! Disabled neocomplcache.')\n  endif\n\n  command! -nargs=0 -bar NeoComplCacheDisable\n        \\ call neocomplcache#init#disable()\nendfunction\"}}}\n\nfunction! neocomplcache#init#_variables() \"{{{\n  \" Initialize keyword patterns. \"{{{\n  call neocomplcache#util#set_default(\n        \\ 'g:neocomplcache_keyword_patterns', {})\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'_',\n        \\'\\k\\+')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_keyword_patterns',\n        \\'filename',\n        \\ neocomplcache#util#is_windows() ?\n        \\'\\%(\\a\\+:/\\)\\?\\%([/[:alnum:]()$+_~.\\x80-\\xff-]\\|[^[:print:]]\\|\\\\.\\)\\+' :\n        \\'\\%([/\\[\\][:alnum:]()$+_~.-]\\|[^[:print:]]\\|\\\\.\\)\\+')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'lisp,scheme,clojure,int-gosh,int-clisp,int-clj',\n        \\'[[:alpha:]+*/@$_=.!?-][[:alnum:]+*/@$_:=.!?-]*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'ruby,int-irb',\n        \\'^=\\%(b\\%[egin]\\|e\\%[nd]\\)\\|\\%(@@\\|[$@]\\)\\h\\w*\\|\\h\\w*\\%(::\\w*\\)*[!?]\\?')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'php,int-php',\n        \\'</\\?\\%(\\h[[:alnum:]_-]*\\s*\\)\\?\\%(/\\?>\\)\\?'.\n        \\'\\|\\$\\h\\w*\\|\\h\\w*\\%(\\%(\\\\\\|::\\)\\w*\\)*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'perl,int-perlsh',\n        \\'<\\h\\w*>\\?\\|[$@%&*]\\h\\w*\\|\\h\\w*\\%(::\\w*\\)*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'perl6,int-perl6',\n        \\'<\\h\\w*>\\?\\|[$@%&][!.*?]\\?\\h[[:alnum:]_-]*'.\n        \\'\\|\\h[[:alnum:]_-]*\\%(::[[:alnum:]_-]*\\)*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'pir',\n        \\'[$@%.=]\\?\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'pasm',\n        \\'[=]\\?\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'vim,help',\n        \\'-\\h[[:alnum:]-]*=\\?\\|\\c\\[:\\%(\\h\\w*:\\]\\)\\?\\|&\\h[[:alnum:]_:]*\\|'.\n        \\'<SID>\\%(\\h\\w*\\)\\?\\|<Plug>([^)]*)\\?'.\n        \\'\\|<\\h[[:alnum:]_-]*>\\?\\|\\h[[:alnum:]_:#]*!\\?\\|$\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'tex',\n        \\'\\\\\\a{\\a\\{1,2}}\\|\\\\[[:alpha:]@][[:alnum:]@]*'.\n        \\'\\%({\\%([[:alnum:]:_]\\+\\*\\?}\\?\\)\\?\\)\\?\\|\\a[[:alnum:]:_]*\\*\\?')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'sh,zsh,int-zsh,int-bash,int-sh',\n        \\'[[:alpha:]_.-][[:alnum:]_.-]*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'vimshell',\n        \\'\\$\\$\\?\\w*\\|[[:alpha:]_.\\\\/~-][[:alnum:]_.\\\\/~-]*\\|\\d\\+\\%(\\.\\d\\+\\)\\+')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'ps1,int-powershell',\n        \\'\\[\\h\\%([[:alnum:]_.]*\\]::\\)\\?\\|[$%@.]\\?[[:alpha:]_.:-][[:alnum:]_.:-]*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'c',\n        \\'^\\s*#\\s*\\h\\w*\\|\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'cpp',\n        \\'^\\s*#\\s*\\h\\w*\\|\\h\\w*\\%(::\\w*\\)*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'objc',\n        \\'^\\s*#\\s*\\h\\w*\\|\\h\\w*\\|@\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'objcpp',\n        \\'^\\s*#\\s*\\h\\w*\\|\\h\\w*\\%(::\\w*\\)*\\|@\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'objj',\n        \\'\\h\\w*\\|@\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'d',\n        \\'\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'python,int-python,int-ipython',\n        \\'[@]\\?\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'cs',\n        \\'\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'java',\n        \\'[@]\\?\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'javascript,actionscript,int-js,int-kjs,int-rhino',\n        \\'\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'coffee,int-coffee',\n        \\'[@]\\?\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'awk',\n        \\'\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'haskell,int-ghci',\n        \\'\\%(\\u\\w*\\.\\)\\+[[:alnum:]_'']*\\|[[:alpha:]_''][[:alnum:]_'']*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'ml,ocaml,int-ocaml,int-sml,int-smlsharp',\n        \\'[''`#.]\\?\\h[[:alnum:]_'']*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'erlang,int-erl',\n        \\'^\\s*-\\h\\w*\\|\\%(\\h\\w*:\\)*\\h\\w*\\|\\h[[:alnum:]_@]*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'html,xhtml,xml,markdown,eruby',\n        \\'</\\?\\%([[:alnum:]_:-]\\+\\s*\\)\\?\\%(/\\?>\\)\\?\\|&\\h\\%(\\w*;\\)\\?'.\n        \\'\\|\\h[[:alnum:]_-]*=\"\\%([^\"]*\"\\?\\)\\?\\|\\h[[:alnum:]_:-]*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'css,stylus,scss,less',\n        \\'[@#.]\\?[[:alpha:]_:-][[:alnum:]_:-]*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'tags',\n        \\'^[^!][^/[:blank:]]*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'pic',\n        \\'^\\s*#\\h\\w*\\|\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'arm',\n        \\'\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'asmh8300',\n        \\'[[:alpha:]_.][[:alnum:]_.]*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'masm',\n        \\'\\.\\h\\w*\\|[[:alpha:]_@?$][[:alnum:]_@?$]*\\|\\h\\w*:\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'nasm',\n        \\'^\\s*\\[\\h\\w*\\|[%.]\\?\\h\\w*\\|\\%(\\.\\.@\\?\\|%[%$!]\\)\\%(\\h\\w*\\)\\?\\|\\h\\w*:\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'asm',\n        \\'[%$.]\\?\\h\\w*\\%(\\$\\h\\w*\\)\\?')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'gas',\n        \\'[$.]\\?\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'gdb,int-gdb',\n        \\'$\\h\\w*\\|[[:alnum:]:._-]\\+')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'make',\n        \\'[[:alpha:]_.-][[:alnum:]_.-]*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'scala,int-scala',\n        \\'\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'int-termtter',\n        \\'\\h[[:alnum:]_/-]*\\|\\$\\a\\+\\|#\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'int-earthquake',\n        \\'[:#$]\\h\\w*\\|\\h[[:alnum:]_/-]*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'dosbatch,int-cmdproxy',\n        \\'\\$\\w+\\|[[:alpha:]_./-][[:alnum:]_.-]*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'vb',\n        \\'\\h\\w*\\|#\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'lua',\n        \\'\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\ 'zimbu',\n        \\'\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'konoha',\n        \\'[*$@%]\\h\\w*\\|\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'cobol',\n        \\'\\a[[:alnum:]-]*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'coq',\n        \\'\\h[[:alnum:]_'']*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'tcl',\n        \\'[.-]\\h\\w*\\|\\h\\w*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_keyword_patterns',\n        \\'nyaos,int-nyaos',\n        \\'\\h\\w*')\n  \"}}}\n\n  \" Initialize next keyword patterns. \"{{{\n  call neocomplcache#util#set_default(\n        \\ 'g:neocomplcache_next_keyword_patterns', {})\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_next_keyword_patterns', 'perl',\n        \\'\\h\\w*>')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_next_keyword_patterns', 'perl6',\n        \\'\\h\\w*>')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_next_keyword_patterns', 'vim,help',\n        \\'\\w*()\\?\\|\\w*:\\]\\|[[:alnum:]_-]*[)>=]')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_next_keyword_patterns', 'python',\n        \\'\\w*()\\?')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_next_keyword_patterns', 'tex',\n        \\'[[:alnum:]:_]\\+[*[{}]')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_next_keyword_patterns', 'html,xhtml,xml,mkd',\n        \\'[^\"]*\"\\|[[:alnum:]_:-]*>')\n  \"}}}\n\n  \" Initialize same file type lists. \"{{{\n  call neocomplcache#util#set_default(\n        \\ 'g:neocomplcache_same_filetype_lists', {})\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'c', 'cpp')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'cpp', 'c')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'erb', 'ruby,html,xhtml')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'html,xml', 'xhtml')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'html,xhtml', 'css,stylus,less')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'css', 'scss')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'scss', 'css')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'stylus', 'css')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'less', 'css')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'xhtml', 'html,xml')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'help', 'vim')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'tex', 'bib,plaintex')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'plaintex', 'bib,tex')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'lingr-say', 'lingr-messages,lingr-members')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'J6uil_say', 'J6uil')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'vimconsole', 'vim')\n\n  \" Interactive filetypes.\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-irb', 'ruby')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-ghci,int-hugs', 'haskell')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-python,int-ipython', 'python')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-gosh', 'scheme')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-clisp', 'lisp')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-erl', 'erlang')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-zsh', 'zsh')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-bash', 'bash')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-sh', 'sh')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-cmdproxy', 'dosbatch')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-powershell', 'powershell')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-perlsh', 'perl')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-perl6', 'perl6')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-ocaml', 'ocaml')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-clj', 'clojure')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-sml,int-smlsharp', 'sml')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-js,int-kjs,int-rhino', 'javascript')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-coffee', 'coffee')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-gdb', 'gdb')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-scala', 'scala')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-nyaos', 'nyaos')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_same_filetype_lists',\n        \\ 'int-php', 'php')\n  \"}}}\n\n  \" Initialize delimiter patterns. \"{{{\n  call neocomplcache#util#set_default(\n        \\ 'g:neocomplcache_delimiter_patterns', {})\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_delimiter_patterns',\n        \\ 'vim,help', ['#'])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_delimiter_patterns',\n        \\ 'erlang,lisp,int-clisp', [':'])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_delimiter_patterns',\n        \\ 'lisp,int-clisp', ['/', ':'])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_delimiter_patterns',\n        \\ 'clojure,int-clj', ['/', '\\.'])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_delimiter_patterns',\n        \\ 'perl,cpp', ['::'])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_delimiter_patterns',\n        \\ 'php', ['\\', '::'])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_delimiter_patterns',\n        \\ 'java,d,javascript,actionscript,'.\n        \\ 'ruby,eruby,haskell,int-ghci,coffee,zimbu,konoha',\n        \\ ['\\.'])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_delimiter_patterns',\n        \\ 'lua', ['\\.', ':'])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_delimiter_patterns',\n        \\ 'perl6', ['\\.', '::'])\n  \"}}}\n\n  \" Initialize ctags arguments. \"{{{\n  call neocomplcache#util#set_default(\n        \\ 'g:neocomplcache_ctags_arguments_list', {})\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_ctags_arguments_list',\n        \\ '_', '')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_ctags_arguments_list', 'vim',\n        \\ '--extra=fq --fields=afmiKlnsStz ' .\n        \\ \"--regex-vim='/function!? ([a-z#:_0-9A-Z]+)/\\\\1/function/'\")\n  if neocomplcache#util#is_mac()\n    call neocomplcache#util#set_default_dictionary(\n          \\ 'g:neocomplcache_ctags_arguments_list', 'c',\n          \\ '--c-kinds=+p --fields=+iaS --extra=+q\n          \\ -I__DARWIN_ALIAS,__DARWIN_ALIAS_C,__DARWIN_ALIAS_I,__DARWIN_INODE64\n          \\ -I__DARWIN_1050,__DARWIN_1050ALIAS,__DARWIN_1050ALIAS_C,__DARWIN_1050ALIAS_I,__DARWIN_1050INODE64\n          \\ -I__DARWIN_EXTSN,__DARWIN_EXTSN_C\n          \\ -I__DARWIN_LDBL_COMPAT,__DARWIN_LDBL_COMPAT2')\n  else\n    call neocomplcache#util#set_default_dictionary(\n          \\ 'g:neocomplcache_ctags_arguments_list', 'c',\n          \\ '-R --sort=1 --c-kinds=+p --fields=+iaS --extra=+q ' .\n          \\ '-I __wur,__THROW,__attribute_malloc__,__nonnull+,'.\n          \\   '__attribute_pure__,__attribute_warn_unused_result__,__attribute__+')\n  endif\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_ctags_arguments_list', 'cpp',\n        \\ '--language-force=C++ -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q '.\n        \\ '-I __wur,__THROW,__attribute_malloc__,__nonnull+,'.\n        \\   '__attribute_pure__,__attribute_warn_unused_result__,__attribute__+')\n  \"}}}\n\n  \" Initialize text mode filetypes. \"{{{\n  call neocomplcache#util#set_default(\n        \\ 'g:neocomplcache_text_mode_filetypes', {})\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_text_mode_filetypes',\n        \\ 'hybrid,text,help,tex,gitcommit,gitrebase,vcs-commit,markdown,'.\n        \\   'textile,creole,org,rdoc,mediawiki,rst,asciidoc,pod', 1) \n  \"}}}\n\n  \" Initialize tags filter patterns. \"{{{\n  call neocomplcache#util#set_default(\n        \\ 'g:neocomplcache_tags_filter_patterns', {})\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_tags_filter_patterns', 'c,cpp',\n        \\'v:val.word !~ ''^[~_]''')\n  \"}}}\n\n  \" Initialize force omni completion pattern. \"{{{\n  call neocomplcache#util#set_default(\n        \\ 'g:neocomplcache_force_omni_patterns', {})\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_force_omni_patterns', 'objc',\n        \\'\\h\\w\\+\\|[^.[:digit:] *\\t]\\%(\\.\\|->\\)')\n  \"}}}\n\n  \" Initialize ignore composite filetypes\n  call neocomplcache#util#set_default(\n        \\ 'g:neocomplcache_ignore_composite_filetype_lists', {})\n\n  \" Must g:neocomplcache_auto_completion_start_length > 1.\n  if g:neocomplcache_auto_completion_start_length < 1\n    let g:neocomplcache_auto_completion_start_length = 1\n  endif\n  \" Must g:neocomplcache_min_keyword_length > 1.\n  if g:neocomplcache_min_keyword_length < 1\n    let g:neocomplcache_min_keyword_length = 1\n  endif\n\n  \" Initialize omni function list. \"{{{\n  if !exists('g:neocomplcache_omni_functions')\n    let g:neocomplcache_omni_functions = {}\n  endif\n  \"}}}\n\n  \" Set custom.\n  call s:set_default_custom()\nendfunction\"}}}\n\nfunction! neocomplcache#init#_current_neocomplcache() \"{{{\n  let b:neocomplcache = {\n        \\ 'context' : {\n        \\      'input' : '',\n        \\      'complete_pos' : -1,\n        \\      'complete_str' : '',\n        \\      'candidates' : [],\n        \\ },\n        \\ 'lock' : 0,\n        \\ 'skip_next_complete' : 0,\n        \\ 'filetype' : '',\n        \\ 'context_filetype' : '',\n        \\ 'context_filetype_range' :\n        \\    [[1, 1], [line('$'), len(getline('$'))+1]],\n        \\ 'completion_length' : -1,\n        \\ 'update_time_save' : &updatetime,\n        \\ 'foldinfo' : [],\n        \\ 'lock_sources' : {},\n        \\ 'skipped' : 0,\n        \\ 'event' : '',\n        \\ 'cur_text' : '',\n        \\ 'old_cur_text' : '',\n        \\ 'complete_str' : '',\n        \\ 'complete_pos' : -1,\n        \\ 'candidates' : [],\n        \\ 'complete_results' : [],\n        \\ 'complete_sources' : [],\n        \\ 'manual_sources' : [],\n        \\ 'start_time' : reltime(),\n        \\}\nendfunction\"}}}\n\nfunction! neocomplcache#init#_sources(names) \"{{{\n  if !exists('s:loaded_source_files')\n    \" Initialize.\n    let s:loaded_source_files = {}\n    let s:loaded_all_sources = 0\n    let s:runtimepath_save = ''\n  endif\n\n  \" Initialize sources table.\n  if s:loaded_all_sources && &runtimepath ==# s:runtimepath_save\n    return\n  endif\n\n  let runtimepath_save = neocomplcache#util#split_rtp(s:runtimepath_save)\n  let runtimepath = neocomplcache#util#join_rtp(\n        \\ filter(neocomplcache#util#split_rtp(),\n        \\ 'index(runtimepath_save, v:val) < 0'))\n  let sources = neocomplcache#variables#get_sources()\n\n  for name in filter(copy(a:names), '!has_key(sources, v:val)')\n    \" Search autoload.\n    for source_name in map(split(globpath(runtimepath,\n          \\ 'autoload/neocomplcache/sources/*.vim'), '\\n'),\n          \\ \"fnamemodify(v:val, ':t:r')\")\n      if has_key(s:loaded_source_files, source_name)\n        continue\n      endif\n\n      let s:loaded_source_files[source_name] = 1\n\n      let source = neocomplcache#sources#{source_name}#define()\n      if empty(source)\n        \" Ignore.\n        continue\n      endif\n\n      call neocomplcache#define_source(source)\n    endfor\n\n    if name == '_'\n      let s:loaded_all_sources = 1\n      let s:runtimepath_save = &runtimepath\n    endif\n  endfor\nendfunction\"}}}\n\nfunction! neocomplcache#init#_source(source) \"{{{\n  let default = {\n        \\ 'max_candidates' : 0,\n        \\ 'filetypes' : {},\n        \\ 'hooks' : {},\n        \\ 'matchers' : ['matcher_old'],\n        \\ 'sorters' : ['sorter_rank'],\n        \\ 'converters' : [\n        \\      'converter_remove_next_keyword',\n        \\      'converter_delimiter',\n        \\      'converter_case',\n        \\      'converter_abbr',\n        \\ ],\n        \\ 'neocomplcache__context' : copy(neocomplcache#get_context()),\n        \\ }\n\n  let source = extend(copy(default), a:source)\n\n  \" Overwritten by user custom.\n  let custom = neocomplcache#variables#get_custom().sources\n  let source = extend(source, get(custom, source.name,\n        \\ get(custom, '_', {})))\n\n  let source.loaded = 0\n  \" Source kind convertion.\n  if source.kind ==# 'plugin' ||\n        \\ (!has_key(source, 'gather_candidates') &&\n        \\  !has_key(source, 'get_complete_words'))\n    let source.kind = 'keyword'\n  elseif source.kind ==# 'ftplugin' || source.kind ==# 'complfunc'\n    \" For compatibility.\n    let source.kind = 'manual'\n  else\n    let source.kind = 'manual'\n  endif\n\n  if !has_key(source, 'rank')\n    \" Set default rank.\n    let source.rank = (source.kind ==# 'keyword') ? 5 :\n          \\ empty(source.filetypes) ? 10 : 100\n  endif\n\n  if !has_key(source, 'min_pattern_length')\n    \" Set min_pattern_length.\n    let source.min_pattern_length = (source.kind ==# 'keyword') ?\n          \\ g:neocomplcache_auto_completion_start_length : 0\n  endif\n\n  let source.neocomplcache__context.source_name = source.name\n\n  \" Note: This routine is for compatibility of old sources implementation.\n  \" Initialize sources.\n  if empty(source.filetypes) && has_key(source, 'initialize')\n    try\n      call source.initialize()\n    catch\n      call neocomplcache#print_error(v:throwpoint)\n      call neocomplcache#print_error(v:exception)\n      call neocomplcache#print_error(\n            \\ 'Error occurred in source''s initialize()!')\n      call neocomplcache#print_error(\n            \\ 'Source name is ' . source.name)\n    endtry\n\n    let source.loaded = 1\n  endif\n\n  return source\nendfunction\"}}}\n\nfunction! neocomplcache#init#_filters(names) \"{{{\n  let _ = []\n  let filters = neocomplcache#variables#get_filters()\n\n  for name in a:names\n    if !has_key(filters, name)\n      \" Search autoload.\n      for filter_name in map(split(globpath(&runtimepath,\n            \\ 'autoload/neocomplcache/filters/'.\n            \\   substitute(name,\n            \\'^\\%(matcher\\|sorter\\|converter\\)_[^/_-]\\+\\zs[/_-].*$', '', '')\n            \\  .'*.vim'), '\\n'), \"fnamemodify(v:val, ':t:r')\")\n        let filter = neocomplcache#filters#{filter_name}#define()\n        if empty(filter)\n          \" Ignore.\n          continue\n        endif\n\n        call neocomplcache#define_filter(filter)\n      endfor\n\n      if !has_key(filters, name)\n        \" Not found.\n        call neocomplcache#print_error(\n              \\ printf('filter name : %s is not found.', string(name)))\n        continue\n      endif\n    endif\n\n    if has_key(filters, name)\n      call add(_, filters[name])\n    endif\n  endfor\n\n  return _\nendfunction\"}}}\n\nfunction! neocomplcache#init#_filter(filter) \"{{{\n  let default = {\n        \\ }\n\n  let filter = extend(default, a:filter)\n  if !has_key(filter, 'kind')\n    let filter.kind =\n          \\ (filter.name =~# '^matcher_') ? 'matcher' :\n          \\ (filter.name =~# '^sorter_') ? 'sorter' : 'converter'\n  endif\n\n  return filter\nendfunction\"}}}\n\nfunction! s:set_default_custom() \"{{{\n  let custom = neocomplcache#variables#get_custom().sources\n\n  \" Initialize completion length.\n  for [source_name, length] in items(\n        \\ g:neocomplcache_source_completion_length)\n    if !has_key(custom, source_name)\n      let custom[source_name] = {}\n    endif\n    let custom[source_name].min_pattern_length = length\n  endfor\n\n  \" Initialize rank.\n  for [source_name, rank] in items(\n        \\ g:neocomplcache_source_rank)\n    if !has_key(custom, source_name)\n      let custom[source_name] = {}\n    endif\n    let custom[source_name].rank = rank\n  endfor\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/mappings.vim",
    "content": "\"=============================================================================\n\" FILE: mappings.vim\n\" AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 19 May 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#mappings#define_default_mappings() \"{{{\n  inoremap <expr><silent> <Plug>(neocomplcache_start_unite_complete)\n        \\ unite#sources#neocomplcache#start_complete()\n  inoremap <expr><silent> <Plug>(neocomplcache_start_unite_quick_match)\n        \\ unite#sources#neocomplcache#start_quick_match()\n  inoremap <silent> <Plug>(neocomplcache_start_auto_complete)\n        \\ <C-x><C-u><C-r>=neocomplcache#mappings#popup_post()<CR>\n  inoremap <silent> <Plug>(neocomplcache_start_auto_complete_no_select)\n        \\ <C-x><C-u><C-p>\n  \" \\ <C-x><C-u><C-p>\n  inoremap <silent> <Plug>(neocomplcache_start_omni_complete)\n        \\ <C-x><C-o><C-p>\nendfunction\"}}}\n\nfunction! neocomplcache#mappings#smart_close_popup() \"{{{\n  return g:neocomplcache_enable_auto_select ?\n        \\ neocomplcache#mappings#cancel_popup() :\n        \\ neocomplcache#mappings#close_popup()\nendfunction\n\"}}}\nfunction! neocomplcache#mappings#close_popup() \"{{{\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  let neocomplcache.complete_str = ''\n  let neocomplcache.skip_next_complete = 2\n  let neocomplcache.candidates = []\n\n  return pumvisible() ? \"\\<C-y>\" : ''\nendfunction\n\"}}}\nfunction! neocomplcache#mappings#cancel_popup() \"{{{\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  let neocomplcache.skip_next_complete = 1\n  call neocomplcache#helper#clear_result()\n\n  return pumvisible() ? \"\\<C-e>\" : ''\nendfunction\n\"}}}\n\nfunction! neocomplcache#mappings#popup_post() \"{{{\n  return  !pumvisible() ? \"\" :\n        \\ g:neocomplcache_enable_auto_select ? \"\\<C-p>\\<Down>\" :\n        \\ \"\\<C-p>\"\nendfunction\"}}}\n\nfunction! neocomplcache#mappings#undo_completion() \"{{{\n  if !exists(':NeoComplCacheDisable')\n    return ''\n  endif\n\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n\n  \" Get cursor word.\n  let [complete_pos, complete_str] =\n        \\ neocomplcache#match_word(neocomplcache#get_cur_text(1))\n  let old_keyword_str = neocomplcache.complete_str\n  let neocomplcache.complete_str = complete_str\n\n  return (!pumvisible() ? '' :\n        \\ complete_str ==# old_keyword_str ? \"\\<C-e>\" : \"\\<C-y>\")\n        \\. repeat(\"\\<BS>\", len(complete_str)) . old_keyword_str\nendfunction\"}}}\n\nfunction! neocomplcache#mappings#complete_common_string() \"{{{\n  if !exists(':NeoComplCacheDisable')\n    return ''\n  endif\n\n  \" Save options.\n  let ignorecase_save = &ignorecase\n\n  \" Get cursor word.\n  let [complete_pos, complete_str] =\n        \\ neocomplcache#match_word(neocomplcache#get_cur_text(1))\n\n  if neocomplcache#is_text_mode()\n    let &ignorecase = 1\n  elseif g:neocomplcache_enable_smart_case && complete_str =~ '\\u'\n    let &ignorecase = 0\n  else\n    let &ignorecase = g:neocomplcache_enable_ignore_case\n  endif\n\n  let is_fuzzy = g:neocomplcache_enable_fuzzy_completion\n\n  try\n    let g:neocomplcache_enable_fuzzy_completion = 0\n    let neocomplcache = neocomplcache#get_current_neocomplcache()\n    let candidates = neocomplcache#keyword_filter(\n          \\ copy(neocomplcache.candidates), complete_str)\n  finally\n    let g:neocomplcache_enable_fuzzy_completion = is_fuzzy\n  endtry\n\n  if empty(candidates)\n    let &ignorecase = ignorecase_save\n\n    return ''\n  endif\n\n  let common_str = candidates[0].word\n  for keyword in candidates[1:]\n    while !neocomplcache#head_match(keyword.word, common_str)\n      let common_str = common_str[: -2]\n    endwhile\n  endfor\n  if &ignorecase\n    let common_str = tolower(common_str)\n  endif\n\n  let &ignorecase = ignorecase_save\n\n  if common_str == ''\n    return ''\n  endif\n\n  return (pumvisible() ? \"\\<C-e>\" : '')\n        \\ . repeat(\"\\<BS>\", len(complete_str)) . common_str\nendfunction\"}}}\n\n\" Manual complete wrapper.\nfunction! neocomplcache#mappings#start_manual_complete(...) \"{{{\n  if !neocomplcache#is_enabled()\n    return ''\n  endif\n\n  \" Set context filetype.\n  call neocomplcache#context_filetype#set()\n\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n\n  let sources = get(a:000, 0,\n        \\ keys(neocomplcache#available_sources()))\n  let neocomplcache.manual_sources = neocomplcache#helper#get_sources_list(\n        \\ neocomplcache#util#convert2list(sources))\n\n  \" Set function.\n  let &l:completefunc = 'neocomplcache#complete#sources_manual_complete'\n\n  \" Start complete.\n  return \"\\<C-x>\\<C-u>\\<C-p>\"\nendfunction\"}}}\n\nfunction! neocomplcache#mappings#start_manual_complete_list(complete_pos, complete_str, candidates) \"{{{\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  let [neocomplcache.complete_pos,\n        \\ neocomplcache.complete_str, neocomplcache.candidates] =\n        \\ [a:complete_pos, a:complete_str, a:candidates]\n\n  \" Set function.\n  let &l:completefunc = 'neocomplcache#complete#auto_complete'\n\n  \" Start complete.\n  return \"\\<C-x>\\<C-u>\\<C-p>\"\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/sources/buffer_complete.vim",
    "content": "\"=============================================================================\n\" FILE: buffer_complete.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 26 Sep 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\n\" Important variables.\nif !exists('s:buffer_sources')\n  let s:buffer_sources = {}\n  let s:async_dictionary_list = {}\nendif\n\nlet s:source = {\n      \\ 'name' : 'buffer_complete',\n      \\ 'kind' : 'manual',\n      \\ 'mark' : '[B]',\n      \\ 'rank' : 5,\n      \\ 'min_pattern_length' :\n      \\     g:neocomplcache_auto_completion_start_length,\n      \\ 'hooks' : {},\n      \\}\n\nfunction! s:source.hooks.on_init(context) \"{{{\n  let s:buffer_sources = {}\n\n  augroup neocomplcache \"{{{\n    \" Caching events\n    autocmd BufEnter,BufRead,BufWinEnter *\n          \\ call s:check_source()\n    autocmd CursorHold,CursorHoldI *\n          \\ call s:check_cache()\n    autocmd BufWritePost *\n          \\ call s:check_recache()\n    autocmd InsertEnter,InsertLeave *\n          \\ call neocomplcache#sources#buffer_complete#caching_current_line()\n  augroup END\"}}}\n\n  \" Create cache directory.\n  if !isdirectory(neocomplcache#get_temporary_directory() . '/buffer_cache')\n     \\ && !neocomplcache#util#is_sudo()\n    call mkdir(neocomplcache#get_temporary_directory() . '/buffer_cache', 'p')\n  endif\n\n  \" Initialize script variables. \"{{{\n  let s:buffer_sources = {}\n  let s:cache_line_count = 70\n  let s:rank_cache_count = 1\n  let s:disable_caching_list = {}\n  let s:async_dictionary_list = {}\n  \"}}}\n\n  call s:check_source()\nendfunction\n\"}}}\n\nfunction! s:source.hooks.on_final(context) \"{{{\n  delcommand NeoComplCacheCachingBuffer\n  delcommand NeoComplCachePrintSource\n  delcommand NeoComplCacheOutputKeyword\n  delcommand NeoComplCacheDisableCaching\n  delcommand NeoComplCacheEnableCaching\n\n  let s:buffer_sources = {}\nendfunction\"}}}\n\nfunction! s:source.gather_candidates(context) \"{{{\n  call s:check_source()\n\n  let keyword_list = []\n  for [key, source] in s:get_sources_list()\n    call neocomplcache#cache#check_cache_list('buffer_cache',\n          \\ source.path, s:async_dictionary_list, source.keyword_cache, 1)\n\n    let keyword_list += neocomplcache#dictionary_filter(\n          \\ source.keyword_cache, a:context.complete_str)\n    if key == bufnr('%')\n      let source.accessed_time = localtime()\n    endif\n  endfor\n\n  return keyword_list\nendfunction\"}}}\n\nfunction! neocomplcache#sources#buffer_complete#define() \"{{{\n  return s:source\nendfunction\"}}}\n\nfunction! neocomplcache#sources#buffer_complete#get_frequencies() \"{{{\n  \" Current line caching.\n  return get(get(s:buffer_sources, bufnr('%'), {}), 'frequencies', {})\nendfunction\"}}}\nfunction! neocomplcache#sources#buffer_complete#caching_current_line() \"{{{\n  \" Current line caching.\n  return s:caching_current_buffer(\n        \\ max([1, line('.') - 10]), min([line('.') + 10, line('$')]))\nendfunction\"}}}\nfunction! neocomplcache#sources#buffer_complete#caching_current_block() \"{{{\n  \" Current line caching.\n  return s:caching_current_buffer(\n          \\ max([1, line('.') - 500]), min([line('.') + 500, line('$')]))\nendfunction\"}}}\nfunction! s:caching_current_buffer(start, end) \"{{{\n  \" Current line caching.\n\n  if !s:exists_current_source()\n    call s:word_caching(bufnr('%'))\n  endif\n\n  let source = s:buffer_sources[bufnr('%')]\n  let keyword_pattern = source.keyword_pattern\n  let keyword_pattern2 = '^\\%('.keyword_pattern.'\\m\\)'\n  let keywords = source.keyword_cache\n\n  let completion_length = 2\n  let line = join(getline(a:start, a:end))\n  let match = match(line, keyword_pattern)\n  while match >= 0 \"{{{\n    let match_str = matchstr(line, keyword_pattern2, match)\n\n    \" Ignore too short keyword.\n    if len(match_str) >= g:neocomplcache_min_keyword_length \"{{{\n      \" Check dup.\n      let key = tolower(match_str[: completion_length-1])\n      if !has_key(keywords, key)\n        let keywords[key] = {}\n      endif\n      if !has_key(keywords[key], match_str)\n        \" Append list.\n        let keywords[key][match_str] = match_str\n        let source.frequencies[match_str] = 30\n      endif\n    endif\"}}}\n\n    \" Next match.\n    let match = match(line, keyword_pattern, match + len(match_str))\n  endwhile\"}}}\nendfunction\"}}}\n\nfunction! s:get_sources_list() \"{{{\n  let sources_list = []\n\n  let filetypes_dict = {}\n  for filetype in neocomplcache#get_source_filetypes(\n        \\ neocomplcache#get_context_filetype())\n    let filetypes_dict[filetype] = 1\n  endfor\n\n  for [key, source] in items(s:buffer_sources)\n    if has_key(filetypes_dict, source.filetype)\n          \\ || has_key(filetypes_dict, '_')\n          \\ || bufnr('%') == key\n          \\ || (source.name ==# '[Command Line]' && bufnr('#') == key)\n      call add(sources_list, [key, source])\n    endif\n  endfor\n\n  return sources_list\nendfunction\"}}}\n\nfunction! s:initialize_source(srcname) \"{{{\n  let path = fnamemodify(bufname(a:srcname), ':p')\n  let filename = fnamemodify(path, ':t')\n  if filename == ''\n    let filename = '[No Name]'\n    let path .= '/[No Name]'\n  endif\n\n  let ft = getbufvar(a:srcname, '&filetype')\n  if ft == ''\n    let ft = 'nothing'\n  endif\n\n  let buflines = getbufline(a:srcname, 1, '$')\n  let keyword_pattern = neocomplcache#get_keyword_pattern(ft)\n\n  let s:buffer_sources[a:srcname] = {\n        \\ 'keyword_cache' : {},\n        \\ 'frequencies' : {},\n        \\ 'name' : filename, 'filetype' : ft,\n        \\ 'keyword_pattern' : keyword_pattern,\n        \\ 'end_line' : len(buflines),\n        \\ 'accessed_time' : 0,\n        \\ 'cached_time' : 0,\n        \\ 'path' : path, 'loaded_cache' : 0,\n        \\ 'cache_name' : neocomplcache#cache#encode_name(\n        \\   'buffer_cache', path),\n        \\}\nendfunction\"}}}\n\nfunction! s:word_caching(srcname) \"{{{\n  \" Initialize source.\n  call s:initialize_source(a:srcname)\n\n  let source = s:buffer_sources[a:srcname]\n\n  if !filereadable(source.path)\n        \\ || getbufvar(a:srcname, '&buftype') =~ 'nofile'\n    return\n  endif\n\n  let source.cache_name =\n        \\ neocomplcache#cache#async_load_from_file(\n        \\     'buffer_cache', source.path,\n        \\     source.keyword_pattern, 'B')\n  let source.cached_time = localtime()\n  let source.end_line = len(getbufline(a:srcname, 1, '$'))\n  let s:async_dictionary_list[source.path] = [{\n        \\ 'filename' : source.path,\n        \\ 'cachename' : source.cache_name,\n        \\ }]\nendfunction\"}}}\n\nfunction! s:check_changed_buffer(bufnumber) \"{{{\n  let source = s:buffer_sources[a:bufnumber]\n\n  let ft = getbufvar(a:bufnumber, '&filetype')\n  if ft == ''\n    let ft = 'nothing'\n  endif\n\n  let filename = fnamemodify(bufname(a:bufnumber), ':t')\n  if filename == ''\n    let filename = '[No Name]'\n  endif\n\n  return s:buffer_sources[a:bufnumber].name != filename\n        \\ || s:buffer_sources[a:bufnumber].filetype != ft\nendfunction\"}}}\n\nfunction! s:check_source() \"{{{\n  if !s:exists_current_source()\n    call neocomplcache#sources#buffer_complete#caching_current_block()\n    return\n  endif\n\n  for bufnumber in range(1, bufnr('$'))\n    \" Check new buffer.\n    let bufname = fnamemodify(bufname(bufnumber), ':p')\n    if (!has_key(s:buffer_sources, bufnumber)\n          \\ || s:check_changed_buffer(bufnumber))\n          \\ && !has_key(s:disable_caching_list, bufnumber)\n          \\ && (!neocomplcache#is_locked(bufnumber) ||\n          \\    g:neocomplcache_disable_auto_complete)\n          \\ && !getwinvar(bufwinnr(bufnumber), '&previewwindow')\n          \\ && getfsize(bufname) <\n          \\      g:neocomplcache_caching_limit_file_size\n      \" Caching.\n      call s:word_caching(bufnumber)\n    endif\n\n    if has_key(s:buffer_sources, bufnumber)\n      let source = s:buffer_sources[bufnumber]\n      call neocomplcache#cache#check_cache_list('buffer_cache',\n            \\ source.path, s:async_dictionary_list, source.keyword_cache, 1)\n    endif\n  endfor\nendfunction\"}}}\nfunction! s:check_cache() \"{{{\n  let release_accessd_time =\n        \\ localtime() - g:neocomplcache_release_cache_time\n\n  for [key, source] in items(s:buffer_sources)\n    \" Check deleted buffer and access time.\n    if !bufloaded(str2nr(key))\n          \\ || (source.accessed_time > 0 &&\n          \\ source.accessed_time < release_accessd_time)\n      \" Remove item.\n      call remove(s:buffer_sources, key)\n    endif\n  endfor\nendfunction\"}}}\nfunction! s:check_recache() \"{{{\n  if !s:exists_current_source()\n    return\n  endif\n\n  let release_accessd_time =\n        \\ localtime() - g:neocomplcache_release_cache_time\n\n  let source = s:buffer_sources[bufnr('%')]\n\n  \" Check buffer access time.\n  if (source.cached_time > 0 && source.cached_time < release_accessd_time)\n        \\  || (neocomplcache#util#has_vimproc() && line('$') != source.end_line)\n    \" Buffer recache.\n    if g:neocomplcache_enable_debug\n      echomsg 'Caching buffer: ' . bufname('%')\n    endif\n\n    call neocomplcache#sources#buffer_complete#caching_current_block()\n  endif\nendfunction\"}}}\n\nfunction! s:exists_current_source() \"{{{\n  return has_key(s:buffer_sources, bufnr('%'))\nendfunction\"}}}\n\n\" Command functions. \"{{{\nfunction! neocomplcache#sources#buffer_complete#caching_buffer(name) \"{{{\n  if a:name == ''\n    let number = bufnr('%')\n  else\n    let number = bufnr(a:name)\n\n    if number < 0\n      let bufnr = bufnr('%')\n\n      \" No swap warning.\n      let save_shm = &shortmess\n      set shortmess+=A\n\n      \" Open new buffer.\n      execute 'silent! edit' fnameescape(a:name)\n\n      let &shortmess = save_shm\n\n      if bufnr('%') != bufnr\n        setlocal nobuflisted\n        execute 'buffer' bufnr\n      endif\n    endif\n\n    let number = bufnr(a:name)\n  endif\n\n  \" Word recaching.\n  call s:word_caching(number)\n  call s:caching_current_buffer(1, line('$'))\nendfunction\"}}}\nfunction! neocomplcache#sources#buffer_complete#print_source(name) \"{{{\n  if a:name == ''\n    let number = bufnr('%')\n  else\n    let number = bufnr(a:name)\n\n    if number < 0\n      call neocomplcache#print_error('Invalid buffer name.')\n      return\n    endif\n  endif\n\n  if !has_key(s:buffer_sources, number)\n    return\n  endif\n\n  silent put=printf('Print neocomplcache %d source.', number)\n  for key in keys(s:buffer_sources[number])\n    silent put =printf('%s => %s', key, string(s:buffer_sources[number][key]))\n  endfor\nendfunction\"}}}\nfunction! neocomplcache#sources#buffer_complete#output_keyword(name) \"{{{\n  if a:name == ''\n    let number = bufnr('%')\n  else\n    let number = bufnr(a:name)\n\n    if number < 0\n      call neocomplcache#print_error('Invalid buffer name.')\n      return\n    endif\n  endif\n\n  if !has_key(s:buffer_sources, number)\n    return\n  endif\n\n  \" Output buffer.\n  for keyword in neocomplcache#unpack_dictionary(\n        \\ s:buffer_sources[number].keyword_cache)\n    silent put=string(keyword)\n  endfor\nendfunction \"}}}\nfunction! neocomplcache#sources#buffer_complete#disable_caching(name) \"{{{\n  if a:name == ''\n    let number = bufnr('%')\n  else\n    let number = bufnr(a:name)\n\n    if number < 0\n      call neocomplcache#print_error('Invalid buffer name.')\n      return\n    endif\n  endif\n\n  let s:disable_caching_list[number] = 1\n\n  if has_key(s:buffer_sources, number)\n    \" Delete source.\n    call remove(s:buffer_sources, number)\n  endif\nendfunction\"}}}\nfunction! neocomplcache#sources#buffer_complete#enable_caching(name) \"{{{\n  if a:name == ''\n    let number = bufnr('%')\n  else\n    let number = bufnr(a:name)\n\n    if number < 0\n      call neocomplcache#print_error('Invalid buffer name.')\n      return\n    endif\n  endif\n\n  if has_key(s:disable_caching_list, number)\n    call remove(s:disable_caching_list, number)\n  endif\nendfunction\"}}}\n\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/sources/dictionary_complete.vim",
    "content": "\"=============================================================================\n\" FILE: dictionary_complete.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 26 Sep 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\n\" Important variables.\nif !exists('s:dictionary_list')\n  let s:dictionary_list = {}\n  let s:async_dictionary_list = {}\nendif\n\nfunction! neocomplcache#sources#dictionary_complete#define() \"{{{\n  return s:source\nendfunction\"}}}\n\nlet s:source = {\n      \\ 'name' : 'dictionary_complete',\n      \\ 'kind' : 'keyword',\n      \\ 'mark' : '[D]',\n      \\ 'rank' : 4,\n      \\}\n\nfunction! s:source.initialize() \"{{{\n  \" Initialize dictionary. \"{{{\n  if !exists('g:neocomplcache_dictionary_filetype_lists')\n    let g:neocomplcache_dictionary_filetype_lists = {}\n  endif\n  if !has_key(g:neocomplcache_dictionary_filetype_lists, 'default')\n    let g:neocomplcache_dictionary_filetype_lists['default'] = ''\n  endif\n  \"}}}\n\n  \" Initialize dictionary completion pattern. \"{{{\n  if !exists('g:neocomplcache_dictionary_patterns')\n    let g:neocomplcache_dictionary_patterns = {}\n  endif\n  \"}}}\n\n  \" Set caching event.\n  autocmd neocomplcache FileType * call s:caching()\n\n  \" Create cache directory.\n  if !isdirectory(neocomplcache#get_temporary_directory() . '/dictionary_cache')\n     \\ && !neocomplcache#util#is_sudo()\n    call mkdir(neocomplcache#get_temporary_directory() . '/dictionary_cache')\n  endif\n\n  \" Initialize check.\n  call s:caching()\nendfunction\"}}}\n\nfunction! s:source.finalize() \"{{{\n  delcommand NeoComplCacheCachingDictionary\nendfunction\"}}}\n\nfunction! s:source.get_keyword_list(complete_str) \"{{{\n  let list = []\n\n  let filetype = neocomplcache#is_text_mode() ?\n        \\ 'text' : neocomplcache#get_context_filetype()\n  if !has_key(s:dictionary_list, filetype)\n    \" Caching.\n    call s:caching()\n  endif\n\n  for ft in neocomplcache#get_source_filetypes(filetype)\n    call neocomplcache#cache#check_cache('dictionary_cache', ft,\n          \\ s:async_dictionary_list, s:dictionary_list, 1)\n\n    for dict in neocomplcache#get_sources_list(s:dictionary_list, ft)\n      let list += neocomplcache#dictionary_filter(dict, a:complete_str)\n    endfor\n  endfor\n\n  return list\nendfunction\"}}}\n\nfunction! s:caching() \"{{{\n  if !bufloaded(bufnr('%'))\n    return\n  endif\n\n  let key = neocomplcache#is_text_mode() ?\n        \\ 'text' : neocomplcache#get_context_filetype()\n  for filetype in neocomplcache#get_source_filetypes(key)\n    if !has_key(s:dictionary_list, filetype)\n          \\ && !has_key(s:async_dictionary_list, filetype)\n      call neocomplcache#sources#dictionary_complete#recaching(filetype)\n    endif\n  endfor\nendfunction\"}}}\n\nfunction! s:caching_dictionary(filetype)\n  let filetype = a:filetype\n  if filetype == ''\n    let filetype = neocomplcache#get_context_filetype(1)\n  endif\n\n  if has_key(s:async_dictionary_list, filetype)\n        \\ && filereadable(s:async_dictionary_list[filetype].cache_name)\n    \" Delete old cache.\n    call delete(s:async_dictionary_list[filetype].cache_name)\n  endif\n\n  call neocomplcache#sources#dictionary_complete#recaching(filetype)\nendfunction\nfunction! neocomplcache#sources#dictionary_complete#recaching(filetype) \"{{{\n  if !exists('g:neocomplcache_dictionary_filetype_lists')\n    call neocomplcache#initialize()\n  endif\n\n  let filetype = a:filetype\n  if filetype == ''\n    let filetype = neocomplcache#get_context_filetype(1)\n  endif\n\n  \" Caching.\n  let dictionaries = get(\n        \\ g:neocomplcache_dictionary_filetype_lists, filetype, '')\n\n  if dictionaries == ''\n    if filetype != &filetype &&\n          \\ &l:dictionary != '' && &l:dictionary !=# &g:dictionary\n      let dictionaries .= &l:dictionary\n    endif\n  endif\n\n  let s:async_dictionary_list[filetype] = []\n\n  let pattern = get(g:neocomplcache_dictionary_patterns, filetype,\n        \\ neocomplcache#get_keyword_pattern(filetype))\n  for dictionary in split(dictionaries, ',')\n    let dictionary = neocomplcache#util#substitute_path_separator(\n          \\ fnamemodify(dictionary, ':p'))\n    if filereadable(dictionary)\n      call neocomplcache#print_debug('Caching dictionary: ' . dictionary)\n      call add(s:async_dictionary_list[filetype], {\n            \\ 'filename' : dictionary,\n            \\ 'cachename' : neocomplcache#cache#async_load_from_file(\n            \\       'dictionary_cache', dictionary, pattern, 'D')\n            \\ })\n    endif\n  endfor\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/sources/filename_complete.vim",
    "content": "\"=============================================================================\n\" FILE: filename_complete.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 20 Jun 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nlet s:source = {\n      \\ 'name' : 'filename_complete',\n      \\ 'kind' : 'manual',\n      \\ 'mark' : '[F]',\n      \\ 'rank' : 3,\n      \\ 'min_pattern_length' :\n      \\        g:neocomplcache_auto_completion_start_length,\n      \\}\n\nfunction! s:source.initialize() \"{{{\nendfunction\"}}}\nfunction! s:source.finalize() \"{{{\nendfunction\"}}}\n\nfunction! s:source.get_keyword_pos(cur_text) \"{{{\n  let filetype = neocomplcache#get_context_filetype()\n  if filetype ==# 'vimshell' || filetype ==# 'unite' || filetype ==# 'int-ssh'\n    return -1\n  endif\n\n  \" Filename pattern.\n  let pattern = neocomplcache#get_keyword_pattern_end('filename')\n  let [complete_pos, complete_str] =\n        \\ neocomplcache#match_word(a:cur_text, pattern)\n  if complete_str =~ '//' ||\n        \\ (neocomplcache#is_auto_complete() &&\n        \\    (complete_str !~ '/' ||\n        \\     complete_str =~#\n        \\          '\\\\[^ ;*?[]\"={}'']\\|\\.\\.\\+$\\|/c\\%[ygdrive/]$'))\n    \" Not filename pattern.\n    return -1\n  endif\n\n  if neocomplcache#is_sources_complete() && complete_pos < 0\n    let complete_pos = len(a:cur_text)\n  endif\n\n  return complete_pos\nendfunction\"}}}\n\nfunction! s:source.get_complete_words(complete_pos, complete_str) \"{{{\n  return s:get_glob_files(a:complete_str, '')\nendfunction\"}}}\n\nlet s:cached_files = {}\n\nfunction! s:get_glob_files(complete_str, path) \"{{{\n  let path = ',,' . substitute(a:path, '\\.\\%(,\\|$\\)\\|,,', '', 'g')\n\n  let complete_str = neocomplcache#util#substitute_path_separator(\n        \\ substitute(a:complete_str, '\\\\\\(.\\)', '\\1', 'g'))\n\n  let glob = (complete_str !~ '\\*$')?\n        \\ complete_str . '*' : complete_str\n\n  if a:path == '' && complete_str !~ '/'\n    if !has_key(s:cached_files, getcwd())\n      call s:caching_current_files()\n    endif\n\n    let files = copy(s:cached_files[getcwd()])\n  else\n    let ftype = getftype(glob)\n    if ftype != '' && ftype !=# 'dir'\n      \" Note: If glob() device files, Vim may freeze!\n      return []\n    endif\n\n    if a:path == ''\n      let files = neocomplcache#util#glob(glob)\n    else\n      try\n        let globs = globpath(path, glob)\n      catch\n        return []\n      endtry\n      let files = split(substitute(globs, '\\\\', '/', 'g'), '\\n')\n    endif\n  endif\n\n  let files = neocomplcache#keyword_filter(map(\n        \\ files, '{\n        \\    \"word\" : fnamemodify(v:val, \":t\"),\n        \\    \"orig\" : v:val,\n        \\ }'),\n        \\ fnamemodify(complete_str, ':t'))\n\n  if neocomplcache#is_auto_complete()\n        \\ && len(files) > g:neocomplcache_max_list\n    let files = files[: g:neocomplcache_max_list - 1]\n  endif\n\n  let files = map(files, '{\n        \\    \"word\" : substitute(v:val.orig, \"//\", \"/\", \"g\"),\n        \\ }')\n\n  if a:complete_str =~ '^\\$\\h\\w*'\n    let env = matchstr(a:complete_str, '^\\$\\h\\w*')\n    let env_ev = eval(env)\n    if neocomplcache#is_windows()\n      let env_ev = substitute(env_ev, '\\\\', '/', 'g')\n    endif\n    let len_env = len(env_ev)\n  else\n    let len_env = 0\n  endif\n\n  let home_pattern = '^'.\n        \\ neocomplcache#util#substitute_path_separator(\n        \\ expand('~')).'/'\n  let exts = escape(substitute($PATHEXT, ';', '\\\\|', 'g'), '.')\n\n  let dir_list = []\n  let file_list = []\n  for dict in files\n    call add(isdirectory(dict.word) ?\n          \\ dir_list : file_list, dict)\n\n    let dict.orig = dict.word\n\n    if len_env != 0 && dict.word[: len_env-1] == env_ev\n      let dict.word = env . dict.word[len_env :]\n    endif\n\n    let abbr = dict.word\n    if isdirectory(dict.word) && dict.word !~ '/$'\n      let abbr .= '/'\n      if g:neocomplcache_enable_auto_delimiter\n        let dict.word .= '/'\n      endif\n    elseif neocomplcache#is_windows()\n      if '.'.fnamemodify(dict.word, ':e') =~ exts\n        let abbr .= '*'\n      endif\n    elseif executable(dict.word)\n      let abbr .= '*'\n    endif\n    let dict.abbr = abbr\n\n    if a:complete_str =~ '^\\~/'\n      let dict.word = substitute(dict.word, home_pattern, '\\~/', '')\n      let dict.abbr = substitute(dict.abbr, home_pattern, '\\~/', '')\n    endif\n\n    \" Escape word.\n    let dict.word = escape(dict.word, ' ;*?[]\"={}''')\n  endfor\n\n  return dir_list + file_list\nendfunction\"}}}\nfunction! s:caching_current_files() \"{{{\n  let s:cached_files[getcwd()] = neocomplcache#util#glob('*')\n  if !exists('vimproc#readdir')\n    let s:cached_files[getcwd()] += neocomplcache#util#glob('.*')\n  endif\nendfunction\"}}}\n\nfunction! neocomplcache#sources#filename_complete#define() \"{{{\n  return s:source\nendfunction\"}}}\n\nfunction! neocomplcache#sources#filename_complete#get_complete_words(complete_str, path) \"{{{\n  if !neocomplcache#is_enabled()\n    return []\n  endif\n\n  return s:get_glob_files(a:complete_str, a:path)\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/sources/filename_include.vim",
    "content": "\"=============================================================================\n\" FILE: filename_include.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 29 May 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\n\" Global options definition. \"{{{\nif !exists('g:neocomplcache_include_patterns')\n  let g:neocomplcache_include_patterns = {}\nendif\nif !exists('g:neocomplcache_include_exprs')\n  let g:neocomplcache_include_exprs = {}\nendif\nif !exists('g:neocomplcache_include_paths')\n  let g:neocomplcache_include_paths = {}\nendif\nif !exists('g:neocomplcache_include_suffixes')\n  let g:neocomplcache_include_suffixes = {}\nendif\n\"}}}\n\nlet s:source = {\n      \\ 'name' : 'filename_include',\n      \\ 'kind' : 'manual',\n      \\ 'mark' : '[FI]',\n      \\ 'rank' : 10,\n      \\ 'min_pattern_length' :\n      \\        g:neocomplcache_auto_completion_start_length,\n      \\}\n\nfunction! s:source.initialize() \"{{{\n  \" Initialize.\n\n  \" Initialize filename include expr. \"{{{\n  let g:neocomplcache_filename_include_exprs =\n        \\ get(g:, 'neocomplcache_filename_include_exprs', {})\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_filename_include_exprs',\n        \\ 'perl',\n        \\ 'fnamemodify(substitute(v:fname, \"/\", \"::\", \"g\"), \":r\")')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_filename_include_exprs',\n        \\ 'ruby,python,java,d',\n        \\ 'fnamemodify(substitute(v:fname, \"/\", \".\", \"g\"), \":r\")')\n  \"}}}\n\n  \" Initialize filename include extensions. \"{{{\n  let g:neocomplcache_filename_include_exts =\n        \\ get(g:, 'neocomplcache_filename_include_exts', {})\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_filename_include_exts',\n        \\ 'c', ['h'])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_filename_include_exts',\n        \\ 'cpp', ['', 'h', 'hpp', 'hxx'])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_filename_include_exts',\n        \\ 'perl', ['pm'])\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_filename_include_exts',\n        \\ 'java', ['java'])\n  \"}}}\nendfunction\"}}}\nfunction! s:source.finalize() \"{{{\nendfunction\"}}}\n\nfunction! s:source.get_keyword_pos(cur_text) \"{{{\n  let filetype = neocomplcache#get_context_filetype()\n\n  \" Not Filename pattern.\n  if exists('g:neocomplcache_include_patterns')\n    let pattern = get(g:neocomplcache_include_patterns, filetype,\n        \\      &l:include)\n  else\n    let pattern = ''\n  endif\n  if neocomplcache#is_auto_complete()\n        \\ && (pattern == '' || a:cur_text !~ pattern)\n        \\ && a:cur_text =~ '\\*$\\|\\.\\.\\+$\\|/c\\%[ygdrive/]$'\n    \" Skip filename completion.\n    return -1\n  endif\n\n  \" Check include pattern.\n  let pattern = get(g:neocomplcache_include_patterns, filetype,\n        \\      &l:include)\n  if pattern == '' || a:cur_text !~ pattern\n    return -1\n  endif\n\n  let match_end = matchend(a:cur_text, pattern)\n  let complete_str = matchstr(a:cur_text[match_end :], '\\f\\+')\n\n  let expr = get(g:neocomplcache_include_exprs, filetype,\n        \\      &l:includeexpr)\n  if expr != ''\n    let cur_text =\n          \\ substitute(eval(substitute(expr,\n          \\ 'v:fname', string(complete_str), 'g')),\n          \\  '\\.\\w*$', '', '')\n  endif\n\n  let complete_pos = len(a:cur_text) - len(complete_str)\n  if neocomplcache#is_sources_complete() && complete_pos < 0\n    let complete_pos = len(a:cur_text)\n  endif\n\n  return complete_pos\nendfunction\"}}}\n\nfunction! s:source.get_complete_words(complete_pos, complete_str) \"{{{\n  return s:get_include_files(a:complete_str)\nendfunction\"}}}\n\nfunction! s:get_include_files(complete_str) \"{{{\n  let filetype = neocomplcache#get_context_filetype()\n\n  let path = neocomplcache#util#substitute_path_separator(\n        \\ get(g:neocomplcache_include_paths, filetype,\n        \\   &l:path))\n  let pattern = get(g:neocomplcache_include_patterns, filetype,\n        \\ &l:include)\n  let expr = get(g:neocomplcache_include_exprs, filetype,\n        \\ &l:includeexpr)\n  let reverse_expr = get(g:neocomplcache_filename_include_exprs, filetype,\n        \\ '')\n  let exts = get(g:neocomplcache_filename_include_exts, filetype,\n        \\ [])\n\n  let line = neocomplcache#get_cur_text()\n  if line =~ '^\\s*\\<require_relative\\>' && &filetype =~# 'ruby'\n    \" For require_relative.\n    let path = '.'\n  endif\n\n  let match_end = matchend(line, pattern)\n  let complete_str = matchstr(line[match_end :], '\\f\\+')\n  if expr != ''\n    let complete_str =\n          \\ substitute(eval(substitute(expr,\n          \\ 'v:fname', string(complete_str), 'g')), '\\.\\w*$', '', '')\n  endif\n\n  \" Path search.\n  let glob = (complete_str !~ '\\*$')?\n        \\ complete_str . '*' : complete_str\n  let cwd = getcwd()\n  let bufdirectory = neocomplcache#util#substitute_path_separator(\n        \\ fnamemodify(expand('%'), ':p:h'))\n  let dir_list = []\n  let file_list = s:get_default_include_files(filetype)\n  for subpath in split(path, '[,;]')\n    let dir = (subpath == '.') ? bufdirectory : subpath\n    if !isdirectory(dir)\n      continue\n    endif\n\n    execute 'lcd' fnameescape(dir)\n\n    for word in split(\n          \\ neocomplcache#util#substitute_path_separator(\n          \\   glob(glob)), '\\n')\n      let dict = { 'word' : word }\n\n      call add(isdirectory(word) ? dir_list : file_list, dict)\n\n      let abbr = dict.word\n      if isdirectory(word)\n        let abbr .= '/'\n        if g:neocomplcache_enable_auto_delimiter\n          let dict.word .= '/'\n        endif\n      elseif !empty(exts) &&\n            \\ index(exts, fnamemodify(dict.word, ':e')) < 0\n        \" Skip.\n        continue\n      endif\n      let dict.abbr = abbr\n\n      if reverse_expr != ''\n        \" Convert filename.\n        let dict.word = eval(substitute(reverse_expr,\n              \\ 'v:fname', string(dict.word), 'g'))\n        let dict.abbr = eval(substitute(reverse_expr,\n              \\ 'v:fname', string(dict.abbr), 'g'))\n      else\n        \" Escape word.\n        let dict.word = escape(dict.word, ' ;*?[]\"={}''')\n      endif\n    endfor\n  endfor\n  execute 'lcd' fnameescape(cwd)\n\n  return neocomplcache#keyword_filter(dir_list, a:complete_str)\n        \\ + neocomplcache#keyword_filter(file_list, a:complete_str)\nendfunction\"}}}\n\nfunction! s:get_default_include_files(filetype) \"{{{\n  let files = []\n\n  if a:filetype ==# 'python' || a:filetype ==# 'python3'\n    let files = ['sys']\n  endif\n\n  return map(files, \"{ 'word' : v:val }\")\nendfunction\"}}}\n\nfunction! neocomplcache#sources#filename_include#define() \"{{{\n  return s:source\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/sources/include_complete.vim",
    "content": "\"=============================================================================\n\" FILE: include_complete.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 26 Sep 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nlet s:source = {\n      \\ 'name' : 'include_complete',\n      \\ 'kind' : 'keyword',\n      \\ 'rank' : 8,\n      \\}\n\nfunction! s:source.initialize() \"{{{\n  call s:initialize_variables()\n\n  if neocomplcache#has_vimproc()\n    augroup neocomplcache\n      \" Caching events\n      autocmd BufWritePost * call s:check_buffer('', 0)\n      autocmd CursorHold * call s:check_cache()\n    augroup END\n  endif\n\n  call neocomplcache#util#set_default(\n        \\ 'g:neocomplcache_include_max_processes', 20)\n\n  \" Create cache directory.\n  if !isdirectory(neocomplcache#get_temporary_directory() . '/include_cache')\n     \\ && !neocomplcache#util#is_sudo()\n    call mkdir(neocomplcache#get_temporary_directory()\n          \\ . '/include_cache', 'p')\n  endif\n\n  if neocomplcache#exists_echodoc()\n    call echodoc#register('include_complete', s:doc_dict)\n  endif\nendfunction\"}}}\n\nfunction! s:source.finalize() \"{{{\n  delcommand NeoComplCacheCachingInclude\n\n  if neocomplcache#exists_echodoc()\n    call echodoc#unregister('include_complete')\n  endif\nendfunction\"}}}\n\nfunction! s:source.get_keyword_list(complete_str) \"{{{\n  if neocomplcache#within_comment()\n    return []\n  endif\n\n  if !has_key(s:include_info, bufnr('%'))\n    \" Auto caching.\n    call s:check_buffer('', 0)\n  endif\n\n  let keyword_list = []\n\n  \" Check caching.\n  for include in s:include_info[bufnr('%')].include_files\n    call neocomplcache#cache#check_cache(\n          \\ 'include_cache', include, s:async_include_cache, s:include_cache)\n    if has_key(s:include_cache, include)\n      let s:cache_accessed_time[include] = localtime()\n      let keyword_list += neocomplcache#dictionary_filter(\n            \\ s:include_cache[include], a:complete_str)\n    endif\n  endfor\n\n  return neocomplcache#keyword_filter(\n        \\ neocomplcache#dup_filter(keyword_list), a:complete_str)\nendfunction\"}}}\n\nfunction! neocomplcache#sources#include_complete#define() \"{{{\n  return s:source\nendfunction\"}}}\n\nfunction! neocomplcache#sources#include_complete#get_include_files(bufnumber) \"{{{\n  if has_key(s:include_info, a:bufnumber)\n    return copy(s:include_info[a:bufnumber].include_files)\n  else\n    return s:get_buffer_include_files(a:bufnumber)\n  endif\nendfunction\"}}}\n\nfunction! neocomplcache#sources#include_complete#get_include_tags(bufnumber) \"{{{\n  return filter(map(\n        \\ neocomplcache#sources#include_complete#get_include_files(a:bufnumber),\n        \\ \"neocomplcache#cache#encode_name('tags_output', v:val)\"),\n        \\ 'filereadable(v:val)')\nendfunction\"}}}\n\n\" For Debug.\nfunction! neocomplcache#sources#include_complete#get_current_include_files() \"{{{\n  return s:get_buffer_include_files(bufnr('%'))\nendfunction\"}}}\n\n\" For echodoc. \"{{{\nlet s:doc_dict = {\n      \\ 'name' : 'include_complete',\n      \\ 'rank' : 5,\n      \\ 'filetypes' : {},\n      \\ }\nfunction! s:doc_dict.search(cur_text) \"{{{\n  if &filetype ==# 'vim' || !has_key(s:include_info, bufnr('%'))\n    return []\n  endif\n\n  let completion_length = 2\n\n  \" Collect words.\n  let words = []\n  let i = 0\n  while i >= 0\n    let word = matchstr(a:cur_text, '\\k\\+', i)\n    if len(word) >= completion_length\n      call add(words, word)\n    endif\n\n    let i = matchend(a:cur_text, '\\k\\+', i)\n  endwhile\n\n  for word in reverse(words)\n    let key = tolower(word[: completion_length-1])\n\n    for include in filter(copy(s:include_info[bufnr('%')].include_files),\n          \\ 'has_key(s:include_cache, v:val) && has_key(s:include_cache[v:val], key)')\n      for matched in filter(values(s:include_cache[include][key]),\n            \\ 'v:val.word ==# word && has_key(v:val, \"kind\") && v:val.kind != \"\"')\n        let ret = []\n\n        let match = match(matched.abbr, neocomplcache#escape_match(word))\n        if match > 0\n          call add(ret, { 'text' : matched.abbr[ : match-1] })\n        endif\n\n        call add(ret, { 'text' : word, 'highlight' : 'Identifier' })\n        call add(ret, { 'text' : matched.abbr[match+len(word) :] })\n\n        if match > 0 || len(ret[-1].text) > 0\n          return ret\n        endif\n      endfor\n    endfor\n  endfor\n\n  return []\nendfunction\"}}}\n\"}}}\n\nfunction! s:check_buffer(bufnumber, is_force) \"{{{\n  if !neocomplcache#is_enabled_source('include_complete')\n    return\n  endif\n\n  let bufnumber = (a:bufnumber == '') ? bufnr('%') : a:bufnumber\n  let filename = fnamemodify(bufname(bufnumber), ':p')\n\n  if !has_key(s:include_info, bufnumber)\n    \" Initialize.\n    let s:include_info[bufnumber] = {\n          \\ 'include_files' : [], 'lines' : [],\n          \\ 'async_files' : {},\n          \\ }\n  endif\n\n  if !executable(g:neocomplcache_ctags_program)\n        \\ || (!a:is_force && !neocomplcache#has_vimproc())\n    return\n  endif\n\n  let include_info = s:include_info[bufnumber]\n\n  if a:is_force || include_info.lines !=# getbufline(bufnumber, 1, 100)\n    let include_info.lines = getbufline(bufnumber, 1, 100)\n\n    \" Check include files contained bufname.\n    let include_files = s:get_buffer_include_files(bufnumber)\n\n    \" Check include files from function.\n    let filetype = getbufvar(a:bufnumber, '&filetype')\n    let function = get(g:neocomplcache_include_functions, filetype, '')\n    if function != '' && getbufvar(bufnumber, '&buftype') !~ 'nofile'\n      let path = get(g:neocomplcache_include_paths, filetype,\n            \\ getbufvar(a:bufnumber, '&path'))\n      let include_files += call(function,\n            \\ [getbufline(bufnumber, 1, (a:is_force ? '$' : 1000)), path])\n    endif\n\n    if getbufvar(bufnumber, '&buftype') !~ 'nofile'\n          \\ && filereadable(filename)\n      call add(include_files, filename)\n    endif\n    let include_info.include_files = neocomplcache#util#uniq(include_files)\n  endif\n\n  if g:neocomplcache_include_max_processes <= 0\n    return\n  endif\n\n  let filetype = getbufvar(bufnumber, '&filetype')\n  if filetype == ''\n    let filetype = 'nothing'\n  endif\n\n  for filename in include_info.include_files\n    if (a:is_force || !has_key(include_info.async_files, filename))\n          \\ && !has_key(s:include_cache, filename)\n      if !a:is_force && has_key(s:async_include_cache, filename)\n            \\ && len(s:async_include_cache[filename])\n            \\            >= g:neocomplcache_include_max_processes\n        break\n      endif\n\n      \" Caching.\n      let s:async_include_cache[filename]\n            \\ = [ s:initialize_include(filename, filetype) ]\n      let include_info.async_files[filename] = 1\n    endif\n  endfor\nendfunction\"}}}\nfunction! s:get_buffer_include_files(bufnumber) \"{{{\n  let filetype = getbufvar(a:bufnumber, '&filetype')\n  if filetype == ''\n    return []\n  endif\n\n  if (filetype ==# 'python' || filetype ==# 'python3')\n        \\ && (executable('python') || executable('python3'))\n    \" Initialize python path pattern.\n\n    let path = ''\n    if executable('python3')\n      let path .= ',' . neocomplcache#system('python3 -',\n          \\ 'import sys;sys.stdout.write(\",\".join(sys.path))')\n      call neocomplcache#util#set_default_dictionary(\n            \\ 'g:neocomplcache_include_paths', 'python3', path)\n    endif\n    if executable('python')\n      let path .= ',' . neocomplcache#system('python -',\n          \\ 'import sys;sys.stdout.write(\",\".join(sys.path))')\n    endif\n    let path = join(neocomplcache#util#uniq(filter(\n          \\ split(path, ',', 1), \"v:val != ''\")), ',')\n    call neocomplcache#util#set_default_dictionary(\n          \\ 'g:neocomplcache_include_paths', 'python', path)\n  elseif filetype ==# 'cpp' && isdirectory('/usr/include/c++')\n    \" Add cpp path.\n    call neocomplcache#util#set_default_dictionary(\n          \\ 'g:neocomplcache_include_paths', 'cpp',\n          \\ getbufvar(a:bufnumber, '&path') .\n          \\ ','.join(split(glob('/usr/include/c++/*'), '\\n'), ','))\n  endif\n\n  let pattern = get(g:neocomplcache_include_patterns, filetype,\n        \\ getbufvar(a:bufnumber, '&include'))\n  if pattern == ''\n    return []\n  endif\n  let path = get(g:neocomplcache_include_paths, filetype,\n        \\ getbufvar(a:bufnumber, '&path'))\n  let expr = get(g:neocomplcache_include_exprs, filetype,\n        \\ getbufvar(a:bufnumber, '&includeexpr'))\n  if has_key(g:neocomplcache_include_suffixes, filetype)\n    let suffixes = &l:suffixesadd\n  endif\n\n  \" Change current directory.\n  let cwd_save = getcwd()\n  let buffer_dir = fnamemodify(bufname(a:bufnumber), ':p:h')\n  if isdirectory(buffer_dir)\n    execute 'lcd' fnameescape(buffer_dir)\n  endif\n\n  let include_files = s:get_include_files(0,\n        \\ getbufline(a:bufnumber, 1, 100), filetype, pattern, path, expr)\n\n  if isdirectory(buffer_dir)\n    execute 'lcd' fnameescape(cwd_save)\n  endif\n\n  \" Restore option.\n  if has_key(g:neocomplcache_include_suffixes, filetype)\n    let &l:suffixesadd = suffixes\n  endif\n\n  return include_files\nendfunction\"}}}\nfunction! s:get_include_files(nestlevel, lines, filetype, pattern, path, expr) \"{{{\n  let include_files = []\n  for line in a:lines \"{{{\n    if line =~ a:pattern\n      let match_end = matchend(line, a:pattern)\n      if a:expr != ''\n        let eval = substitute(a:expr, 'v:fname',\n              \\ string(matchstr(line[match_end :], '\\f\\+')), 'g')\n        let filename = fnamemodify(findfile(eval(eval), a:path), ':p')\n      else\n        let filename = fnamemodify(findfile(\n              \\ matchstr(line[match_end :], '\\f\\+'), a:path), ':p')\n      endif\n\n      if filereadable(filename)\n        call add(include_files, filename)\n\n        if (a:filetype == 'c' || a:filetype == 'cpp') && a:nestlevel < 1\n          let include_files += s:get_include_files(\n                \\ a:nestlevel + 1, readfile(filename)[:100],\n                \\ a:filetype, a:pattern, a:path, a:expr)\n        endif\n      elseif isdirectory(filename) && a:filetype ==# 'java'\n        \" For Java import with *.\n        \" Ex: import lejos.nxt.*\n        let include_files +=\n              \\ neocomplcache#util#glob(filename . '/*.java')\n      endif\n    endif\n  endfor\"}}}\n\n  return include_files\nendfunction\"}}}\n\nfunction! s:check_cache() \"{{{\n  if neocomplcache#is_disabled_source('include_complete')\n    return\n  endif\n\n  let release_accessd_time = localtime() - g:neocomplcache_release_cache_time\n\n  for key in keys(s:include_cache)\n    if has_key(s:cache_accessed_time, key)\n          \\ && s:cache_accessed_time[key] < release_accessd_time\n      call remove(s:include_cache, key)\n    endif\n  endfor\nendfunction\"}}}\n\nfunction! s:initialize_include(filename, filetype) \"{{{\n  \" Initialize include list from tags.\n  return {\n        \\ 'filename' : a:filename,\n        \\ 'cachename' : neocomplcache#cache#async_load_from_tags(\n        \\              'include_cache', a:filename, a:filetype, 'I', 1)\n        \\ }\nendfunction\"}}}\nfunction! neocomplcache#sources#include_complete#caching_include(bufname) \"{{{\n  let bufnumber = (a:bufname == '') ? bufnr('%') : bufnr(a:bufname)\n  if has_key(s:async_include_cache, bufnumber)\n        \\ && filereadable(s:async_include_cache[bufnumber].cache_name)\n    \" Delete old cache.\n    call delete(s:async_include_cache[bufnumber].cache_name)\n  endif\n\n  \" Initialize.\n  if has_key(s:include_info, bufnumber)\n    call remove(s:include_info, bufnumber)\n  endif\n\n  call s:check_buffer(bufnumber, 1)\nendfunction\"}}}\n\n\" Analyze include files functions.\nfunction! neocomplcache#sources#include_complete#analyze_vim_include_files(lines, path) \"{{{\n  let include_files = []\n  let dup_check = {}\n  for line in a:lines\n    if line =~ '\\<\\h\\w*#' && line !~ '\\<function!\\?\\>'\n      let filename = 'autoload/' . substitute(matchstr(line, '\\<\\%(\\h\\w*#\\)*\\h\\w*\\ze#'),\n            \\ '#', '/', 'g') . '.vim'\n      if filename == '' || has_key(dup_check, filename)\n        continue\n      endif\n      let dup_check[filename] = 1\n\n      let filename = fnamemodify(findfile(filename, &runtimepath), ':p')\n      if filereadable(filename)\n        call add(include_files, filename)\n      endif\n    endif\n  endfor\n\n  return include_files\nendfunction\"}}}\nfunction! neocomplcache#sources#include_complete#analyze_ruby_include_files(lines, path) \"{{{\n  let include_files = []\n  let dup_check = {}\n  for line in a:lines\n    if line =~ '\\<autoload\\>'\n      let args = split(line, ',')\n      if len(args) < 2\n        continue\n      endif\n      let filename = substitute(matchstr(args[1], '[\"'']\\zs\\f\\+\\ze[\"'']'),\n            \\ '\\.', '/', 'g') . '.rb'\n      if filename == '' || has_key(dup_check, filename)\n        continue\n      endif\n      let dup_check[filename] = 1\n\n      let filename = fnamemodify(findfile(filename, a:path), ':p')\n      if filereadable(filename)\n        call add(include_files, filename)\n      endif\n    endif\n  endfor\n\n  return include_files\nendfunction\"}}}\n\nfunction! s:initialize_variables() \"{{{\n  let s:include_info = {}\n  let s:include_cache = {}\n  let s:cache_accessed_time = {}\n  let s:async_include_cache = {}\n  let s:cached_pattern = {}\n\n  \" Initialize include pattern. \"{{{\n  let g:neocomplcache_include_patterns =\n        \\ get(g:, 'neocomplcache_include_patterns', {})\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_include_patterns',\n        \\ 'java,haskell', '^\\s*\\<import')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_include_patterns',\n        \\ 'cs', '^\\s*\\<using')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_include_patterns',\n        \\ 'ruby', '^\\s*\\<\\%(load\\|require\\|require_relative\\)\\>')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_include_patterns',\n        \\ 'c,cpp', '^\\s*#\\s*include')\n  \"}}}\n  \" Initialize expr pattern. \"{{{\n  call neocomplcache#util#set_default(\n        \\ 'g:neocomplcache_include_exprs', {})\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_include_exprs',\n        \\ 'haskell,cs',\n        \\ \"substitute(v:fname, '\\\\.', '/', 'g')\")\n  \"}}}\n  \" Initialize path pattern. \"{{{\n  call neocomplcache#util#set_default(\n        \\ 'g:neocomplcache_include_paths', {})\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_include_paths', 'c,cpp',\n        \\ &path)\n  \"}}}\n  \" Initialize include suffixes. \"{{{\n  call neocomplcache#util#set_default(\n        \\ 'g:neocomplcache_include_suffixes', {})\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_include_suffixes',\n        \\ 'haskell', '.hs')\n  \"}}}\n  \" Initialize include functions. \"{{{\n  call neocomplcache#util#set_default(\n        \\ 'g:neocomplcache_include_functions', {})\n  \" call neocomplcache#util#set_default_dictionary(\n  \"       \\ 'g:neocomplcache_include_functions', 'vim',\n  \"       \\ 'neocomplcache#sources#include_complete#analyze_vim_include_files')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_include_functions', 'ruby',\n        \\ 'neocomplcache#sources#include_complete#analyze_ruby_include_files')\n  \"}}}\nendfunction\"}}}\n\nif !exists('s:include_info')\n  call s:initialize_variables()\nendif\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/sources/member_complete.vim",
    "content": "\"=============================================================================\n\" FILE: member_complete.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 01 May 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\n\" Important variables.\nif !exists('s:member_sources')\n  let s:member_sources = {}\nendif\n\nlet s:source = {\n      \\ 'name' : 'member_complete',\n      \\ 'kind' : 'manual',\n      \\ 'mark' : '[M]',\n      \\ 'rank' : 5,\n      \\ 'min_pattern_length' : 0,\n      \\}\n\nfunction! s:source.initialize() \"{{{\n  augroup neocomplcache \"{{{\n    \" Caching events\n    autocmd CursorHold * call s:caching_current_buffer(line('.')-10, line('.')+10)\n    autocmd InsertEnter,InsertLeave *\n          \\ call neocomplcache#sources#member_complete#caching_current_line()\n  augroup END\"}}}\n\n  \" Initialize member prefix patterns. \"{{{\n  if !exists('g:neocomplcache_member_prefix_patterns')\n    let g:neocomplcache_member_prefix_patterns = {}\n  endif\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_member_prefix_patterns',\n        \\ 'c,cpp,objc,objcpp', '\\.\\|->')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_member_prefix_patterns',\n        \\ 'perl,php', '->')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_member_prefix_patterns',\n        \\ 'cs,java,javascript,d,vim,ruby,python,perl6,scala,vb', '\\.')\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_member_prefix_patterns',\n        \\ 'lua', '\\.\\|:')\n  \"}}}\n\n  \" Initialize member patterns. \"{{{\n  if !exists('g:neocomplcache_member_patterns')\n    let g:neocomplcache_member_patterns = {}\n  endif\n  call neocomplcache#util#set_default_dictionary(\n        \\ 'g:neocomplcache_member_patterns',\n        \\'default', '\\h\\w*\\%(()\\|\\[\\h\\w*\\]\\)\\?')\n  \"}}}\n\n  \" Initialize script variables. \"{{{\n  let s:member_sources = {}\n  \"}}}\nendfunction\n\"}}}\n\nfunction! s:source.get_keyword_pos(cur_text) \"{{{\n  \" Check member prefix pattern.\n  let filetype = neocomplcache#get_context_filetype()\n  if !has_key(g:neocomplcache_member_prefix_patterns, filetype)\n        \\ || g:neocomplcache_member_prefix_patterns[filetype] == ''\n    return -1\n  endif\n\n  let member = s:get_member_pattern(filetype)\n  let prefix = g:neocomplcache_member_prefix_patterns[filetype]\n  let complete_pos = matchend(a:cur_text,\n        \\ '\\%(' . member . '\\%(' . prefix . '\\m\\)\\)\\+\\ze\\w*$')\n  return complete_pos\nendfunction\"}}}\n\nfunction! s:source.get_complete_words(complete_pos, complete_str) \"{{{\n  \" Check member prefix pattern.\n  let filetype = neocomplcache#get_context_filetype()\n  if !has_key(g:neocomplcache_member_prefix_patterns, filetype)\n        \\ || g:neocomplcache_member_prefix_patterns[filetype] == ''\n    return []\n  endif\n\n  let cur_text = neocomplcache#get_cur_text()\n  let var_name = matchstr(cur_text,\n        \\ '\\%(' . s:get_member_pattern(filetype) . '\\%(' .\n        \\ g:neocomplcache_member_prefix_patterns[filetype] . '\\m\\)\\)\\+\\ze\\w*$')\n  if var_name == ''\n    return []\n  endif\n\n  return neocomplcache#keyword_filter(\n        \\ copy(s:get_member_list(cur_text, var_name)), a:complete_str)\nendfunction\"}}}\n\nfunction! neocomplcache#sources#member_complete#define() \"{{{\n  return s:source\nendfunction\"}}}\n\nfunction! neocomplcache#sources#member_complete#caching_current_line() \"{{{\n  \" Current line caching.\n  return s:caching_current_buffer(line('.')-1, line('.')+1)\nendfunction\"}}}\nfunction! neocomplcache#sources#member_complete#caching_current_buffer() \"{{{\n  \" Current line caching.\n  return s:caching_current_buffer(1, line('$'))\nendfunction\"}}}\nfunction! s:caching_current_buffer(start, end) \"{{{\n  \" Current line caching.\n\n  if !has_key(s:member_sources, bufnr('%'))\n    call s:initialize_source(bufnr('%'))\n  endif\n\n  let filetype = neocomplcache#get_context_filetype(1)\n  if !has_key(g:neocomplcache_member_prefix_patterns, filetype)\n        \\ || g:neocomplcache_member_prefix_patterns[filetype] == ''\n    return\n  endif\n\n  let source = s:member_sources[bufnr('%')]\n  let keyword_pattern =\n        \\ '\\%(' . s:get_member_pattern(filetype) . '\\%('\n        \\ . g:neocomplcache_member_prefix_patterns[filetype]\n        \\ . '\\m\\)\\)\\+' . s:get_member_pattern(filetype)\n  let keyword_pattern2 = '^'.keyword_pattern\n  let member_pattern = s:get_member_pattern(filetype) . '$'\n\n  \" Cache member pattern.\n  let [line_num, max_lines] = [a:start, a:end]\n  for line in getline(a:start, a:end)\n    let match = match(line, keyword_pattern)\n\n    while match >= 0 \"{{{\n      let match_str = matchstr(line, keyword_pattern2, match)\n\n      \" Next match.\n      let match = matchend(line, keyword_pattern, match + len(match_str))\n\n      while match_str != ''\n        let member_name = matchstr(match_str, member_pattern)\n        if member_name == ''\n          break\n        endif\n        let var_name = match_str[ : -len(member_name)-1]\n\n        if !has_key(source.member_cache, var_name)\n          let source.member_cache[var_name] = {}\n        endif\n        if !has_key(source.member_cache[var_name], member_name)\n          let source.member_cache[var_name][member_name] = member_name\n        endif\n\n        let match_str = matchstr(var_name, keyword_pattern2)\n      endwhile\n    endwhile\"}}}\n  endfor\nendfunction\"}}}\n\nfunction! s:get_member_list(cur_text, var_name) \"{{{\n  let keyword_list = []\n  for [key, source] in filter(s:get_sources_list(),\n        \\ 'has_key(v:val[1].member_cache, a:var_name)')\n    let keyword_list +=\n          \\ values(source.member_cache[a:var_name])\n  endfor\n\n  return keyword_list\nendfunction\"}}}\n\nfunction! s:get_sources_list() \"{{{\n  let sources_list = []\n\n  let filetypes_dict = {}\n  for filetype in neocomplcache#get_source_filetypes(\n        \\ neocomplcache#get_context_filetype())\n    let filetypes_dict[filetype] = 1\n  endfor\n\n  for [key, source] in items(s:member_sources)\n    if has_key(filetypes_dict, source.filetype)\n          \\ || has_key(filetypes_dict, '_')\n          \\ || bufnr('%') == key\n          \\ || (bufname('%') ==# '[Command Line]' && bufnr('#') == key)\n      call add(sources_list, [key, source])\n    endif\n  endfor\n\n  return sources_list\nendfunction\"}}}\n\nfunction! s:initialize_source(srcname) \"{{{\n  let path = fnamemodify(bufname(a:srcname), ':p')\n  let filename = fnamemodify(path, ':t')\n  if filename == ''\n    let filename = '[No Name]'\n    let path .= '/[No Name]'\n  endif\n\n  \" Set cache line count.\n  let buflines = getbufline(a:srcname, 1, '$')\n  let end_line = len(buflines)\n\n  let ft = getbufvar(a:srcname, '&filetype')\n  if ft == ''\n    let ft = 'nothing'\n  endif\n\n  let s:member_sources[a:srcname] = {\n        \\ 'member_cache' : {}, 'filetype' : ft,\n        \\ 'keyword_pattern' : neocomplcache#get_keyword_pattern(ft),\n        \\}\nendfunction\"}}}\n\nfunction! s:get_member_pattern(filetype) \"{{{\n  return has_key(g:neocomplcache_member_patterns, a:filetype) ?\n        \\ g:neocomplcache_member_patterns[a:filetype] :\n        \\ g:neocomplcache_member_patterns['default']\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/sources/omni_complete.vim",
    "content": "\"=============================================================================\n\" FILE: omni_complete.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 29 May 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nlet s:source = {\n      \\ 'name' : 'omni_complete',\n      \\ 'kind' : 'manual',\n      \\ 'compare_func' : 'neocomplcache#compare_nothing',\n      \\ 'mark' : '[O]',\n      \\ 'rank' : 50,\n      \\}\n\nfunction! s:source.initialize() \"{{{\n  \" Initialize omni completion pattern. \"{{{\n  if !exists('g:neocomplcache_omni_patterns')\n    let g:neocomplcache_omni_patterns = {}\n  endif\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_omni_patterns',\n        \\'html,xhtml,xml,markdown',\n        \\'<[^>]*')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_omni_patterns',\n        \\'css,scss,sass',\n        \\'^\\s\\+\\w\\+\\|\\w\\+[):;]\\?\\s\\+\\w*\\|[@!]')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_omni_patterns',\n        \\'javascript',\n        \\'[^. \\t]\\.\\%(\\h\\w*\\)\\?')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_omni_patterns',\n        \\'actionscript',\n        \\'[^. \\t][.:]\\h\\w*')\n  \"call neocomplcache#util#set_default_dictionary(\n        \"\\'g:neocomplcache_omni_patterns',\n        \"\\'php',\n        \"\\'[^. \\t]->\\h\\w*\\|\\h\\w*::')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_omni_patterns',\n        \\'java',\n        \\'\\%(\\h\\w*\\|)\\)\\.')\n  \"call neocomplcache#util#set_default_dictionary(\n        \"\\'g:neocomplcache_omni_patterns',\n        \"\\'perl',\n        \"\\'\\h\\w*->\\h\\w*\\|\\h\\w*::')\n  \"call neocomplcache#util#set_default_dictionary(\n        \"\\'g:neocomplcache_omni_patterns',\n        \"\\'c',\n        \"\\'[^.[:digit:] *\\t]\\%(\\.\\|->\\)'\n  \"call neocomplcache#util#set_default_dictionary(\n        \"\\'g:neocomplcache_omni_patterns',\n        \"\\'cpp',\n        \"\\'[^.[:digit:] *\\t]\\%(\\.\\|->\\)\\|\\h\\w*::')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_omni_patterns',\n        \\'objc',\n        \\'[^.[:digit:] *\\t]\\%(\\.\\|->\\)')\n  call neocomplcache#util#set_default_dictionary(\n        \\'g:neocomplcache_omni_patterns',\n        \\'objj',\n        \\'[\\[ \\.]\\w\\+$\\|:\\w*$')\n\n  \" External language interface check.\n  if has('ruby')\n    \" call neocomplcache#util#set_default_dictionary(\n          \"\\'g:neocomplcache_omni_patterns', 'ruby',\n          \"\\'[^. *\\t]\\.\\h\\w*\\|\\h\\w*::')\n  endif\n  if has('python/dyn') || has('python3/dyn')\n        \\ || has('python') || has('python3')\n    call neocomplcache#util#set_default_dictionary(\n          \\'g:neocomplcache_omni_patterns',\n          \\'python', '[^. \\t]\\.\\w*')\n  endif\n  \"}}}\nendfunction\"}}}\nfunction! s:source.finalize() \"{{{\nendfunction\"}}}\n\nfunction! s:source.get_keyword_pos(cur_text) \"{{{\n  let syn_name = neocomplcache#helper#get_syn_name(1)\n  if syn_name ==# 'Comment' || syn_name ==# 'String'\n    \" Skip omni_complete in string literal.\n    return -1\n  endif\n\n  let filetype = neocomplcache#get_context_filetype()\n  let s:complete_results = s:set_complete_results_pos(\n        \\ s:get_omni_funcs(filetype), a:cur_text)\n\n  return s:get_complete_pos(s:complete_results)\nendfunction\"}}}\n\nfunction! s:source.get_complete_words(complete_pos, complete_str) \"{{{\n  return s:get_candidates(\n        \\ s:set_complete_results_words(s:complete_results),\n        \\ a:complete_pos, a:complete_str)\nendfunction\"}}}\n\nfunction! neocomplcache#sources#omni_complete#define() \"{{{\n  return s:source\nendfunction\"}}}\n\nfunction! s:get_omni_funcs(filetype) \"{{{\n  let funcs = []\n  for ft in insert(split(a:filetype, '\\.'), '_')\n    if has_key(g:neocomplcache_omni_functions, ft)\n      let omnifuncs =\n            \\ (type(g:neocomplcache_omni_functions[ft]) == type([])) ?\n            \\ g:neocomplcache_omni_functions[ft] :\n            \\ [g:neocomplcache_omni_functions[ft]]\n    else\n      let omnifuncs = [&l:omnifunc]\n    endif\n\n    for omnifunc in omnifuncs\n      if neocomplcache#check_invalid_omnifunc(omnifunc)\n        \" omnifunc is irregal.\n        continue\n      endif\n\n      if get(g:neocomplcache_omni_patterns, omnifunc, '') != ''\n        let pattern = g:neocomplcache_omni_patterns[omnifunc]\n      elseif get(g:neocomplcache_omni_patterns, ft, '') != ''\n        let pattern = g:neocomplcache_omni_patterns[ft]\n      else\n        let pattern = ''\n      endif\n\n      if pattern == ''\n        continue\n      endif\n\n      call add(funcs, [omnifunc, pattern])\n    endfor\n  endfor\n\n  return neocomplcache#util#uniq(funcs)\nendfunction\"}}}\nfunction! s:get_omni_list(list) \"{{{\n  let omni_list = []\n\n  \" Convert string list.\n  for val in deepcopy(a:list)\n    let dict = (type(val) == type('') ?\n          \\ { 'word' : val } : val)\n    let dict.menu = '[O]' . get(dict, 'menu', '')\n    call add(omni_list, dict)\n\n    unlet val\n  endfor\n\n  return omni_list\nendfunction\"}}}\n\nfunction! s:set_complete_results_pos(funcs, cur_text) \"{{{\n  \" Try omnifunc completion. \"{{{\n  let complete_results = {}\n  for [omnifunc, pattern] in a:funcs\n    if neocomplcache#is_auto_complete()\n          \\ && a:cur_text !~ '\\%(' . pattern . '\\m\\)$'\n      continue\n    endif\n\n    \" Save pos.\n    let pos = getpos('.')\n\n    try\n      let complete_pos = call(omnifunc, [1, ''])\n    catch\n      call neocomplcache#print_error(\n            \\ 'Error occurred calling omnifunction: ' . omnifunc)\n      call neocomplcache#print_error(v:throwpoint)\n      call neocomplcache#print_error(v:exception)\n      let complete_pos = -1\n    finally\n      if getpos('.') != pos\n        call setpos('.', pos)\n      endif\n    endtry\n\n    if complete_pos < 0\n      continue\n    endif\n\n    let complete_str = a:cur_text[complete_pos :]\n\n    let complete_results[omnifunc] = {\n          \\ 'candidates' : [],\n          \\ 'complete_pos' : complete_pos,\n          \\ 'complete_str' : complete_str,\n          \\ 'omnifunc' : omnifunc,\n          \\}\n  endfor\n  \"}}}\n\n  return complete_results\nendfunction\"}}}\nfunction! s:set_complete_results_words(complete_results) \"{{{\n  \" Try source completion.\n  for [omnifunc, result] in items(a:complete_results)\n    if neocomplcache#complete_check()\n      return a:complete_results\n    endif\n\n    let pos = getpos('.')\n\n    \" Note: For rubycomplete problem.\n    let complete_str =\n          \\ (omnifunc == 'rubycomplete#Complete') ?\n          \\ '' : result.complete_str\n\n    try\n      let list = call(omnifunc, [0, complete_str])\n    catch\n      call neocomplcache#print_error(\n            \\ 'Error occurred calling omnifunction: ' . omnifunc)\n      call neocomplcache#print_error(v:throwpoint)\n      call neocomplcache#print_error(v:exception)\n      let list = []\n    finally\n      if getpos('.') != pos\n        call setpos('.', pos)\n      endif\n    endtry\n\n    if type(list) != type([])\n      \" Error.\n      return a:complete_results\n    endif\n\n    let list = s:get_omni_list(list)\n\n    let result.candidates = list\n  endfor\n\n  return a:complete_results\nendfunction\"}}}\nfunction! s:get_complete_pos(complete_results) \"{{{\n  if empty(a:complete_results)\n    return -1\n  endif\n\n  let complete_pos = col('.')\n  for result in values(a:complete_results)\n    if complete_pos > result.complete_pos\n      let complete_pos = result.complete_pos\n    endif\n  endfor\n\n  return complete_pos\nendfunction\"}}}\nfunction! s:get_candidates(complete_results, complete_pos, complete_str) \"{{{\n  \" Append prefix.\n  let candidates = []\n  let len_words = 0\n  for [source_name, result] in items(a:complete_results)\n    if result.complete_pos > a:complete_pos\n      let prefix = a:complete_str[: result.complete_pos\n            \\                            - a:complete_pos - 1]\n\n      for keyword in result.candidates\n        let keyword.word = prefix . keyword.word\n      endfor\n    endif\n\n    let candidates += result.candidates\n  endfor\n\n  return candidates\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/sources/syntax_complete.vim",
    "content": "\"=============================================================================\n\" FILE: syntax_complete.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 26 Sep 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\n\" Important variables.\nif !exists('s:syntax_list')\n  let s:syntax_list = {}\nendif\n\nlet s:source = {\n      \\ 'name' : 'syntax_complete',\n      \\ 'kind' : 'keyword',\n      \\ 'mark' : '[S]',\n      \\ 'rank' : 4,\n      \\}\n\nfunction! s:source.initialize() \"{{{\n  \" Set caching event.\n  autocmd neocomplcache Syntax * call s:caching()\n\n  \" Create cache directory.\n  if !isdirectory(neocomplcache#get_temporary_directory() . '/syntax_cache')\n     \\ && !neocomplcache#util#is_sudo()\n    call mkdir(neocomplcache#get_temporary_directory() . '/syntax_cache')\n  endif\n\n  \" Initialize check.\n  call s:caching()\nendfunction\"}}}\n\nfunction! s:source.finalize() \"{{{\n  delcommand NeoComplCacheCachingSyntax\nendfunction\"}}}\n\nfunction! s:source.get_keyword_list(complete_str) \"{{{\n  let list = []\n\n  let filetype = neocomplcache#get_context_filetype()\n  if !has_key(s:syntax_list, filetype)\n    call s:caching()\n  endif\n\n  for syntax in neocomplcache#get_sources_list(\n        \\ s:syntax_list, filetype)\n    let list += neocomplcache#dictionary_filter(syntax, a:complete_str)\n  endfor\n\n  return list\nendfunction\"}}}\n\nfunction! neocomplcache#sources#syntax_complete#define() \"{{{\n  return s:source\nendfunction\"}}}\n\nfunction! s:caching() \"{{{\n  if &filetype == '' || &filetype ==# 'vim'\n    return\n  endif\n\n  for filetype in neocomplcache#get_source_filetypes(&filetype)\n    if !has_key(s:syntax_list, filetype)\n      \" Check old cache.\n      let cache_name = neocomplcache#cache#encode_name('syntax_cache', &filetype)\n      let syntax_files = split(\n            \\ globpath(&runtimepath, 'syntax/'.&filetype.'.vim'), '\\n')\n      if getftime(cache_name) < 0 || (!empty(syntax_files)\n            \\ && getftime(cache_name) <= getftime(syntax_files[0]))\n        if filetype ==# &filetype\n          \" Caching from syn list.\n          let s:syntax_list[filetype] = s:caching_from_syn(filetype)\n        endif\n      else\n        let s:syntax_list[filetype] = neocomplcache#cache#index_load_from_cache(\n              \\      'syntax_cache', filetype, 1)\n      endif\n    endif\n  endfor\nendfunction\"}}}\n\nfunction! neocomplcache#sources#syntax_complete#recaching(filetype) \"{{{\n  if a:filetype == ''\n    let filetype = &filetype\n  else\n    let filetype = a:filetype\n  endif\n\n  \" Caching.\n  let s:syntax_list[filetype] = s:caching_from_syn(filetype)\nendfunction\"}}}\n\nfunction! s:caching_from_syn(filetype) \"{{{\n  call neocomplcache#print_caching(\n        \\ 'Caching syntax \"' . a:filetype . '\"... please wait.')\n\n  \" Get current syntax list.\n  redir => syntax_list\n  silent! syntax list\n  redir END\n\n  if syntax_list =~ '^E\\d\\+' || syntax_list =~ '^No Syntax items'\n    return []\n  endif\n\n  let group_name = ''\n  let keyword_pattern = neocomplcache#get_keyword_pattern(a:filetype)\n\n  let dup_check = {}\n\n  let filetype_pattern = tolower(a:filetype)\n\n  let keyword_lists = {}\n  for line in split(syntax_list, '\\n')\n    if line =~ '^\\h\\w\\+'\n      \" Change syntax group name.\n      let group_name = matchstr(line, '^\\S\\+')\n      let line = substitute(line, '^\\S\\+\\s*xxx', '', '')\n    endif\n\n    if line =~ 'Syntax items' || line =~ '^\\s*links to' ||\n          \\ line =~ '^\\s*nextgroup=' ||\n          \\ strridx(tolower(group_name), filetype_pattern) != 0\n      \" Next line.\n      continue\n    endif\n\n    let line = substitute(line, 'contained\\|skipwhite\\|skipnl\\|oneline', '', 'g')\n    let line = substitute(line, '^\\s*nextgroup=.*\\ze\\s', '', '')\n\n    if line =~ '^\\s*match'\n      let line = s:substitute_candidate(matchstr(line, '/\\zs[^/]\\+\\ze/'))\n    elseif line =~ '^\\s*start='\n      let line =\n            \\s:substitute_candidate(matchstr(line, 'start=/\\zs[^/]\\+\\ze/')) . ' ' .\n            \\s:substitute_candidate(matchstr(line, 'end=/zs[^/]\\+\\ze/'))\n    endif\n\n    \" Add keywords.\n    let match_num = 0\n    let completion_length = 2\n    let match_str = matchstr(line, keyword_pattern, match_num)\n    while match_str != ''\n      \" Ignore too short keyword.\n      if len(match_str) >= g:neocomplcache_min_syntax_length\n            \\ && !has_key(dup_check, match_str)\n            \\&& match_str =~ '^[[:print:]]\\+$'\n        let key = tolower(match_str[: completion_length-1])\n        if !has_key(keyword_lists, key)\n          let keyword_lists[key] = []\n        endif\n        call add(keyword_lists[key], match_str)\n\n        let dup_check[match_str] = 1\n      endif\n\n      let match_num += len(match_str)\n\n      let match_str = matchstr(line, keyword_pattern, match_num)\n    endwhile\n  endfor\n\n  \" Save syntax cache.\n  let unpack_lists = neocomplcache#unpack_dictionary(keyword_lists)\n  if !empty(unpack_lists)\n    call neocomplcache#cache#save_cache('syntax_cache', &filetype, unpack_lists)\n  endif\n\n  call neocomplcache#print_caching('')\n\n  return keyword_lists\nendfunction\"}}}\n\nfunction! s:substitute_candidate(candidate) \"{{{\n  let candidate = a:candidate\n\n  \" Collection.\n  let candidate = substitute(candidate,\n        \\'\\\\\\@<!\\[[^\\]]*\\]', ' ', 'g')\n\n  \" Delete.\n  let candidate = substitute(candidate,\n        \\'\\\\\\@<!\\%(\\\\[=?+]\\|\\\\%[\\|\\\\s\\*\\)', '', 'g')\n  \" Space.\n  let candidate = substitute(candidate,\n        \\'\\\\\\@<!\\%(\\\\[<>{}]\\|[$^]\\|\\\\z\\?\\a\\)', ' ', 'g')\n\n  if candidate =~ '\\\\%\\?('\n    let candidate = join(s:split_pattern(candidate))\n  endif\n\n  \" \\\n  let candidate = substitute(candidate, '\\\\\\\\', '\\\\', 'g')\n  \" *\n  let candidate = substitute(candidate, '\\\\\\*', '*', 'g')\n  return candidate\nendfunction\"}}}\n\nfunction! s:split_pattern(keyword_pattern) \"{{{\n  let original_pattern = a:keyword_pattern\n  let result_patterns = []\n  let analyzing_patterns = [ '' ]\n\n  let i = 0\n  let max = len(original_pattern)\n  while i < max\n    if match(original_pattern, '^\\\\%\\?(', i) >= 0\n      \" Grouping.\n      let end = s:match_pair(original_pattern, '\\\\%\\?(', '\\\\)', i)\n      if end < 0\n        \"call neocomplcache#print_error('Unmatched (.')\n        return [ a:keyword_pattern ]\n      endif\n\n      let save_pattern = analyzing_patterns\n      let analyzing_patterns = []\n      for keyword in split(original_pattern[matchend(original_pattern, '^\\\\%\\?(', i) : end], '\\\\|')\n        for prefix in save_pattern\n          call add(analyzing_patterns, prefix . keyword)\n        endfor\n      endfor\n\n      let i = end + 1\n    elseif match(original_pattern, '^\\\\|', i) >= 0\n      \" Select.\n      let result_patterns += analyzing_patterns\n      let analyzing_patterns = [ '' ]\n      let original_pattern = original_pattern[i+2 :]\n      let max = len(original_pattern)\n\n      let i = 0\n    elseif original_pattern[i] == '\\' && i+1 < max\n      let save_pattern = analyzing_patterns\n      let analyzing_patterns = []\n      for prefix in save_pattern\n        call add(analyzing_patterns, prefix . original_pattern[i] . original_pattern[i+1])\n      endfor\n\n      \" Escape.\n      let i += 2\n    else\n      let save_pattern = analyzing_patterns\n      let analyzing_patterns = []\n      for prefix in save_pattern\n        call add(analyzing_patterns, prefix . original_pattern[i])\n      endfor\n\n      let i += 1\n    endif\n  endwhile\n\n  let result_patterns += analyzing_patterns\n  return result_patterns\nendfunction\"}}}\n\nfunction! s:match_pair(string, start_pattern, end_pattern, start_cnt) \"{{{\n  let end = -1\n  let start_pattern = '\\%(' . a:start_pattern . '\\)'\n  let end_pattern = '\\%(' . a:end_pattern . '\\)'\n\n  let i = a:start_cnt\n  let max = len(a:string)\n  let nest_level = 0\n  while i < max\n    let start = match(a:string, start_pattern, i)\n    let end = match(a:string, end_pattern, i)\n\n    if start >= 0 && (end < 0 || start < end)\n      let i = matchend(a:string, start_pattern, i)\n      let nest_level += 1\n    elseif end >= 0 && (start < 0 || end < start)\n      let nest_level -= 1\n\n      if nest_level == 0\n        return end\n      endif\n\n      let i = matchend(a:string, end_pattern, i)\n    else\n      break\n    endif\n  endwhile\n\n  if nest_level != 0\n    return -1\n  else\n    return end\n  endif\nendfunction\"}}}\n\n\" Global options definition. \"{{{\nif !exists('g:neocomplcache_min_syntax_length')\n  let g:neocomplcache_min_syntax_length = 4\nendif\n\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/sources/tags_complete.vim",
    "content": "\"=============================================================================\n\" FILE: tags_complete.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 26 Sep 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\n\" Important variables.\nif !exists('s:tags_list')\n  let s:tags_list = {}\n  let s:async_tags_list = {}\nendif\n\nlet s:source = {\n      \\ 'name' : 'tags_complete',\n      \\ 'kind' : 'keyword',\n      \\}\n\nfunction! s:source.initialize() \"{{{\n  let g:neocomplcache_tags_caching_limit_file_size =\n        \\ get(g:, 'neocomplcache_tags_caching_limit_file_size', 500000)\n\n  \" Create cache directory.\n  if !isdirectory(neocomplcache#get_temporary_directory() . '/tags_cache')\n     \\ && !neocomplcache#util#is_sudo()\n    call mkdir(neocomplcache#get_temporary_directory() . '/tags_cache', 'p')\n  endif\nendfunction\"}}}\n\nfunction! s:source.finalize() \"{{{\n  delcommand NeoComplCacheCachingTags\nendfunction\"}}}\n\nfunction! neocomplcache#sources#tags_complete#define() \"{{{\n  return s:source\nendfunction\"}}}\n\nfunction! s:source.get_keyword_list(complete_str) \"{{{\n  if !has_key(s:async_tags_list, bufnr('%'))\n        \\ && !has_key(s:tags_list, bufnr('%'))\n    call neocomplcache#sources#tags_complete#caching_tags(0)\n  endif\n\n  if neocomplcache#within_comment()\n    return []\n  endif\n\n  call neocomplcache#cache#check_cache(\n        \\ 'tags_cache', bufnr('%'), s:async_tags_list, s:tags_list)\n\n  if !has_key(s:tags_list, bufnr('%'))\n    return []\n  endif\n  let keyword_list = neocomplcache#dictionary_filter(\n        \\ s:tags_list[bufnr('%')], a:complete_str)\n\n  return neocomplcache#keyword_filter(keyword_list, a:complete_str)\nendfunction\"}}}\n\nfunction! s:initialize_tags(filename) \"{{{\n  \" Initialize tags list.\n  let ft = &filetype\n  if ft == ''\n    let ft = 'nothing'\n  endif\n\n  return {\n        \\ 'filename' : a:filename,\n        \\ 'cachename' : neocomplcache#cache#async_load_from_tags(\n        \\              'tags_cache', a:filename, ft, 'T', 0)\n        \\ }\nendfunction\"}}}\nfunction! neocomplcache#sources#tags_complete#caching_tags(force) \"{{{\n  let bufnumber = bufnr('%')\n\n  let s:async_tags_list[bufnumber] = []\n  for tags in map(filter(tagfiles(), 'getfsize(v:val) > 0'),\n        \\ \"neocomplcache#util#substitute_path_separator(\n        \\    fnamemodify(v:val, ':p'))\")\n    if tags !~? '/doc/tags\\%(-\\w\\+\\)\\?$' &&\n          \\ (a:force || getfsize(tags)\n          \\         < g:neocomplcache_tags_caching_limit_file_size)\n      call add(s:async_tags_list[bufnumber],\n            \\ s:initialize_tags(tags))\n    endif\n  endfor\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/sources/vim_complete/autocmds.dict",
    "content": "BufNewFile ; starting to edit a file that doesn't exist\nBufReadPre ; starting to edit a new buffer, before reading the file\nBufRead ; starting to edit a new buffer, after reading the file\nBufReadPost ; starting to edit a new buffer, after reading the file\nBufReadCmd ; before starting to edit a new buffer |Cmd-event|\nFileReadPre ; before reading a file with a \":read\" command\nFileReadPost ; after reading a file with a \":read\" command\nFileReadCmd ; before reading a file with a \":read\" command |Cmd-event|\nFilterReadPre ; before reading a file from a filter command\nFilterReadPost ; after reading a file from a filter command\nStdinReadPre ; before reading from stdin into the buffer\nStdinReadPost ; After reading from the stdin into the buffer\nBufWrite ; starting to write the whole buffer to a file\nBufWritePre ; starting to write the whole buffer to a file\nBufWritePost ; after writing the whole buffer to a file\nBufWriteCmd ; before writing the whole buffer to a file |Cmd-event|\nFileWritePre ; starting to write part of a buffer to a file\nFileWritePost ; after writing part of a buffer to a file\nFileWriteCmd ; starting to append to a file\nFileAppendPre ; after appending to a file\nFileAppendPost ; before appending to a file |Cmd-event|\nFileAppendCmd ; starting to write a file for a filter command or diff\nFilterWritePre ; after writing a file for a filter command or diff\nFilterWritePost ; just after adding a buffer to the buffer list\nBufAdd ; just after adding a buffer to the buffer list\nBufCreate ; just after adding a buffer to the buffer list\nBufDelete ; before deleting a buffer from the buffer list\nBufWipeout ; before completely deleting a buffer\nBufFilePre ; before changing the name of the current buffer\nBufFilePost ; after changing the name of the current buffer\nBufEnter ; after entering a buffer\nBufLeave ; before leaving to another buffer\nBufWinEnter ; after a buffer is displayed in a window\nBufWinLeave ; before a buffer is removed from a window\nBufUnload ; before unloading a buffer\nBufHidden ; just after a buffer has become hidden\nBufNew ; just after creating a new buffer\nSwapExists ; detected an existing swap file\nFileType ; when the 'filetype' option has been set\nSyntax ; when the 'syntax' option has been set\nEncodingChanged ; after the 'encoding' option has been changed\nTermChanged ; after the value of 'term' has changed\nVimEnter ; after doing all the startup stuff\nGUIEnter ; after starting the GUI successfully\nTermResponse ; after the terminal response to |t_RV| is received\nVimLeavePre ; before exiting Vim, before writing the viminfo file\nVimLeave ; before exiting Vim, after writing the viminfo file\nFileChangedShell ; Vim notices that a file changed since editing started\nFileChangedShellPost ; After handling a file changed since editing started\nFileChangedRO ; before making the first change to a read-only file\nShellCmdPost ; after executing a shell command\nShellFilterPost ; after filtering with a shell command\nFuncUndefined ; a user function is used but it isn't defined\nSpellFileMissing ; a spell file is used but it can't be found\nSourcePre ; before sourcing a Vim script\nSourceCmd ; before sourcing a Vim script |Cmd-event|\nVimResized ; after the Vim window size changed\nFocusGained ; Vim got input focus\nFocusLost ; Vim lost input focus\nCursorHold ; the user doesn't press a key for a while\nCursorHoldI ; the user doesn't press a key for a while in Insert mode\nCursorMoved ; the cursor was moved in Normal mode\nCursorMovedI ; the cursor was moved in Insert mode\nWinEnter ; after entering another window\nWinLeave ; before leaving a window\nTabEnter ; after entering another tab page\nTabLeave ; before leaving a tab page\nCmdwinEnter ; after entering the command-line window\nCmdwinLeave ; before leaving the command-line window\nInsertEnter ; starting Insert mode\nInsertChange ; when typing <Insert> while in Insert or Replace mode\nInsertLeave ; when leaving Insert mode\nColorScheme ; after loading a color scheme\nCompleteDone ; after Insert mode completion is done\nRemoteReply ; a reply from a server Vim was received\nQuickFixCmdPre ; before a quickfix command is run\nQuickFixCmdPost ; after a quickfix command is run\nSessionLoadPost ; after loading a session file\nMenuPopup ; just before showing the popup menu\nUser ; to be used in combination with \":doautocmd\"\n<buffer> ; buffer-local autocommands\n<afile> ; for the file name that is being\n<abuf> ; for the buffer name that is being\n"
  },
  {
    "path": "autoload/neocomplcache/sources/vim_complete/command_args.dict",
    "content": "-bang ; the command can take a ! modifier (like :q or :w)\n-bar ; the command can be followed by a \"|\" and another command\n-buffer ; the command will only be available in the current buffer\n-complete=augroup ; autocmd groups\n-complete=behave ; :behave suboptions\n-complete=buffer ; buffer names\n-complete=color ; color schemes\n-complete=command ; Ex command (and arguments)\n-complete=compiler ; compilers\n-complete=cscope ; :cscope suboptions\n-complete=custom,{func} ; custom completion, defined via {func}\n-complete=customlist,{func} ; custom completion, defined via {func}\n-complete=dir ; directory names\n-complete=environment ; environment variable names\n-complete=event ; autocommand events\n-complete=expression ; Vim expression\n-complete=file ; file and directory names\n-complete=file_in_path ; file and directory names in 'path'\n-complete=filetype ; filetype names 'filetype'\n-complete=function ; function name\n-complete=help ; help subjects\n-complete=highlight ; highlight groups\n-complete=history ; :history suboptions\n-complete=locale ; locale names (as output of locale -a)\n-complete=mapping ; mapping name\n-complete=menu ; menus\n-complete=option ; options\n-complete=shellcmd ; Shell command\n-complete=sign ;  :sign suboptions\n-complete=syntax ; syntax file names |'syntax'|\n-complete=tag ; tags\n-complete=tag_list ; tags, file names are shown when CTRL-D is hit\n-complete=tag_listfiles ; tags, file names are shown when CTRL-D is hit\n-complete=var ; user variables\n-count= ; a count (default N) in the line or as an initial argument\n-nargs=* ; any number of arguments are allowed (0, 1, or many)\n-nargs=+ ; arguments must be supplied, but any number are allowed\n-nargs=0 ; no arguments are allowed (the default)\n-nargs=1 ; exactly one argument is required\n-nargs=? ; 0 or 1 arguments are allowed\n-range ; range allowed, default is current line\n-range= ; a count (default N) which is specified in the line\n-range=% ; range allowed, default is whole file (1,$)\n-register ; the first argument to the command can be an optional register name\n"
  },
  {
    "path": "autoload/neocomplcache/sources/vim_complete/command_completions.dict",
    "content": "N[ext]\nP[rint]\na[ppend]\nab[breviate]    abbreviation\nabc[lear]\nabo[veleft]     command\nal[l]           \nam[enu]\nan[oremenu]     menu\nar[gs]          file\narga[dd]        file\nargd[elete]     file\nargdo           command\narge[dit]       file\nargg[lobal]     file\nargl[ocal]      file\nargu[ment]      \nas[cii]\nau[tocmd]       autocmd_args\naug[roup]       augroup\naun[menu]       menu\nbN[ext]         \nb[uffer]        buffer\nba[ll]          \nbad[d]          file\nbd[elete]       buffer\nbe[have]        \nbel[owright]    command\nbf[irst]\nbl[ast]\nbm[odified]     \nbn[ext]         \nbo[tright]      command\nbp[revious]     \nbr[ewind]\nbrea[k]\nbreaka[dd]      function\nbreakd[el]      \nbreakl[ist]\nbro[wse]        command\nbufdo           command\nbuffers\nbun[load]       buffer\nbw[ipeout]      buffer\ncN[ext]\ncNf[ile]\nc[hange]\nca[bbrev]       abbreviation\ncabc[lear]\ncad[dexpr]      expression\ncaddb[uffer]    \ncaddf[ile]      file\ncal[l]          function\ncat[ch]         \ncb[uffer]     \ncc             \nccl[ose]\ncd              dir\nce[nter]        \ncex[pr]         expression\ncf[ile]         file\ncfir[st]        \ncg[etfile]      file\ncgetb[uffer]    \ncgete[xpr]      expression\nchanges\nchd[ir]         dir\nche[ckpath]\ncheckt[ime]\ncl[ist]         \ncla[st]         \nclo[se]\ncm[ap]          mapping\ncmapc[lear]\ncme[nu]         menu\ncn[ext]\ncnew[er]        \ncnf[ile]\ncno[remap]      mapping\ncnorea[bbrev]   abbreviation\ncnoreme[nu]     menu\nco[py]          \ncol[der]        \ncolo[rscheme]   colorscheme_args\ncom[mand]       command_args\ncomc[lear]\ncomp[iler]      compiler_args\ncon[tinue]\nconf[irm]       command\ncope[n]         \ncp[revious]\ncpf[ile]\ncq[uit]\ncr[ewind]       \ncs[cope]        cscope_args\ncst[ag]\ncu[nmap]        mapping\ncuna[bbrev]     abbreviation\ncunme[nu]       menu\ncw[indow]       \nd[elete]        \ndeb[ug]         command\ndebugg[reedy]\ndel[command]    command\ndelf[unction]   function\ndelm[arks]      \ndi[splay]       \ndiffg[et]       \ndiffo[ff]\ndiffp[atch]     file\ndiffpu[t]       \ndiffs[plit]     file\ndiffthis\ndiffu[pdate]\ndig[raphs]      \ndj[ump]         \ndl[ist]         \ndo[autocmd]     autocmd_args\ndoautoa[ll]     autocmd_args\ndr[op]          file\nds[earch]       \ndsp[lit]        \ne[dit]          file          \nea[rlier]       \nec[ho]          expression\nechoe[rr]       expression\nechoh[l]        expression\nechom[sg]       expression\nechon           expression\nel[se]\nelsei[f]        expression\nem[enu]         menu\nen[dif]\nendf[unction]\nendfo[r]\nendt[ry]\nendw[hile]\nene[w]\nex              file\nexe[cute]       execute\nexi[t]          file\nexu[sage]\nf[ile]\nfiles\nfilet[ype]\nfin[d]          file\nfina[lly]\nfini[sh]\nfir[st]         \nfix[del]\nfo[ld]\nfoldc[lose]\nfoldd[oopen]    command\nfolddoc[losed]  command\nfoldo[pen]\nfor             expression\nfu[nction]      function_args\ngo[to]          \ngr[ep]          file\ngrepa[dd]       file\ngu[i]           file\ngv[im]          file\nh[elp]          help\nha[rdcopy]      \nhelpf[ind]\nhelpg[rep]      \nhelpt[ags]      dir\nhi[ghlight]     highlight\nhid[e]          command\nhis[tory]       \ni[nsert]\nia[bbrev]       abbreviation\niabc[lear]\nif              expression\nij[ump]       \nil[ist]         \nim[ap]          mapping\nimapc[lear]\nimenu           menu\nino[remap]      mapping\ninorea[bbrev]   mapping\ninoreme[nu]     menu\nint[ro]\nis[earch]       \nisp[lit]        \niu[nmap]        mapping\niuna[bbrev]     abbreviation\niunme[nu]       menu\nj[oin]          \nju[mps]\nkee[pmarks]     command\nkeep[jumps]     command\nkeepa[lt]       command\nlN[ext]\nlNf[ile]\nl[ist]          \nla[st]          \nlad[dexpr]      expr\nladdb[uffer]    \nladdf[ile]      file\nlan[guage]      language_args\nlat[er]         \nlb[uffer]       \nlc[d]           dir\nlch[dir]        dir\nlcl[ose]\nlcs[cope]       cscope_args\nle[ft]          \nlefta[bove]     command\nlet             let\nlex[pr]         expression\nlf[ile]         file\nlfir[st]        \nlg[etfile]      file\nlgetb[uffer]    \nlgete[xpr]      expression\nlgr[ep]         file\nlgrepa[dd]      file\nlh[elpgrep]     \nll              \nlla[st]         \nlli[st]         \nlm[ap]          mapping\nlmak[e]         file\nlmapc[lear]\nln[oremap]      mapping\nlne[xt]\nlnew[er]        \nlnf[ile]\nlo[adview]      \nloadk[eymap]\nloc[kmarks]     command\nlockv[ar]       var\nlol[der]        \nlop[en]         \nlp[revious]\nlpf[ile]\nlr[ewind]       \nls\nlt[ag]          \nlu[nmap]        mapping\nlua\nluado\nluafile         file\nlv[imgrep]      file\nlvimgrepadd     file\nlwindow         \nm[ove]          \nma[rk]          \nmak[e]          file\nmap             mapping\nmapc[lear]\nmarks\nmatch           \nmenu            menu\nmenut[ranslate] menutranslate_args\nmes[sages]      \nmk[exrc]        file\nmks[ession]     file\nmksp[ell]       file\nmkv[imrc]       file\nmkvie[w]        file\nmod[e]          \nmz[scheme]      file\nmzf[ile]        file\nn[ext]          \nnb[key]         \nnew\nnm[ap]          mapping\nnmapc[lear]\nnmenu           menu\nnno[remap]      mapping\nnnoreme[nu]     menu\nno[remap]       mapping\nnoa[utocmd]     command\nnoh[lsearch]    \nnorea[bbrev]    abbreviation\nnoreme[nu]      menu\nnorm[al]        \nnu[mber]        \nnun[map]        mapping\nnunme[nu]       menu\no[pen]          \nol[dfiles]\nom[ap]          mapping\nomapc[lear]\nome[nu]         menu\non[ly]\nono[remap]      mapping\nonoreme[nu]     menu\nopt[ions]\nou[nmap]        lhs\nounmenu         menu\nownsyntax       syntax_args\np[rint]         \npc[lose]\npe[rl]          \nped[it]         file\nperld[o]        \npo[p]\npopu[p]         \npp[op]\npre[serve]\nprev[ious]      \nprof[ile]       profile_args\nprofd[el]       \npromptf[ind]    \npromptr[epl]    \nps[earch]       \nptN[ext]\npta[g]          tag\nptf[irst]\nptj[ump]\nptl[ast]\nptn[ext]\nptp[revious]\nptr[ewind]\npts[elect]      tag\npu[t]           \npw[d]\npy3f[ile]       file\npy[thon]        \npyf[ile]        file\npython3        \nq[uit]\nqa[ll]\nquita[ll]\nr[ead]          \nrec[over]       file\nred[o]\nredi[r]         \nredr[aw]\nredraws[tatus]\nreg[isters]     \nres[ize]\nret[ab]         \nretu[rn]        expression\nrew[ind]        \nri[ght]         \nrightb[elow]    command\nrub[y]          \nrubyd[o]        \nrubyf[ile]      file\nruntime         file\nrv[iminfo]      file\nsN[ext]         \ns[ubstitute]    \nsa[rgument]     \nsal[l]\nsan[dbox]       command\nsav[eas]        file\nsbN[ext]        \nsb[uffer]       buffer\nsba[ll]         \nsbf[irst]\nsbl[ast]\nsbm[odified]    \nsbn[ext]        \nsbp[revious]    \nsbr[ewind]\nscrip[tnames]\nscripte[ncoding] encoding\nscscope          cscope_args\nse[t]            option\nsetf[iletype]   filetype\nsetg[lobal]     option\nsetl[ocal]      option\nsf[ind]         file\nsfir[st]        \nsh[ell]\nsig[n]          sign_args\nsil[ent]        command\nsim[alt]        \nsl[eep]         \nsla[st]         \nsm[agic]        \nsm[ap]          mapping\nsmapc[lear]\nsme[nu]         menu\nsn[ext]         file\nsni[ff]         \nsno[remap]      mapping\nsnoreme[nu]     menu\nso[urce]        file\nsor[t]          \nsp[lit]         \nspe[llgood]     \nspelld[ump]\nspelli[nfo]     \nspellr[epall]\nspellu[ndo]     \nspellw[rong]    \nspr[evious]     \nsre[wind]       \nst[op]\nsta[g]          tag\nstar[tinsert]\nstartg[replace]\nstartr[eplace]\nstj[ump]        tag\nstopi[nsert]\nsts[elect]      tag\nsun[hide]       \nsunm[ap]        mapping\nsunme[nu]       menu\nsus[pend]\nsv[iew]         file\nsw[apname]\nsy[ntax]        syntax_args\nsync[bind]\nt\ntN[ext]\nta[g]           tag\ntab             command\ntabN[ext]\ntabc[lose]\ntabd[o]         command\ntabe[dit]       file\ntabf[ind]       file\ntabfir[st]\ntabl[ast]\ntabm[ove]       \ntabn[ext]\ntabnew          file\ntabo[nly]\ntabp[revious]\ntabr[ewind]\ntabs\ntags\ntc[l]           \ntcld[o]         \ntclf[ile]       file\nte[aroff]       menu\ntf[irst]\nth[row]         expression\ntj[ump]         tag\ntl[ast]         \ntm[enu]         menu\ntn[ext]\nto[pleft]       command\ntp[revious]\ntr[ewind]\ntry\ntselect\ntu[nmenu]       menu\nu[ndo]          \nuna[bbreviate]  abbreviation\nundoj[oin]\nundol[ist]\nunh[ide]        \nunl[et]         var\nunlo[ckvar]     var\nunm[ap]         mapping\nunme[nu]        menu\nuns[ilent]      command\nup[date]        file\nve[rsion]\nverb[ose]       command\nvert[ical]      command\nvg[lobal]       \nvi[sual]        file\nvie[w]          file\nvim[grep]       file\nvimgrepa[dd]    file\nviu[sage]\nvm[ap]          mapping\nvmapc[lear]\nvmenu           menu\nvn[oremap]      mapping\nvne[w]          file\nvnoremenu       menu\nvsp[lit]        file\nvu[nmap]        mapping\nvunmenu         menu\nwN[ext]         file\nw[rite]         file\nwa[ll]\nwh[ile]         expression\nwin[size]       \nwinc[md]        \nwindo           command\nwinp[os]        \nwn[ext]         \nwp[revious]     file\nwq              \nwqa[ll]         \nws[verb]        \nwv[iminfo]      file\nx[it]           file\nxa[ll]          \nxm[ap]          mapping\nxmapc[lear]\nxmenu           menu\nxn[oremap]      mapping\nxnoremenu       menu\nxu[nmap]        mapping\nxunmenu         menu\ny[ank]          \n"
  },
  {
    "path": "autoload/neocomplcache/sources/vim_complete/command_prototypes.dict",
    "content": "N[ext]          [count] [++opt] [+cmd]\nP[rint]         [count] [flags]\na[ppend]\nab[breviate]\nabc[lear]\nabo[veleft]     {cmd}\nal[l]           [N]\nam[enu]\nan[oremenu]     {menu}\nar[gs]\narga[dd]        {name} ..\nargd[elete]     {pattern} ..\nargdo           {cmd}\narge[dit]       [++opt] [+cmd] {name}\nargg[lobal]     [++opt] [+cmd] {arglist}\nargl[ocal]      [++opt] [+cmd] {arglist}\nargu[ment]      [count] [++opt] [+cmd]\nas[cii]\nau[tocmd]       [group] {event} {pat} [nested] {cmd}\naug[roup]       {name}\naun[menu]       {menu}\nbN[ext]         [N]\nb[uffer]        {bufname}\nba[ll]          [N]\nbad[d]          [+lnum] {fname}\nbd[elete]       {bufname}\nbe[have]        {model}\nbel[owright]    {cmd}\nbf[irst]\nbl[ast]\nbm[odified]     [N]\nbn[ext]         [N]\nbo[tright]      {cmd}\nbp[revious]     [N]\nbr[ewind]\nbrea[k]\nbreaka[dd]      func [lnum] {name}\nbreakd[el]      {nr}\nbreakl[ist]\nbro[wse]        {command}\nbufdo         {cmd}\nbuffers\nbun[load]       {bufname}\nbw[ipeout]      {bufname}\ncN[ext]\ncNf[ile]\nc[hange]\nca[bbrev]       [<expr>] [lhs] [rhs]\ncabc[lear]\ncad[dexpr]      {expr}\ncaddb[uffer]    [bufnr]\ncaddf[ile]      [errorfile]\ncal[l]          {name}([arguments])\ncat[ch]         /{pattern}/\ncb[uffer]       [bufnr]\ncc              [nr]\nccl[ose]\ncd              {path}\nce[nter]        [width]\ncex[pr]         {expr}\ncf[ile]         [errorfile]\ncfir[st]        [nr]\ncg[etfile]      [errorfile]\ncgetb[uffer]    [bufnr]\ncgete[xpr]      {expr}\nchanges\nchd[ir]         [path]\nche[ckpath]\ncheckt[ime]\ncl[ist]         [from] [, [to]]\ncla[st]         [nr]\nclo[se]\ncm[ap]          {lhs} {rhs}\ncmapc[lear]\ncme[nu]         {menu}\ncn[ext]\ncnew[er]        [count]\ncnf[ile]\ncno[remap]      {lhs} {rhs}\ncnorea[bbrev]   [<expr>] [lhs] [rhs]\ncnoreme[nu]     {menu}\nco[py]          {address}\ncol[der]        [count]\ncolo[rscheme]   {name}\ncom[mand]       [-bang -complete= -nargs=...] {cmdname} {call function(<args>)} | {rep}\ncomc[lear]\ncomp[iler]      {name}\ncon[tinue]\nconf[irm]       {command}\ncope[n]         [height]\ncp[revious]\ncpf[ile]\ncq[uit]\ncr[ewind]       [nr]\ncs[cope]        add {file|dir} [pre-path] [flags] | find {querytype} {name} | kill {num|partial_name} | help | reset | show\ncst[ag]\ncu[nmap]        {lhs}\ncuna[bbrev]     {lhs}\ncunme[nu]       {menu}\ncw[indow]       [height]\nd[elete]        [x]\ndeb[ug]         {cmd}\ndebugg[reedy]\ndel[command]    {cmd}\ndelf[unction]   {name}\ndelm[arks]      {marks}\ndi[splay]       [arg]\ndiffg[et]       [bufspec]\ndiffo[ff]\ndiffp[atch]     {patchfile}\ndiffpu[t]       [bufspec]\ndiffs[plit]     {filename}\ndiffthis\ndiffu[pdate]\ndig[raphs]      {char1}{char2} {number} ...\ndj[ump]         [count] [/]string[/]\ndl[ist]         [/]string[/]\ndo[autocmd]     [group] {event} [fname]\ndoautoa[ll]     [group] {event} [fname]\ndr[op]          [++opt] [+cmd] {file} ..\nds[earch]       [count] [/]string[/]\ndsp[lit]        [count] [/]string[/]\ne[dit]          [++opt] [+cmd] {file}\nea[rlier]       {count} | {N}s | {N}h\nec[ho]          {expr1} ..\nechoe[rr]       {expr1} ..\nechoh[l]        {expr1} ..\nechom[sg]       {expr1} ..\nechon           {expr1} ..\nel[se]\nelsei[f]        {expr1}\nem[enu]         {menu}\nen[dif]\nendf[unction]\nendfo[r]\nendt[ry]\nendw[hile]\nene[w]\nex              [++opt] [+cmd] [file]\nexe[cute]       {expr1} ..\nexi[t]          [++opt] [file]\nexu[sage]\nf[ile]\nfiles\nfilet[ype]\nfin[d]          [++opt] [+cmd] {file}\nfina[lly]\nfini[sh]\nfir[st]         [++opt] [+cmd]\nfix[del]\nfo[ld]\nfoldc[lose]\nfoldd[oopen]    {cmd}\nfolddoc[losed]  {cmd}\nfoldo[pen]\nfor             {var} in {list}\nfu[nction]      {name}([arguments]) [range] [abort] [dict]\ngo[to]          [count]\ngr[ep]          [arguments]\ngrepa[dd]       [arguments]\ngu[i]           [++opt] [+cmd] [-f|-b] [files...]\ngv[im]          [++opt] [+cmd] [-f|-b] [files...]\nh[elp]          {subject}\nha[rdcopy]      [arguments]\nhelpf[ind]\nhelpg[rep]      {pattern}[@xx]\nhelpt[ags]      [++t] {dir}\nhi[ghlight]     [default] {group-name} {key}={arg} ..\nhid[e]          {cmd}\nhis[tory]       [{name}] [{first}][, [{last}]]\ni[nsert]\nia[bbrev]       [<expr>] [lhs] [rhs]\niabc[lear]\nif              {expr1}\nij[ump]       [count] [/]pattern[/]\nil[ist]         [/]pattern[/]\nim[ap]          {lhs} {rhs}\nimapc[lear]\nimenu           {menu}\nino[remap]      {lhs} {rhs}\ninorea[bbrev]   [<expr>] [lhs] [rhs]\ninoreme[nu]     {menu}\nint[ro]\nis[earch]       [count] [/]pattern[/]\nisp[lit]        [count] [/]pattern[/]\niu[nmap]        {lhs}\niuna[bbrev]     {lhs}\niunme[nu]       {menu}\nj[oin]          {count} [flags]\nju[mps]\nkee[pmarks]     {command}\nkeep[jumps]     {command}\nkeepa[lt]       {cmd}\nlN[ext]\nlNf[ile]\nl[ist]          [count] [flags]\nla[st]          [++opt] [+cmd]\nlad[dexpr]      {expr}\nladdb[uffer]    [bufnr]\nladdf[ile]      [errorfile]\nlan[guage]      {name} | mes[sages] {name} | cty[pe] {name} | tim[e] {name}\nlat[er]         {count} | {N}s | {N}m | {N}h\nlb[uffer]       [bufnr]\nlc[d]           {path}\nlch[dir]        {path}\nlcl[ose]\nlcs[cope]       add {file|dir} [pre-path] [flags] | find {querytype} {name} | kill {num|partial_name} | help | reset | show\nle[ft]          [indent]\nlefta[bove]     {cmd}\nlet             {var-name} = {expr1}\nlex[pr]         {expr}\nlf[ile]         [errorfile]\nlfir[st]        [nr]\nlg[etfile]      [errorfile]\nlgetb[uffer]    [bufnr]\nlgete[xpr]      {expr}\nlgr[ep]         [arguments]\nlgrepa[dd]      [arguments]\nlh[elpgrep]     {pattern}[@xx]\nll              [nr]\nlla[st]         [nr]\nlli[st]         [from] [, [to]]\nlm[ap]          {lhs} {rhs}\nlmak[e]         [arguments]\nlmapc[lear]\nln[oremap]      {lhs} {rhs}\nlne[xt]\nlnew[er]        [count]\nlnf[ile]\nlo[adview]      [nr]\nloadk[eymap]\nloc[kmarks]     {command}\nlockv[ar]       [depth] {name} ...\nlol[der]        [count]\nlop[en]         [height]\nlp[revious]\nlpf[ile]\nlr[ewind]       [nr]\nls\nlt[ag]          [ident]\nlua             {chunk} | << {endmarker}\nluado           {body}\nluafile         {file}\nlu[nmap]        {lhs}\nlv[imgrep]      /{pattern}/[g][j] {file} ... | {pattern} {file} ...\nlvimgrepadd     /{pattern}/[g][j] {file} ... | {pattern} {file} ...\nlwindow         [height]\nm[ove]          {address}\nma[rk]          {a-zA-z'}\nmak[e]          [arguments]\nmap             {lhs} {rhs}\nmapc[lear]\nmarks\nmatch           {group} /{pattern}/\nmenu            {menu}\nmenut[ranslate] clear | {english} {mylang}\nmes[sages]      \nmk[exrc]        [file]\nmks[ession]     [file]\nmksp[ell]       [-ascii] {outname} {inname} ...\nmkv[imrc]       [file]\nmkvie[w]        [file]\nmod[e]          [mode]\nmz[scheme]      {stmt} | << {endmarker} {script} {endmarker} | {file}\nmzf[ile]        {file}\nn[ext]          [++opt] [+cmd]\nnb[key]         key\nnew\nnm[ap]          {lhs} {rhs}\nnmapc[lear]\nnmenu           {menu}\nnno[remap]      {lhs} {rhs}\nnnoreme[nu]     {menu}\nno[remap]       {lhs} {rhs} \nnoa[utocmd]     {cmd}\nnoh[lsearch]    \nnorea[bbrev]    [<expr>] [lhs] [rhs]\nnoreme[nu]      {menu}\nnorm[al]        {commands}\nnu[mber]        [count] [flags]\nnun[map]        {lhs}\nnunme[nu]       {menu}\no[pen]          /pattern/\nol[dfiles]\nom[ap]          {lhs} {rhs}\nomapc[lear]\nome[nu]         {menu}\non[ly]\nono[remap]      {lhs} {rhs}\nonoreme[nu]     {menu}\nopt[ions]\nou[nmap]        {lhs}\nounmenu         {menu}\nownsyntax       list {group-name} | list @{cluster-name}\np[rint]         {count} [flags]\npc[lose]\npe[rl]          {cmd} | << {endpattern} {script} {endpattern}\nped[it]         [++opt] [+cmd] {file}\nperld[o]        {cmd}\npo[p]\npopu[p]         {name}\npp[op]\npre[serve]\nprev[ious]      [count] [++opt] [+cmd]\nprof[ile]       start {fname} | pause | continue | func {pattern} | file {pattern}\nprofd[el]       ...\npromptf[ind]    [string]\npromptr[epl]    [string]\nps[earch]       [count] [/]pattern[/]\nptN[ext]\npta[g]          [tagname]\nptf[irst]\nptj[ump]\nptl[ast]\nptn[ext]\nptp[revious]\nptr[ewind]\npts[elect]      [ident]\npu[t]           [x]\npw[d]\npy[thon]        {stmt} | << {endmarker} {script} {endmarker}\npython3         {stmt} | << {endmarker} {script} {endmarker}\npyf[ile]        {file}\npy3f[ile]       {file}\nq[uit]\nqa[ll]\nquita[ll]\nr[ead]          [++opt] [name]\nrec[over]       [file]\nred[o]\nredi[r]         > {file} | >> {file} | @{a-zA-Z} | => {var} | END\nredr[aw]\nredraws[tatus]\nreg[isters]     {arg}\nres[ize]\nret[ab]         [new_tabstop]\nretu[rn]        [expr]\nrew[ind]        [++opt] [+cmd]\nri[ght]         [width]\nrightb[elow]    {cmd}\nrub[y]          {cmd} | << {endpattern} {script} {endpattern}\nrubyd[o]        {cmd}\nrubyf[ile]      {file}\nruntime         {file} ..\nrv[iminfo]      [file]\nsN[ext]         [++opt] [+cmd] [N]\ns[ubstitute]    /{pattern}/{string}/[flags] [count]\nsa[rgument]     [++opt] [+cmd] [N]\nsal[l]\nsan[dbox]       {cmd}\nsav[eas]        [++opt] {file}\nsbN[ext]        [N]\nsb[uffer]       {bufname}\nsba[ll]         [N]\nsbf[irst]\nsbl[ast]\nsbm[odified]    [N]\nsbn[ext]        [N]\nsbp[revious]    [N]\nsbr[ewind]\nscrip[tnames]\nscripte[ncoding] [encoging]\nscscope               add {file|dir} [pre-path] [flags] | find {querytype} {name} | kill {num|partial_name} | help | reset | show\nse[t]                 {option}={value} {option}? | {option} | {option}&\nsetf[iletype]   {filetype}\nsetg[lobal]     ...\nsetl[ocal]      ...\nsf[ind]         [++opt] [+cmd] {file}\nsfir[st]        [++opt] [+cmd]\nsh[ell]\nsig[n]          define {name} {argument}... | icon={pixmap} | linehl={group} | text={text} | texthl={group}\nsil[ent]        {command}\nsim[alt]        {key}\nsl[eep]         [N] [m]\nsla[st]         [++opt] [+cmd]\nsm[agic]        ...\nsm[ap]          {lhs} {rhs}\nsmapc[lear]\nsme[nu]         {menu}\nsn[ext]         [++opt] [+cmd] [file ..]\nsni[ff]         request [symbol]\nsno[remap]      {lhs} {rhs}\nsnoreme[nu]     {menu}\nso[urce]        {file}\nsor[t]          [i][u][r][n][x][o] [/{pattern}/]\nsp[lit]         [++opt] [+cmd]\nspe[llgood]     {word}\nspelld[ump]\nspelli[nfo]     \nspellr[epall]\nspellu[ndo]     {word}\nspellw[rong]    {word}\nspr[evious]     [++opt] [+cmd] [N]\nsre[wind]       [++opt] [+cmd]\nst[op]\nsta[g]          [tagname]\nstar[tinsert]\nstartg[replace]\nstartr[eplace]\nstj[ump]        [ident]\nstopi[nsert]\nsts[elect]      [ident]\nsun[hide]       [N]\nsunm[ap]        {lhs}\nsunme[nu]       {menu}\nsus[pend]\nsv[iew]         [++opt] [+cmd] {file}\nsw[apname]\nsy[ntax]        list {group-name} | list @{cluster-name}\nsync[bind]\nt\ntN[ext]\nta[g]           {ident}\ntab             {cmd}\ntabN[ext]\ntabc[lose]\ntabd[o]         {cmd}\ntabe[dit]       [++opt] [+cmd] {file}\ntabf[ind]       [++opt] [+cmd] {file}\ntabfir[st]\ntabl[ast]\ntabm[ove]       [N]\ntabn[ext]\ntabnew          [++opt] [+cmd] {file}\ntabo[nly]\ntabp[revious]\ntabr[ewind]\ntabs\ntags\ntc[l]           {cmd} | {endmarker} {script} {endmarker}\ntcld[o]         {cmd}\ntclf[ile]       {file}\nte[aroff]       {name}\ntf[irst]\nth[row]         {expr1}\ntj[ump]         [ident]\ntl[ast]         \ntm[enu]         {menu}\ntn[ext]\nto[pleft]       {cmd}\ntp[revious]\ntr[ewind]\ntry\ntselect\ntu[nmenu]       {menu}\nu[ndo]          {N}\nuna[bbreviate]  {lhs}\nundoj[oin]\nundol[ist]\nunh[ide]        [N]\nunl[et]         {name} ...\nunlo[ckvar]     [depth] {name} ...\nunm[ap]         {lhs}\nunme[nu]        {menu}\nuns[ilent]      {command}\nup[date]        [++opt] [>>] [file]\nve[rsion]\nverb[ose]       {command}\nvert[ical]      {cmd}\nvg[lobal]       /{pattern}/[cmd]\nvi[sual]        [++opt] [+cmd] [file]\nvie[w]          [++opt] [+cmd] file\nvim[grep]       /{pattern}/[g][j] {file} ... | {pattern} {file} ...\nvimgrepa[dd]    /{pattern}/[g][j] {file} ... | {pattern} {file} ...\nviu[sage]\nvm[ap]          {lhs} {rhs}\nvmapc[lear]\nvmenu           {menu}\nvn[oremap]      {lhs} {rhs}\nvne[w]          [++opt] [+cmd] [file]\nvnoremenu       {menu}\nvsp[lit]        [++opt] [+cmd] [file]\nvu[nmap]        {lhs}\nvunmenu         {menu}\nwN[ext]         [++opt] [file]\nw[rite]         [++opt] [file]\nwa[ll]\nwh[ile]         {expr1}\nwin[size]       {width} {height}\nwinc[md]        {arg}\nwindo           {cmd}\nwinp[os]        {X} {Y}\nwn[ext]         [++opt]\nwp[revious]     [++opt] [file]\nwq              [++opt]\nwqa[ll]         [++opt]\nws[verb]        verb\nwv[iminfo]      [file]\nx[it]           [++opt] [file]\nxa[ll]          [++opt]\nxm[ap]          {lhs} {rhs}\nxmapc[lear]\nxmenu           {menu}\nxn[oremap]      {lhs} {rhs}\nxnoremenu       {menu}\nxu[nmap]        {lhs}\nxunmenu         {menu}\ny[ank]          [x] {count}\n"
  },
  {
    "path": "autoload/neocomplcache/sources/vim_complete/command_replaces.dict",
    "content": "<line1> ; the starting line of the command range\n<line2> ; the final line of the command range\n<count> ; any count supplied (as described for the '-range' and '-count' attributes)\n<bang> ; expands to a ! if the command was executed with a ! modifier\n<reg> ; the optional register, if specified\n<args> ; the command arguments, exactly as supplied\n<lt> ; a single '<' (Less-Than) character\n<q-args> ; the value is quoted in such a way as to make it a valid value for use in an expression\n<f-args> ; splits the command arguments at spaces and tabs, quotes each argument individually\n<sid> ; defining a user command in a script\n"
  },
  {
    "path": "autoload/neocomplcache/sources/vim_complete/commands.dict",
    "content": "Next\t; go to previous file in the argument list\nPrint\t; print lines\nabbreviate\t; enter abbreviation\nabclear\t; remove all abbreviations\naboveleft\t; make split window appear left or above\nall\t; open a window for each file in the argument list\namenu\t; enter new menu item for all modes\nanoremenu\t; enter a new menu for all modes that will not be remapped\nappend\t; append text\nargadd\t; add items to the argument list\nargdelete\t; delete items from the argument list\nargdo\t; do a command on all items in the argument list\nargedit\t; add item to the argument list and edit it\nargglobal\t; define the global argument list\narglocal\t; define a local argument list\nargs\t; print the argument list\nargument\t; go to specific file in the argument list\nascii\t; print ascii value of character under the cursor\naugroup\t; select the autocommand group to use\naunmenu\t; remove menu for all modes\nautocmd\t; enter or show autocommands\nbNext\t; go to previous buffer in the buffer list\nbadd\t; add buffer to the buffer list\nball\t; open a window for each buffer in the buffer list\nbdelete\t; remove a buffer from the buffer list\nbehave\t; set mouse and selection behavior\nbelowright\t; make split window appear right or below\nbfirst\t; go to first buffer in the buffer list\nblast\t; go to last buffer in the buffer list\nbmodified\t; go to next buffer in the buffer list that has been modified\nbnext\t; go to next buffer in the buffer list\nbotright\t; make split window appear at bottom or far right\nbprevious\t; go to previous buffer in the buffer list\nbreak\t; break out of while loop\nbreakadd\t; add a debugger breakpoint\nbreakdel\t; delete a debugger breakpoint\nbreaklist\t; list debugger breakpoints\nbrewind\t; go to first buffer in the buffer list\nbrowse\t; use file selection dialog\nbufdo\t; execute command in each listed buffer\nbuffer\t; go to specific buffer in the buffer list\nbuffers\t; list all files in the buffer list\nbunload\t; unload a specific buffer\nbwipeout\t; really delete a buffer\ncNext\t; go to previous error\ncNfile\t; go to last error in previous file\ncabbrev\t; like \"abbreviate\" but for Command-line mode\ncabclear\t; clear all abbreviations for Command-line mode\ncaddbuffer\t; add errors from buffer\ncaddexpr\t; add errors from expr\ncaddfile\t; add error message to current quickfix list\ncall\t; call a function\ncatch\t; part of a try command\ncbuffer\t; parse error messages and jump to first error\ncclose\t; close quickfix window\ncenter\t; format lines at the center\ncexpr\t; read errors from expr and jump to first\ncfile\t; read file with error messages and jump to first\ncfirst\t; go to the specified error, default first one\ncgetbuffer\t; get errors from buffer\ncgetexpr\t; get errors from expr\ncgetfile\t; read file with error messages\nchange\t; replace a line or series of lines\nchanges\t; print the change list\nchdir\t; change directory\ncheckpath\t; list included files\nchecktime\t; check timestamp of loaded buffers\nclast\t; go to the specified error, default last one\nclist\t; list all errors\nclose\t; close current window\ncmap\t; like \"map\" but for Command-line mode\ncmapclear\t; clear all mappings for Command-line mode\ncmenu\t; add menu for Command-line mode\ncnewer\t; go to newer error list\ncnext\t; go to next error\ncnfile\t; go to first error in next file\ncnoreabbrev\t; like \"noreabbrev\" but for Command-line mode\ncnoremap\t; like \"noremap\" but for Command-line mode\ncnoremenu\t; like \"noremenu\" but for Command-line mode\ncolder\t; go to older error list\ncolorscheme\t; load a specific color scheme\ncomclear\t; clear all user-defined commands\ncommand\t; create user-defined command\ncompiler\t; do settings for a specific compiler\nconfirm\t; prompt user when confirmation required\ncontinue\t; go back to while\ncopen\t; open quickfix window\ncopy\t; copy lines\ncpfile\t; go to last error in previous file\ncprevious\t; go to previous error\ncquit\t; quit Vim with an error code\ncrewind\t; go to the specified error, default first one\ncscope\t; execute cscope command\ncstag\t; use cscope to jump to a tag\ncunabbrev\t; like \"unabbrev\" but for Command-line mode\ncunmap\t; like \"unmap\" but for Command-line mode\ncunmenu\t; remove menu for Command-line mode\ncwindow\t; open or close quickfix window\ndebug\t; run a command in debugging mode\ndebuggreedy\t; read debug mode commands from normal input\ndelcommand\t; delete user-defined command\ndelete\t; delete lines\ndelfunction\t; delete a user function\ndelmarks\t; delete marks\ndiffget\t; remove differences in current buffer\ndiffoff\t; switch off diff mode\ndiffpatch\t; apply a patch and show differences\ndiffput\t; remove differences in other buffer\ndiffsplit\t; show differences with another file\ndiffthis\t; make current window a diff window\ndiffupdate\t; update 'diff' buffers\ndigraphs\t; show or enter digraphs\ndisplay\t; display registers\ndjump\t; jump to #define\ndlist\t; list #defines\ndoautoall\t; apply autocommands for all loaded buffers\ndoautocmd\t; apply autocommands to current buffer\ndrop\t; jump to window editing file or edit file in current window\ndsearch\t; list one #define\ndsplit\t; split window and jump to #define\nearlier\t; go to older change, undo\necho\t; echoes the result of expressions\nechoerr\t; like echo, show like an error and use history\nechohl\t; set highlighting for echo commands\nechomsg\t; same as echo, put message in history\nechon\t; same as echo, but without <EOL>\nedit\t; edit a file\nelse\t; part of an if command\nelseif\t; part of an if command\nemenu\t; execute a menu by name\nendfor\t; end previous for\nendfunction\t; end of a user function\nendif\t; end previous if\nendtry\t; end previous try\nendwhile\t; end previous while\nenew\t; edit a new, unnamed buffer\nexecute\t; execute result of expressions\nexit\t; same as \"xit\"\nexusage\t; overview of Ex commands\nfile\t; show or set the current file name\nfiles\t; list all files in the buffer list\nfiletype\t; switch file type detection on/off\nfinally\t; part of a try command\nfind\t; find file in 'path' and edit it\nfinish\t; quit sourcing a Vim script\nfirst\t; go to the first file in the argument list\nfixdel\t; set key code of <Del>\nfold\t; create a fold\nfoldclose\t; close folds\nfolddoclosed\t; execute command on lines in a closed fold\nfolddoopen\t; execute command on lines not in a closed fold\nfoldopen\t; open folds\nfor\t; for loop\nfunction\t; define a user function\nglobal\t; execute commands for matching lines\ngoto\t; go to byte in the buffer\ngrep\t; run 'grepprg' and jump to first match\ngrepadd\t; like grep, but append to current list\ngui\t; start the GUI\ngvim\t; start the GUI\nhardcopy\t; send text to the printer\nhelp\t; open a help window\nhelpfind\t; dialog to open a help window\nhelpgrep\t; like \"grep\" but searches help files\nhelptags\t; generate help tags for a directory\nhide\t; hide current buffer for a command\nhighlight\t; specify highlighting methods\nhistory\t; print a history list\niabbrev\t; like \"abbrev\" but for Insert mode\niabclear\t; like \"abclear\" but for Insert mode\nijump\t; jump to definition of identifier\nilist\t; list lines where identifier matches\nimap\t; like \"map\" but for Insert mode\nimapclear\t; like \"mapclear\" but for Insert mode\nimenu\t; add menu for Insert mode\ninoreabbrev\t; like \"noreabbrev\" but for Insert mode\ninoremap\t; like \"noremap\" but for Insert mode\ninoremenu\t; like \"noremenu\" but for Insert mode\ninsert\t; insert text\nintro\t; print the introductory message\nisearch\t; list one line where identifier matches\nisplit\t; split window and jump to definition of identifier\niunabbrev\t; like \"unabbrev\" but for Insert mode\niunmap\t; like \"unmap\" but for Insert mode\niunmenu\t; remove menu for Insert mode\njoin\t; join lines\njumps\t; print the jump list\nkeepalt\t; following command keeps the alternate file\nkeepjumps\t; following command keeps jumplist and marks\nkeepmarks\t; following command keeps marks where they are\nlNext\t; go to previous entry in location list\nlNfile\t; go to last entry in previous file\nladdbuffer\t; add locations from buffer\nladdexpr\t; add locations from expr\nladdfile\t; add locations to current location list\nlanguage\t; set the language (locale)\nlast\t; go to the last file in the argument list\nlater\t; go to newer change, redo\nlbuffer\t; parse locations and jump to first location\nlcd\t; change directory locally\nlchdir\t; change directory locally\nlclose\t; close location window\nlcscope\t; like \"cscope\" but uses location list\nleft\t; left align lines\nleftabove\t; make split window appear left or above\nlet\t; assign a value to a variable or option\nlexpr\t; read locations from expr and jump to first\nlfile\t; read file with locations and jump to first\nlfirst\t; go to the specified location, default first one\nlgetbuffer\t; get locations from buffer\nlgetexpr\t; get locations from expr\nlgetfile\t; read file with locations\nlgrep\t; run 'grepprg' and jump to first match\nlgrepadd\t; like grep, but append to current list\nlhelpgrep\t; like \"helpgrep\" but uses location list\nlist\t; print lines\nllast\t; go to the specified location, default last one\nllist\t; list all locations\nlmake\t; execute external command 'makeprg' and parse error messages\nlmap\t; like \"map!\" but includes Lang-Arg mode\nlmapclear\t; like \"mapclear!\" but includes Lang-Arg mode\nlnewer\t; go to newer location list\nlnext\t; go to next location\nlnfile\t; go to first location in next file\nlnoremap\t; like \"noremap!\" but includes Lang-Arg mode\nloadkeymap\t; load the following keymaps until EOF\nloadview\t; load view for current window from a file\nlockmarks\t; following command keeps marks where they are\nlockvar\t; lock variables\nlolder\t; go to older location list\nlopen\t; open location window\nlpfile\t; go to last location in previous file\nlprevious\t; go to previous location\nlrewind\t; go to the specified location, default first one\nltag\t; jump to tag and add matching tags to the location list\nlua\t; execute Lua chunk.\nluado\t; execute Lua function.\nluafile\t; execute Lua script in file.\nlunmap\t; like \"unmap!\" but includes Lang-Arg mode\nlvimgrep\t; search for pattern in files\nlvimgrepadd\t; like vimgrep, but append to current list\nlwindow\t; open or close location window\nmake\t; execute external command 'makeprg' and parse error messages\nmap\t; show or enter a mapping\nmapclear\t; clear all mappings for Normal and Visual mode\nmark\t; set a mark\nmarks\t; list all marks\nmatch\t; define a match to highlight\nmenu\t; enter a new menu item\nmenutranslate\t; add a menu translation item\nmessages\t; view previously displayed messages\nmkexrc\t; write current mappings and settings to a file\nmksession\t; write session info to a file\nmkspell\t; produce .spl spell file\nmkview\t; write view of current window to a file\nmkvimrc\t; write current mappings and settings to a file\nmode\t; show or change the screen mode\nmove\t; move lines\nmzfile\t; execute MzScheme script file\nmzscheme\t; execute MzScheme command\nnbkey\t; pass a key to Netbeans\nnew\t; create a new empty window\nnext\t; go to next file in the argument list\nnmap\t; like \"map\" but for Normal mode\nnmapclear\t; clear all mappings for Normal mode\nnmenu\t; add menu for Normal mode\nnnoremap\t; like \"noremap\" but for Normal mode\nnnoremenu\t; like \"noremenu\" but for Normal mode\nnoautocmd\t; following command don't trigger autocommands\nnohlsearch\t; suspend 'hlsearch' highlighting\nnoreabbrev\t; enter an abbreviation that will not be remapped\nnoremap\t; enter a mapping that will not be remapped\nnoremenu\t; enter a menu that will not be remapped\nnormal\t; execute Normal mode commands\nnumber\t; print lines with line number\nnunmap\t; like \"unmap\" but for Normal mode\nnunmenu\t; remove menu for Normal mode\noldfiles\t; list files that have marks in the viminfo file\nomap\t; like \"map\" but for Operator-pending mode\nomapclear\t; remove all mappings for Operator-pending mode\nomenu\t; add menu for Operator-pending mode\nonly\t; close all windows except the current one\nonoremap\t; like \"noremap\" but for Operator-pending mode\nonoremenu\t; like \"noremenu\" but for Operator-pending mode\nopen\t; start open mode (not implemented)\noptions\t; open the options-window\nounmap\t; like \"unmap\" but for Operator-pending mode\nounmenu\t; remove menu for Operator-pending mode\nownsyntax\t; define Window-local syntax\npclose\t; close preview window\npedit\t; edit file in the preview window\nperl\t; execute Perl command\nperldo\t; execute Perl command for each line\npop\t; jump to older entry in tag stack\npopup\t; popup a menu by name\nppop\t; \"pop\" in preview window\npreserve\t; write all text to swap file\nprevious\t; go to previous file in argument list\nprint\t; print lines\nprofdel\t; stop profiling a function or script\nprofile\t; profiling functions and scripts\npromptfind\t; open GUI dialog for searching\npromptrepl\t; open GUI dialog for search/replace\npsearch\t; like \"ijump\" but shows match in preview window\nptNext\t; tNext in preview window\nptag\t; show tag in preview window\nptfirst\t; trewind in preview window\nptjump\t; tjump and show tag in preview window\nptlast\t; tlast in preview window\nptnext\t; tnext in preview window\nptprevious\t; tprevious in preview window\nptrewind\t; trewind in preview window\nptselect\t; tselect and show tag in preview window\nput\t; insert contents of register in the text\npwd\t; print current directory\npy3file\t; execute Python3 script file\npyfile\t; execute Python script file\npython\t; execute Python command\npython3\t; execute Python3 command\nqall\t; quit Vim\nquit\t; quit current window (when one window quit Vim)\nquitall\t; quit Vim\nread\t; read file into the text\nrecover\t; recover a file from a swap file\nredir\t; redirect messages to a file or register\nredo\t; redo one undone change\nredraw\t; force a redraw of the display\nredrawstatus\t; force a redraw of the status line(s)\nregisters\t; display the contents of registers\nresize\t; change current window height\nretab\t; change tab size\nreturn\t; return from a user function\nrewind\t; go to the first file in the argument list\nright\t; right align text\nrightbelow\t; make split window appear right or below\nruby\t; execute Ruby command\nrubydo\t; execute Ruby command for each line\nrubyfile\t; execute Ruby script file\nruntime\t; source vim scripts in 'runtimepath'\nrviminfo\t; read from viminfo file\nsNext\t; split window and go to previous file in argument list\nsall\t; open a window for each file in argument list\nsandbox\t; execute a command in the sandbox\nsargument\t; split window and go to specific file in argument list\nsaveas\t; save file under another name.\nsbNext\t; split window and go to previous file in the buffer list\nsball\t; open a window for each file in the buffer list\nsbfirst\t; split window and go to first file in the buffer list\nsblast\t; split window and go to last file in buffer list\nsbmodified\t; split window and go to modified file in the buffer list\nsbnext\t; split window and go to next file in the buffer list\nsbprevious\t; split window and go to previous file in the buffer list\nsbrewind\t; split window and go to first file in the buffer list\nsbuffer\t; split window and go to specific file in the buffer list\nscriptencoding\t; encoding used in sourced Vim script\nscriptnames\t; list names of all sourced Vim scripts\nscscope\t; split window and execute cscope command\nset\t; show or set options\nsetfiletype\t; set 'filetype', unless it was set already\nsetglobal\t; show global values of options\nsetlocal\t; show or set options locally\nsfind\t; split current window and edit file in 'path'\nsfirst\t; split window and go to first file in the argument list\nshell\t; escape to a shell\nsign\t; manipulate signs\nsilent\t; run a command silently\nsimalt\t; Win32 GUI simulate Windows ALT key\nslast\t; split window and go to last file in the argument list\nsleep\t; do nothing for a few seconds\nsmagic\t; substitute with 'magic'\nsmap\t; like \"map\" but for Select mode\nsmapclear\t; remove all mappings for Select mode\nsmenu\t; add menu for Select mode\nsnext\t; split window and go to next file in the argument list\nsniff\t; send request to sniff\nsnomagic\t; substitute with 'nomagic'\nsnoremap\t; like \"noremap\" but for Select mode\nsnoremenu\t; like \"noremenu\" but for Select mode\nsort\t; sort lines\nsource\t; read Vim or Ex commands from a file\nspelldump\t; split window and fill with all correct words\nspellgood\t; add good word for spelling\nspellinfo\t; show info about loaded spell files\nspellrepall\t; replace all bad words like last z=\nspellundo\t; remove good or bad word\nspellwrong\t; add spelling mistake\nsplit\t; split current window\nsprevious\t; split window and go to previous file in the argument list\nsrewind\t; split window and go to first file in the argument list\nstag\t; split window and jump to a tag\nstartgreplace\t; start Virtual Replace mode\nstartinsert\t; start Insert mode\nstartreplace\t; start Replace mode\nstjump\t; do \"tjump\" and split window\nstop\t; suspend the editor or escape to a shell\nstopinsert\t; stop Insert mode\nstselect\t; do \"tselect\" and split window\nsubstitute\t; find and replace text\nsunhide\t; same as \"unhide\"\nsunmap\t; like \"unmap\" but for Select mode\nsunmenu\t; remove menu for Select mode\nsuspend\t; same as \"stop\"\nsview\t; split window and edit file read-only\nswapname\t; show the name of the current swap file\nsyncbind\t; sync scroll binding\nsyntax\t; syntax highlighting\ntNext\t; jump to previous matching tag\ntab\t; create new tab when opening new window\ntabNext\t; go to previous tab page\ntabclose\t; close current tab page\ntabdo\t; execute command in each tab page\ntabedit\t; edit a file in a new tab page\ntabfind\t; find file in 'path', edit it in a new tab page\ntabfirst\t; got to first tab page\ntablast\t; got to last tab page\ntabmove\t; move tab page to other position\ntabnew\t; edit a file in a new tab page\ntabnext\t; go to next tab page\ntabonly\t; close all tab pages except the current one\ntabprevious\t; go to previous tab page\ntabrewind\t; got to first tab page\ntabs\t; list the tab pages and what they contain\ntag\t; jump to tag\ntags\t; show the contents of the tag stack\ntcl\t; execute Tcl command\ntcldo\t; execute Tcl command for each line\ntclfile\t; execute Tcl script file\ntearoff\t; tear-off a menu\ntfirst\t; jump to first matching tag\nthrow\t; throw an exception\ntjump\t; like \"tselect\", but jump directly when there is only one match\ntlast\t; jump to last matching tag\ntmenu\t; define menu tooltip\ntnext\t; jump to next matching tag\ntopleft\t; make split window appear at top or far left\ntprevious\t; jump to previous matching tag\ntrewind\t; jump to first matching tag\ntry\t; execute commands, abort on error or exception\ntselect\t; list matching tags and select one\ntunmenu\t; remove menu tooltip\nunabbreviate\t; remove abbreviation\nundo\t; undo last change(s)\nundojoin\t; join next change with previous undo block\nundolist\t; list leafs of the undo tree\nunhide\t; open a window for each loaded file in the buffer list\nunlet\t; delete variable\nunlockvar\t; unlock variables\nunmap\t; remove mapping\nunmenu\t; remove menu\nunsilent\t; run a command not silently\nupdate\t; write buffer if modified\nverbose\t; execute command with 'verbose' set\nversion\t; print version number and other info\nvertical\t; make following command split vertically\nvglobal\t; execute commands for not matching lines\nview\t; edit a file read-only\nvimgrep\t; search for pattern in files\nvimgrepadd\t; like vimgrep, but append to current list\nvisual\t; same as \"edit\", but turns off \"Ex\" mode\nviusage\t; overview of Normal mode commands\nvmap\t; like \"map\" but for Visual+Select mode\nvmapclear\t; remove all mappings for Visual+Select mode\nvmenu\t; add menu for Visual+Select mode\nvnew\t; create a new empty window, vertically split\nvnoremap\t; like \"noremap\" but for Visual+Select mode\nvnoremenu\t; like \"noremenu\" but for Visual+Select mode\nvsplit\t; split current window vertically\nvunmap\t; like \"unmap\" but for Visual+Select mode\nvunmenu\t; remove menu for Visual+Select mode\nwNext\t; write to a file and go to previous file in argument list\nwall\t; write all (changed) buffers\nwhile\t; execute loop for as long as condition met\nwincmd\t; execute a Window (CTRL-W) command\nwindo\t; execute command in each window\nwinpos\t; get or set window position\nwinsize\t; get or set window size (obsolete)\nwnext\t; write to a file and go to next file in argument list\nwprevious\t; write to a file and go to previous file in argument list\nwqall\t; write all changed buffers and quit Vim\nwrite\t; write to a file\nwsverb\t; pass the verb to workshop over IPC\nwviminfo\t; write to viminfo file\nxall\t; same as \"wqall\"\nxit\t; write if buffer changed and quit window or Vim\nxmap\t; like \"map\" but for Visual mode\nxmapclear\t; remove all mappings for Visual mode\nxmenu\t; add menu for Visual mode\nxnoremap\t; like \"noremap\" but for Visual mode\nxnoremenu\t; like \"noremenu\" but for Visual mode\nxunmap\t; like \"unmap\" but for Visual mode\nxunmenu\t; remove menu for Visual mode\nyank\t; yank lines into a register\n"
  },
  {
    "path": "autoload/neocomplcache/sources/vim_complete/features.dict",
    "content": "all_builtin_terms ; Compiled with all builtin terminals enabled.\namiga ; Amiga version of Vim.\narabic ; Compiled with Arabic support |Arabic|.\narp ; Compiled with ARP support (Amiga).\nautocmd ; Compiled with autocommand support. |autocommand|\nballoon_eval ; Compiled with |balloon-eval| support.\nballoon_multiline ; GUI supports multiline balloons.\nbeos ; BeOS version of Vim.\nbrowse ; Compiled with |:browse| support, and browse() will work.\nbuiltin_terms ; Compiled with some builtin terminals.\nbyte_offset ; Compiled with support for 'o' in 'statusline'\ncindent ; Compiled with 'cindent' support.\nclientserver ; Compiled with remote invocation support |clientserver|.\nclipboard ; Compiled with 'clipboard' support.\ncmdline_compl ; Compiled with |cmdline-completion| support.\ncmdline_hist ; Compiled with |cmdline-history| support.\ncmdline_info ; Compiled with 'showcmd' and 'ruler' support.\ncomments ; Compiled with |'comments'| support.\ncompatible ; Compiled to be very Vi compatible.\ncryptv ; Compiled with encryption support |encryption|.\ncscope ; Compiled with |cscope| support.\ndebug ; Compiled with \"DEBUG\" defined.\ndialog_con ; Compiled with console dialog support.\ndialog_gui ; Compiled with GUI dialog support.\ndiff ; Compiled with |vimdiff| and 'diff' support.\ndigraphs ; Compiled with support for digraphs.\ndnd ; Compiled with support for the \"~ register |quote_~|.\ndos16 ; 16 bits DOS version of Vim.\ndos32 ; 32 bits DOS (DJGPP) version of Vim.\nebcdic ; Compiled on a machine with ebcdic character set.\nemacs_tags ; Compiled with support for Emacs tags.\neval ; Compiled with expression evaluation support. Always true, of course!\nex_extra ; Compiled with extra Ex commands |+ex_extra|.\nextra_search ; Compiled with support for |'incsearch'| and |'hlsearch'|\nfarsi ; Compiled with Farsi support |farsi|.\nfile_in_path ; Compiled with support for |gf| and |<cfile>|\nfilterpipe ; When 'shelltemp' is off pipes are used for shell read/write/filter commands\nfind_in_path ; Compiled with support for include file searches |+find_in_path|.\nfloat ; Compiled with support for |Float|.\nfname_case ; Case in file names matters (for Amiga, MS-DOS, and Windows this is not present).\nfolding ; Compiled with |folding| support.\nfooter ; Compiled with GUI footer support. |gui-footer|\nfork ; Compiled to use fork()/exec() instead of system().\ngettext ; Compiled with message translation |multi-lang|\ngui ; Compiled with GUI enabled.\ngui_athena ; Compiled with Athena GUI.\ngui_gnome ; Compiled with Gnome support (gui_gtk is also defined).\ngui_gtk ; Compiled with GTK+ GUI (any version).\ngui_gtk2 ; Compiled with GTK+ 2 GUI (gui_gtk is also defined).\ngui_mac ; Compiled with Macintosh GUI.\ngui_motif ; Compiled with Motif GUI.\ngui_photon ; Compiled with Photon GUI.\ngui_running ; Vim is running in the GUI, or it will start soon.\ngui_win32 ; Compiled with MS Windows Win32 GUI.\ngui_win32s ; idem, and Win32s system being used (Windows 3.1)\nhangul_input ; Compiled with Hangul input support. |hangul|\niconv ; Can use iconv() for conversion.\ninsert_expand ; Compiled with support for CTRL-X expansion commands in Insert mode.\njumplist ; Compiled with |jumplist| support.\nkeymap ; Compiled with 'keymap' support.\nlangmap ; Compiled with 'langmap' support.\nlibcall ; Compiled with |libcall()| support.\nlinebreak ; Compiled with 'linebreak', 'breakat' and 'showbreak' support.\nlispindent ; Compiled with support for lisp indenting.\nlistcmds ; Compiled with commands for the buffer list |:files| and the argument list |arglist|.\nlocalmap ; Compiled with local mappings and abbr. |:map-local|\nlua ; Compiled with Lua interface |Lua|.\nmac ; Macintosh version of Vim.\nmacunix ; Macintosh version of Vim, using Unix files (OS-X).\nmenu ; Compiled with support for |:menu|.\nmksession ; Compiled with support for |:mksession|.\nmodify_fname ; Compiled with file name modifiers. |filename-modifiers|\nmouse ; Compiled with support mouse.\nmouse_dec ; Compiled with support for Dec terminal mouse.\nmouse_gpm ; Compiled with support for gpm (Linux console mouse)\nmouse_netterm ; Compiled with support for netterm mouse.\nmouse_pterm ; Compiled with support for qnx pterm mouse.\nmouse_sysmouse ; Compiled with support for sysmouse (*BSD console mouse)\nmouse_xterm ; Compiled with support for xterm mouse.\nmouseshape ; Compiled with support for 'mouseshape'.\nmulti_byte ; Compiled with support for 'encoding'\nmulti_byte_encoding ; 'encoding' is set to a multi-byte encoding.\nmulti_byte_ime ; Compiled with support for IME input method.\nmulti_lang ; Compiled with support for multiple languages.\nmzscheme ; Compiled with MzScheme interface |mzscheme|.\nnetbeans_enabled ; Compiled with support for |netbeans| and it's used.\nnetbeans_intg ; Compiled with support for |netbeans|.\nole ; Compiled with OLE automation support for Win32.\nos2 ; OS/2 version of Vim.\nosfiletype ; Compiled with support for osfiletypes |+osfiletype|\npath_extra ; Compiled with up/downwards search in 'path' and 'tags'\nperl ; Compiled with Perl interface.\npersistent_undo ; Compiled with support for persistent undo history.\npostscript ; Compiled with PostScript file printing.\nprinter ; Compiled with |:hardcopy| support.\nprofile ; Compiled with |:profile| support.\npython ; Compiled with Python interface.\npython3 ; Compiled with Python3 interface.\nqnx ; QNX version of Vim.\nquickfix ; Compiled with |quickfix| support.\nreltime ; Compiled with |reltime()| support.\nrightleft ; Compiled with 'rightleft' support.\nruby ; Compiled with Ruby interface |ruby|.\nscrollbind ; Compiled with 'scrollbind' support.\nshowcmd ; Compiled with 'showcmd' support.\nsigns ; Compiled with |:sign| support.\nsmartindent ; Compiled with 'smartindent' support.\nsniff ; Compiled with SNiFF interface support.\nspell ; Compiled with spell checking support |spell|.\nstatusline ; Compiled with |--startuptime| support.\nsun_workshop ; Compiled with support for Sun |workshop|.\nsyntax ; Compiled with syntax highlighting support |syntax|.\nsyntax_items ; There are active syntax highlighting items for the current buffer.\nsystem ; Compiled to use system() instead of fork()/exec().\ntag_any_white ; Compiled with support for any white characters in tags files |tag-any-white|.\ntag_binary ; Compiled with binary searching in tags files |tag-binary-search|.\ntag_old_static ; Compiled with support for old static tags |tag-old-static|.\ntcl ; Compiled with Tcl interface.\nterminfo ; Compiled with terminfo instead of termcap.\ntermresponse ; Compiled with support for |t_RV| and |v:termresponse|.\ntextobjects ; Compiled with support for |text-objects|.\ntgetent ; Compiled with tgetent support, able to use a termcap or terminfo file.\ntitle ; Compiled with window title support |'title'|.\ntoolbar ; Compiled with support for |gui-toolbar|.\nunix ; Unix version of Vim.\nunnamedplus ; Usable '+' register instead of '*' register.\nuser_commands ; User-defined commands.\nvertsplit ; Compiled with vertically split windows |:vsplit|.\nvim_starting ; True while initial source'ing takes place.\nviminfo ; Compiled with viminfo support.\nvirtualedit ; Compiled with 'virtualedit' option.\nvisual ; Compiled with Visual mode.\nvisualextra ; Compiled with extra Visual mode commands.\nvms ; VMS version of Vim.\nvreplace ; Compiled with |gR| and |gr| commands.\nwildignore ; Compiled with 'wildignore' option.\nwildmenu ; Compiled with 'wildmenu' option.\nwin16 ; Win16 version of Vim (MS-Windows 3.1).\nwin32 ; Win32 version of Vim (MS-Windows 95/98/ME/NT/2000/XP).\nwin32unix ; Win32 version of Vim, using Unix files (Cygwin)\nwin64 ; Win64 version of Vim (MS-Windows 64 bit).\nwin95 ; Win32 version for MS-Windows 95/98/ME.\nwinaltkeys ; Compiled with 'winaltkeys' option.\nwindows ; Compiled with support for more than one window.\nwritebackup ; Compiled with 'writebackup' default on.\nx11 ; Compiled with X11 support.\nxfontset ; Compiled with X fontset support |xfontset|.\nxim ; Compiled with X input method support |xim|.\nxpm_w32 ; Compiled with pixmap support for Win32.\nxsmp ; Compiled with X session management support.\nxsmp_interact ; Compiled with interactive X session management support.\nxterm_clipboard ; Compiled with support for xterm clipboard.\nxterm_save ; Compiled with support for saving and restoring the xterm screen.\n"
  },
  {
    "path": "autoload/neocomplcache/sources/vim_complete/functions.dict",
    "content": "abs({expr})\nacos({expr})\nadd({list}, {item})\nappend({lnum}, {list})\nappend({lnum}, {string})\nargc()\nargidx()\nargv()\nargv({nr})\nasin({expr})\natan({expr})\natan2({expr1}, {expr2})\nbrowse({save}, {title}, {initdir}, {default})\nbrowsedir({title}, {initdir})\nbufexists({expr})\nbuflisted({expr})\nbufloaded({expr})\nbufname({expr})\nbufnr({expr})\nbufwinnr({expr})\nbyte2line({byte})\nbyteidx({expr}, {nr})\ncall({func}, {arglist} [, {dict}])\nceil({expr})\nchangenr()\nchar2nr({expr})\ncindent({lnum})\nclearmatches()\ncol({expr})\ncomplete({startcol}, {matches})\ncomplete_add({expr})\ncomplete_check()\nconfirm({msg} [, {choices} [, {default} [, {type}]]])\ncopy({expr})\ncos({expr})\ncosh({expr})\ncount({list}, {expr} [, {start} [, {ic}]])\ncscope_connection([{num} , {dbpath} [, {prepend}]])\ncursor({list})\ncursor({lnum}, {col} [, {coladd}])\ndeepcopy({expr})\ndelete({fname})\ndid_filetype()\ndiff_filler({lnum})\ndiff_hlID({lnum}, {col})\nempty({expr})\nescape({string}, {chars})\neval({string})\neventhandler()\nexecutable({expr})\nexists({expr})\nexp({expr})\nexpand({expr} [, {flag}])\nextend({expr1}, {expr2} [, {expr3}])\nfeedkeys({string} [, {mode}])\nfilereadable({file})\nfilewritable({file})\nfilter({expr}, {string})\nfinddir({name}[, {path}[, {count}]])\nfindfile({name}[, {path}[, {count}]])\nfloat2nr({expr})\nfloor({expr})\nfmod({expr1}, {expr2})\nfnameescape({fname})\nfnamemodify({fname}, {mods})\nfoldclosed({lnum})\nfoldclosedend({lnum})\nfoldlevel({lnum})\nfoldtext()\nfoldtextresult({lnum})\nforeground()\nfunction({name})\ngarbagecollect([at_exit])\nget({dict}, {key} [, {def}])\nget({list}, {idx} [, {def}])\ngetbufline({expr}, {lnum} [, {end}])\ngetbufvar({expr}, {varname})\ngetchar([expr])\ngetcharmod()\ngetcmdline()\ngetcmdpos()\ngetcmdtype()\ngetcwd()\ngetfontname([{name}])\ngetfperm({fname})\ngetfsize({fname})\ngetftime({fname})\ngetftype({fname})\ngetline({lnum})\ngetline({lnum}, {end})\ngetloclist({nr})\ngetmatches()\ngetpid()\ngetpos({expr})\ngetqflist()\ngetreg([{regname} [, 1]])\ngetregtype([{regname}])\ngettabvar({tabnr}, {varname})\ngettabwinvar({tabnr}, {winnr}, {name})\ngetwinposx()\ngetwinposy()\ngetwinvar({nr}, {varname})\nglob({expr} [, {flag}])\nglobpath({path}, {expr} [, {flag}])\nhas({feature})\nhas_key({dict}, {key})\nhaslocaldir()\nhasmapto({what} [, {mode} [, {abbr}]])\nhistadd({history},{item})\nhistdel({history} [, {item}])\nhistget({history} [, {index}])\nhistnr({history})\nhlID({name})\nhlexists({name})\nhostname()\niconv({expr}, {from}, {to})\nindent({lnum})\nindex({list}, {expr} [, {start} [, {ic}]])\ninput({prompt} [, {text} [, {completion}]])\ninputdialog({p} [, {t} [, {c}]])\ninputlist({textlist})\ninputrestore()\ninputsave()\ninputsecret({prompt} [, {text}])\ninsert({list}, {item} [, {idx}])\nisdirectory({directory})\nislocked({expr})\nitems({dict})\njoin({list} [, {sep}])\nkeys({dict})\nlen({expr})\nlibcall({lib}, {func}, {arg})\nlibcallnr({lib}, {func}, {arg})\nline({expr})\nline2byte({lnum})\nlispindent({lnum})\nlocaltime()\nlog({expr})\nlog10({expr})\nmap({expr}, {string})\nmaparg({name}[, {mode} [, {abbr}]])\nmapcheck({name}[, {mode} [, {abbr}]])\nmatch({expr}, {pat}[, {start}[, {count}]])\nmatchadd({group}, {pattern}[, {priority}[, {id}]])\nmatcharg({nr})\nmatchdelete({id})\nmatchend({expr}, {pat}[, {start}[, {count}]])\nmatchlist({expr}, {pat}[, {start}[, {count}]])\nmatchstr({expr}, {pat}[, {start}[, {count}]])\nmax({list})\nmin({list})\nmkdir({name} [, {path} [, {prot}]])\nmode([expr])\nnextnonblank({lnum})\nnr2char({expr})\npathshorten({expr})\npow({x}, {y})\nprevnonblank({lnum})\nprintf({fmt}, {expr1}...)\npumvisible()\nrange({expr} [, {max} [, {stride}]])\nreadfile({fname} [, {binary} [, {max}]])\nreltime([{start} [, {end}]])\nreltimestr({time})\nremote_expr({server}, {string} [, {idvar}])\nremote_foreground({server})\nremote_peek({serverid} [, {retvar}])\nremote_read({serverid})\nremote_send({server}, {string} [, {idvar}])\nremove({dict}, {key})\nremove({list}, {idx} [, {end}])\nrename({from}, {to})\nrepeat({expr}, {count})\nresolve({filename})\nreverse({list})\nround({expr})\nsearch({pattern} [, {flags} [, {stopline} [, {timeout}]]])\nsearchdecl({name} [, {global} [, {thisblock}]])\nsearchpair({start}, {middle}, {end} [, {flags} [, {skip} [...]]])\nsearchpairpos({start}, {middle}, {end} [, {flags} [, {skip} [...]]])\nsearchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]])\nserver2client({clientid}, {string})\nserverlist()\nsetbufvar({expr}, {varname}, {val})\nsetcmdpos({pos})\nsetline({lnum}, {line})\nsetloclist({nr}, {list}[, {action}])\nsetmatches({list})\nsetpos({expr}, {list})\nsetqflist({list}[, {action}])\nsetreg({n}, {v}[, {opt}])\nsettabvar({tabnr}, {varname}, {val})\nsettabwinvar({tabnr}, {winnr}, {varname}, {val})\nsetwinvar({nr}, {varname}, {val})\nshellescape({string} [, {special}])\nsimplify({filename})\nsin({expr})\nsinh({expr})\nsort({list} [, {func}])\nsoundfold({word})\nspellbadword()\nspellsuggest({word} [, {max} [, {capital}]])\nsplit({expr} [, {pat} [, {keepempty}]])\nsqrt({expr})\nstr2float({expr})\nstr2nr({expr} [, {base}])\nstrchars({expr})\nstrdisplaywidth({expr}[, {col}])\nstrftime({format}[, {time}])\nstridx({haystack}, {needle}[, {start}])\nstring({expr})\nstrlen({expr})\nstrpart({src}, {start}[, {len}])\nstrridx({haystack}, {needle} [, {start}])\nstrtrans({expr})\nstrwidth({expr})\nsubmatch({nr})\nsubstitute({expr}, {pat}, {sub}, {flags})\nsynID({lnum}, {col}, {trans})\nsynIDattr({synID}, {what} [, {mode}])\nsynIDtrans({synID})\nsynconcealed({lnum}, {col})\nsynstack({lnum}, {col})\nsystem({expr} [, {input}])\ntabpagebuflist([{arg}])\ntabpagenr([{arg}])\ntabpagewinnr({tabarg}[, {arg}])\ntagfiles()\ntaglist({expr})\ntan({expr})\ntanh({expr})\ntempname()\ntolower({expr})\ntoupper({expr})\ntr({src}, {fromstr}, {tostr})\ntrunc({expr}\ntype({name})\nundofile({name})\nundotree()\nvalues({dict})\nvirtcol({expr})\nvisualmode([expr])\nwinbufnr({nr})\nwincol()\nwinheight({nr})\nwinline()\nwinnr([{expr}])\nwinrestcmd()\nwinrestview({dict})\nwinsaveview()\nwinwidth({nr})\nwritefile({list}, {fname} [, {binary}])\n"
  },
  {
    "path": "autoload/neocomplcache/sources/vim_complete/helper.vim",
    "content": "\"=============================================================================\n\" FILE: helper.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 24 Apr 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nif !exists('s:internal_candidates_list')\n  let s:internal_candidates_list = {}\n  let s:global_candidates_list = { 'dictionary_variables' : {} }\n  let s:script_candidates_list = {}\n  let s:local_candidates_list = {}\nendif\n\nfunction! neocomplcache#sources#vim_complete#helper#on_filetype() \"{{{\n  \" Caching script candidates.\n  let bufnumber = 1\n\n  \" Check buffer.\n  while bufnumber <= bufnr('$')\n    if getbufvar(bufnumber, '&filetype') == 'vim' && bufloaded(bufnumber)\n          \\&& !has_key(s:script_candidates_list, bufnumber)\n      let s:script_candidates_list[bufnumber] = s:get_script_candidates(bufnumber)\n    endif\n\n    let bufnumber += 1\n  endwhile\n\n  if neocomplcache#exists_echodoc()\n    call echodoc#register('vim_complete', s:doc_dict)\n  endif\nendfunction\"}}}\n\nfunction! neocomplcache#sources#vim_complete#helper#recaching(bufname) \"{{{\n  \" Caching script candidates.\n  let bufnumber = a:bufname != '' ? bufnr(a:bufname) : bufnr('%')\n\n  if getbufvar(bufnumber, '&filetype') == 'vim' && bufloaded(bufnumber)\n    let s:script_candidates_list[bufnumber] = s:get_script_candidates(bufnumber)\n  endif\n  let s:global_candidates_list = { 'dictionary_variables' : {} }\nendfunction\"}}}\n\n\" For echodoc. \"{{{\nlet s:doc_dict = {\n      \\ 'name' : 'vim_complete',\n      \\ 'rank' : 10,\n      \\ 'filetypes' : { 'vim' : 1 },\n      \\ }\nfunction! s:doc_dict.search(cur_text) \"{{{\n  let cur_text = a:cur_text\n\n  \" Echo prototype.\n  let script_candidates_list = s:get_cached_script_candidates()\n\n  let prototype_name = matchstr(cur_text,\n        \\'\\%(<[sS][iI][dD]>\\|[sSgGbBwWtTlL]:\\)\\=\\%(\\i\\|[#.]\\|{.\\{-1,}}\\)*\\s*(\\ze\\%([^(]\\|(.\\{-})\\)*$')\n  let ret = []\n  if prototype_name != ''\n    if !has_key(s:internal_candidates_list, 'function_prototypes')\n      \" No cache.\n      return []\n    endif\n\n    \" Search function name.\n    call add(ret, { 'text' : prototype_name, 'highlight' : 'Identifier' })\n    if has_key(s:internal_candidates_list.function_prototypes, prototype_name)\n      call add(ret, { 'text' : s:internal_candidates_list.function_prototypes[prototype_name] })\n    elseif has_key(s:global_candidates_list.function_prototypes, prototype_name)\n      call add(ret, { 'text' : s:global_candidates_list.function_prototypes[prototype_name] })\n    elseif has_key(script_candidates_list.function_prototypes, prototype_name)\n      call add(ret, { 'text' : script_candidates_list.function_prototypes[prototype_name] })\n    else\n      \" No prototypes.\n      return []\n    endif\n  else\n    if !has_key(s:internal_candidates_list, 'command_prototypes')\n      \" No cache.\n      return []\n    endif\n\n    \" Search command name.\n    \" Skip head digits.\n    let prototype_name = neocomplcache#sources#vim_complete#get_command(cur_text)\n    call add(ret, { 'text' : prototype_name, 'highlight' : 'Statement' })\n    if has_key(s:internal_candidates_list.command_prototypes, prototype_name)\n      call add(ret, { 'text' : s:internal_candidates_list.command_prototypes[prototype_name] })\n    elseif has_key(s:global_candidates_list.command_prototypes, prototype_name)\n      call add(ret, { 'text' : s:global_candidates_list.command_prototypes[prototype_name] })\n    else\n      \" No prototypes.\n      return []\n    endif\n  endif\n\n  return ret\nendfunction\"}}}\n\"}}}\n\nfunction! neocomplcache#sources#vim_complete#helper#get_command_completion(command_name, cur_text, complete_str) \"{{{\n  let completion_name =\n        \\ neocomplcache#sources#vim_complete#helper#get_completion_name(a:command_name)\n  if completion_name == ''\n    \" Not found.\n    return []\n  endif\n\n  let args = (completion_name ==# 'custom' || completion_name ==# 'customlist')?\n        \\ [a:command_name, a:cur_text, a:complete_str] : [a:cur_text, a:complete_str]\n  return call('neocomplcache#sources#vim_complete#helper#'.completion_name, args)\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#get_completion_name(command_name) \"{{{\n  if !has_key(s:internal_candidates_list, 'command_completions')\n    let s:internal_candidates_list.command_completions =\n          \\ s:caching_completion_from_dict('command_completions')\n  endif\n  if !has_key(s:global_candidates_list, 'command_completions')\n    let s:global_candidates_list.commands =\n          \\ neocomplcache#pack_dictionary(s:get_cmdlist())\n  endif\n\n  if has_key(s:internal_candidates_list.command_completions, a:command_name)\n        \\&& exists('*neocomplcache#sources#vim_complete#helper#'\n        \\ .s:internal_candidates_list.command_completions[a:command_name])\n    return s:internal_candidates_list.command_completions[a:command_name]\n  elseif has_key(s:global_candidates_list.command_completions, a:command_name)\n        \\&& exists('*neocomplcache#sources#vim_complete#helper#'\n        \\ .s:global_candidates_list.command_completions[a:command_name])\n    return s:global_candidates_list.command_completions[a:command_name]\n  else\n    return ''\n  endif\nendfunction\"}}}\n\nfunction! neocomplcache#sources#vim_complete#helper#autocmd_args(cur_text, complete_str) \"{{{\n  let args = s:split_args(a:cur_text, a:complete_str)\n  if len(args) < 2\n    return []\n  endif\n\n  \" Caching.\n  if !has_key(s:global_candidates_list, 'augroups')\n    let s:global_candidates_list.augroups = s:get_augrouplist()\n  endif\n  if !has_key(s:internal_candidates_list, 'autocmds')\n    let s:internal_candidates_list.autocmds = s:caching_from_dict('autocmds', '')\n  endif\n\n  let list = []\n  if len(args) == 2\n    let list += s:global_candidates_list.augroups + s:internal_candidates_list.autocmds\n  elseif len(args) == 3\n    if args[1] ==# 'FileType'\n      \" Filetype completion.\n      let list += neocomplcache#sources#vim_complete#helper#filetype(a:cur_text, a:complete_str)\n    endif\n\n    let list += s:internal_candidates_list.autocmds\n  elseif len(args) == 4\n    if args[2] ==# 'FileType'\n      \" Filetype completion.\n      let list += neocomplcache#sources#vim_complete#helper#filetype(\n            \\ a:cur_text, a:complete_str)\n    endif\n\n    let list += neocomplcache#sources#vim_complete#helper#command(\n          \\ args[3], a:complete_str)\n    let list += s:make_completion_list(['nested'], '')\n  else\n    let command = args[3] =~ '^*' ?\n          \\ join(args[4:]) : join(args[3:])\n    let list += neocomplcache#sources#vim_complete#helper#command(\n          \\ command, a:complete_str)\n    let list += s:make_completion_list(['nested'], '')\n  endif\n\n  return list\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#augroup(cur_text, complete_str) \"{{{\n  \" Caching.\n  if !has_key(s:global_candidates_list, 'augroups')\n    let s:global_candidates_list.augroups = s:get_augrouplist()\n  endif\n\n  return s:global_candidates_list.augroups\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#buffer(cur_text, complete_str) \"{{{\n  return []\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#colorscheme_args(cur_text, complete_str) \"{{{\n  return s:make_completion_list(filter(map(split(\n        \\ globpath(&runtimepath, 'colors/*.vim'), '\\n'),\n        \\ 'fnamemodify(v:val, \":t:r\")'),\n        \\ 'stridx(v:val, a:complete_str) == 0'), '')\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#command(cur_text, complete_str) \"{{{\n  if a:cur_text == '' ||\n        \\ a:cur_text =~ '^[[:digit:],[:space:][:tab:]$''<>]*\\h\\w*$'\n    \" Commands.\n\n    \" Caching.\n    if !has_key(s:global_candidates_list, 'commands')\n      let s:global_candidates_list.commands =\n            \\ neocomplcache#pack_dictionary(s:get_cmdlist())\n    endif\n    if !has_key(s:internal_candidates_list, 'commands')\n      let s:internal_candidates_list.command_prototypes =\n            \\ s:caching_prototype_from_dict('command_prototypes')\n      let commands = s:caching_from_dict('commands', 'c')\n      for command in commands\n        if has_key(s:internal_candidates_list.command_prototypes, command.word)\n          let command.description = command.word .\n                \\ s:internal_candidates_list.command_prototypes[command.word]\n        endif\n      endfor\n\n      let s:internal_candidates_list.commands =\n            \\ neocomplcache#pack_dictionary(commands)\n    endif\n\n    \" echomsg string(s:internal_candidates_list.commands)[: 1000]\n    \" echomsg string(s:global_candidates_list.commands)[: 1000]\n    let list = neocomplcache#dictionary_filter(\n          \\ s:internal_candidates_list.commands, a:complete_str)\n          \\ + neocomplcache#dictionary_filter(\n          \\ s:global_candidates_list.commands, a:complete_str)\n  else\n    \" Commands args.\n    let command = neocomplcache#sources#vim_complete#get_command(a:cur_text)\n    let completion_name =\n          \\ neocomplcache#sources#vim_complete#helper#get_completion_name(command)\n\n    \" Prevent infinite loop.\n    let cur_text = completion_name ==# 'command' ?\n          \\ a:cur_text[len(command):] : a:cur_text\n\n    let list = neocomplcache#sources#vim_complete#helper#get_command_completion(\n          \\ command, cur_text, a:complete_str)\n\n    if a:cur_text =~\n          \\'[[(,{]\\|`=[^`]*$'\n      \" Expression.\n      let list += neocomplcache#sources#vim_complete#helper#expression(\n            \\ a:cur_text, a:complete_str)\n    endif\n  endif\n\n  return list\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#command_args(cur_text, complete_str) \"{{{\n  \" Caching.\n  if !has_key(s:internal_candidates_list, 'command_args')\n    let s:internal_candidates_list.command_args =\n          \\ s:caching_from_dict('command_args', '')\n    let s:internal_candidates_list.command_replaces =\n          \\ s:caching_from_dict('command_replaces', '')\n  endif\n\n  return s:internal_candidates_list.command_args +\n        \\ s:internal_candidates_list.command_replaces\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#custom(command_name, cur_text, complete_str) \"{{{\n  if !has_key(g:neocomplcache_vim_completefuncs, a:command_name)\n    return []\n  endif\n\n  return s:make_completion_list(split(\n        \\ call(g:neocomplcache_vim_completefuncs[a:command_name],\n        \\ [a:complete_str, getline('.'), len(a:cur_text)]), '\\n'), '')\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#customlist(command_name, cur_text, complete_str) \"{{{\n  if !has_key(g:neocomplcache_vim_completefuncs, a:command_name)\n    return []\n  endif\n\n  return s:make_completion_list(\n        \\ call(g:neocomplcache_vim_completefuncs[a:command_name],\n        \\ [a:complete_str, getline('.'), len(a:cur_text)]), '')\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#dir(cur_text, complete_str) \"{{{\n  return filter(neocomplcache#sources#filename_complete#get_complete_words(\n        \\ a:complete_str, '.'), 'isdirectory(v:val.word)')\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#environment(cur_text, complete_str) \"{{{\n  \" Caching.\n  if !has_key(s:global_candidates_list, 'environments')\n    let s:global_candidates_list.environments = s:get_envlist()\n  endif\n\n  return s:global_candidates_list.environments\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#event(cur_text, complete_str) \"{{{\n  return []\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#execute(cur_text, complete_str) \"{{{\n  if a:cur_text =~ '[\"''][^\"'']*$'\n    let command = matchstr(a:cur_text, '[\"'']\\zs[^\"'']*$')\n    return neocomplcache#sources#vim_complete#helper#command(command, a:complete_str)\n  else\n    return neocomplcache#sources#vim_complete#helper#expression(a:cur_text, a:complete_str)\n  endif\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#expression(cur_text, complete_str) \"{{{\n  return neocomplcache#sources#vim_complete#helper#function(a:cur_text, a:complete_str)\n        \\+ neocomplcache#sources#vim_complete#helper#var(a:cur_text, a:complete_str)\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#feature(cur_text, complete_str) \"{{{\n  if !has_key(s:internal_candidates_list, 'features')\n    let s:internal_candidates_list.features = s:caching_from_dict('features', '')\n  endif\n  return s:internal_candidates_list.features\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#file(cur_text, complete_str) \"{{{\n  return neocomplcache#sources#filename_complete#get_complete_words(\n        \\ a:complete_str, '.')\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#filetype(cur_text, complete_str) \"{{{\n  if !has_key(s:internal_candidates_list, 'filetypes')\n    let s:internal_candidates_list.filetypes =\n          \\ neocomplcache#pack_dictionary(s:make_completion_list(map(\n          \\ split(globpath(&runtimepath, 'syntax/*.vim'), '\\n') +\n          \\ split(globpath(&runtimepath, 'indent/*.vim'), '\\n') +\n          \\ split(globpath(&runtimepath, 'ftplugin/*.vim'), '\\n')\n          \\ , \"matchstr(fnamemodify(v:val, ':t:r'), '^[[:alnum:]-]*')\"), ''))\n  endif\n\n  return neocomplcache#dictionary_filter(\n          \\ s:internal_candidates_list.filetypes, a:complete_str)\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#function(cur_text, complete_str) \"{{{\n  \" Caching.\n  if !has_key(s:global_candidates_list, 'functions')\n    let s:global_candidates_list.functions =\n          \\ neocomplcache#pack_dictionary(s:get_functionlist())\n  endif\n  if !has_key(s:internal_candidates_list, 'functions')\n    let s:internal_candidates_list.function_prototypes =\n          \\ s:caching_prototype_from_dict('functions')\n\n    let functions = s:caching_from_dict('functions', 'f')\n    for function in functions\n      if has_key(s:internal_candidates_list.function_prototypes, function.word)\n        let function.description = function.word\n              \\ . s:internal_candidates_list.function_prototypes[function.word]\n      endif\n    endfor\n\n    let s:internal_candidates_list.functions =\n          \\ neocomplcache#pack_dictionary(functions)\n  endif\n\n  let script_candidates_list = s:get_cached_script_candidates()\n  if a:complete_str =~ '^s:'\n    let list = values(script_candidates_list.functions)\n  elseif a:complete_str =~ '^\\a:'\n    let functions = deepcopy(values(script_candidates_list.functions))\n    for keyword in functions\n      let keyword.word = '<SID>' . keyword.word[2:]\n      let keyword.abbr = '<SID>' . keyword.abbr[2:]\n    endfor\n    let list = functions\n  else\n    let list = neocomplcache#dictionary_filter(\n          \\ s:internal_candidates_list.functions, a:complete_str)\n          \\ + neocomplcache#dictionary_filter(\n          \\ s:global_candidates_list.functions, a:complete_str)\n  endif\n\n  return list\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#help(cur_text, complete_str) \"{{{\n  return []\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#highlight(cur_text, complete_str) \"{{{\n  return []\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#let(cur_text, complete_str) \"{{{\n  if a:cur_text !~ '='\n    return neocomplcache#sources#vim_complete#helper#var(a:cur_text, a:complete_str)\n  elseif a:cur_text =~# '\\<let\\s\\+&\\%([lg]:\\)\\?filetype\\s*=\\s*'\n    \" FileType.\n    return neocomplcache#sources#vim_complete#helper#filetype(a:cur_text, a:complete_str)\n  else\n    return neocomplcache#sources#vim_complete#helper#expression(a:cur_text, a:complete_str)\n  endif\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#mapping(cur_text, complete_str) \"{{{\n  \" Caching.\n  if !has_key(s:global_candidates_list, 'mappings')\n    let s:global_candidates_list.mappings = s:get_mappinglist()\n  endif\n  if !has_key(s:internal_candidates_list, 'mappings')\n    let s:internal_candidates_list.mappings = s:caching_from_dict('mappings', '')\n  endif\n\n  let list = s:internal_candidates_list.mappings + s:global_candidates_list.mappings\n\n  if a:cur_text =~ '<expr>'\n    let list += neocomplcache#sources#vim_complete#helper#expression(a:cur_text, a:complete_str)\n  elseif a:cur_text =~ ':<C-u>\\?'\n    let command = matchstr(a:cur_text, ':<C-u>\\?\\zs.*$')\n    let list += neocomplcache#sources#vim_complete#helper#command(command, a:complete_str)\n  endif\n\n  return list\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#menu(cur_text, complete_str) \"{{{\n  return []\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#option(cur_text, complete_str) \"{{{\n  \" Caching.\n  if !has_key(s:internal_candidates_list, 'options')\n    let s:internal_candidates_list.options = s:caching_from_dict('options', 'o')\n\n    for keyword in deepcopy(s:internal_candidates_list.options)\n      let keyword.word = 'no' . keyword.word\n      let keyword.abbr = 'no' . keyword.abbr\n      call add(s:internal_candidates_list.options, keyword)\n    endfor\n  endif\n\n  if a:cur_text =~ '\\<set\\%[local]\\s\\+\\%(filetype\\|ft\\)='\n    return neocomplcache#sources#vim_complete#helper#filetype(a:cur_text, a:complete_str)\n  else\n    return s:internal_candidates_list.options\n  endif\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#shellcmd(cur_text, complete_str) \"{{{\n  return []\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#tag(cur_text, complete_str) \"{{{\n  return []\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#tag_listfiles(cur_text, complete_str) \"{{{\n  return []\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#var_dictionary(cur_text, complete_str) \"{{{\n  let var_name = matchstr(a:cur_text,\n        \\'\\%(\\a:\\)\\?\\h\\w*\\ze\\.\\%(\\h\\w*\\%(()\\?\\)\\?\\)\\?$')\n  let list = []\n  if a:cur_text =~ '[btwg]:\\h\\w*\\.\\%(\\h\\w*\\%(()\\?\\)\\?\\)\\?$'\n    let list = has_key(s:global_candidates_list.dictionary_variables, var_name) ?\n          \\ values(s:global_candidates_list.dictionary_variables[var_name]) : []\n  elseif a:cur_text =~ 's:\\h\\w*\\.\\%(\\h\\w*\\%(()\\?\\)\\?\\)\\?$'\n    let list = values(get(s:get_cached_script_candidates().dictionary_variables,\n          \\ var_name, {}))\n  endif\n\n  return list\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#var(cur_text, complete_str) \"{{{\n  \" Caching.\n  if !has_key(s:global_candidates_list, 'variables')\n    let s:global_candidates_list.variables =\n          \\ neocomplcache#pack_dictionary(\n          \\  s:get_variablelist(g:, 'g:') + s:get_variablelist(v:, 'v:'))\n  endif\n\n  if a:complete_str =~ '^[swtb]:'\n    let list = values(s:get_cached_script_candidates().variables)\n    if a:complete_str !~ '^s:'\n      let prefix = matchstr(a:complete_str, '^[swtb]:')\n      let list += s:get_variablelist(eval(prefix), prefix)\n    endif\n  elseif a:complete_str =~ '^[vg]:'\n    let list = neocomplcache#dictionary_filter(\n          \\ s:global_candidates_list.variables, a:complete_str)\n  else\n    let list = s:get_local_variables()\n  endif\n\n  return list\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#helper#expand(cur_text, complete_str) \"{{{\n  return s:make_completion_list(\n        \\ ['<cfile>', '<afile>', '<abuf>', '<amatch>',\n        \\  '<sfile>', '<cword>', '<cWORD>', '<client>'], '')\nendfunction\"}}}\n\nfunction! s:get_local_variables() \"{{{\n  \" Get local variable list.\n\n  let keyword_dict = {}\n  \" Search function.\n  let line_num = line('.') - 1\n  let end_line = (line('.') > 100) ? line('.') - 100 : 1\n  while line_num >= end_line\n    let line = getline(line_num)\n    if line =~ '\\<endf\\%[unction]\\>'\n      break\n    elseif line =~ '\\<fu\\%[nction]!\\?\\s\\+'\n      \" Get function arguments.\n      call s:analyze_variable_line(line, keyword_dict)\n      break\n    endif\n\n    let line_num -= 1\n  endwhile\n  let line_num += 1\n\n  let end_line = line('.') - 1\n  while line_num <= end_line\n    let line = getline(line_num)\n\n    if line =~ '\\<\\%(let\\|for\\)\\s\\+'\n      if line =~ '\\<\\%(let\\|for\\)\\s\\+s:' &&\n            \\ has_key(s:script_candidates_list, bufnr('%'))\n            \\ && has_key(s:script_candidates_list[bufnr('%')], 'variables')\n        let candidates_list = s:script_candidates_list[bufnr('%')].variables\n      else\n        let candidates_list = keyword_dict\n      endif\n\n      call s:analyze_variable_line(line, candidates_list)\n    endif\n\n    let line_num += 1\n  endwhile\n\n  return values(keyword_dict)\nendfunction\"}}}\n\nfunction! s:get_cached_script_candidates() \"{{{\n  return has_key(s:script_candidates_list, bufnr('%')) && v:version > 700 ?\n        \\ s:script_candidates_list[bufnr('%')] : {\n        \\   'functions' : {}, 'variables' : {}, 'function_prototypes' : {}, 'dictionary_variables' : {} }\nendfunction\"}}}\nfunction! s:get_script_candidates(bufnumber) \"{{{\n  \" Get script candidate list.\n\n  let function_dict = {}\n  let variable_dict = {}\n  let dictionary_variable_dict = {}\n  let function_prototypes = {}\n  let var_pattern = '\\a:[[:alnum:]_:]*\\.\\h\\w*\\%(()\\?\\)\\?'\n\n  for line in getbufline(a:bufnumber, 1, '$')\n    if line =~ '\\<fu\\%[nction]!\\?\\s\\+s:'\n      call s:analyze_function_line(line, function_dict, function_prototypes)\n    elseif line =~ '\\<let\\s\\+'\n      \" Get script variable.\n      call s:analyze_variable_line(line, variable_dict)\n    elseif line =~ var_pattern\n      while line =~ var_pattern\n        let var_name = matchstr(line, '\\a:[[:alnum:]_:]*\\ze\\.\\h\\w*')\n        let candidates_dict = dictionary_variable_dict\n        if !has_key(candidates_dict, var_name)\n          let candidates_dict[var_name] = {}\n        endif\n\n        call s:analyze_dictionary_variable_line(line, candidates_dict[var_name], var_name)\n\n        let line = line[matchend(line, var_pattern) :]\n      endwhile\n    endif\n  endfor\n\n  return { 'functions' : function_dict, 'variables' : variable_dict,\n        \\ 'function_prototypes' : function_prototypes,\n        \\ 'dictionary_variables' : dictionary_variable_dict }\nendfunction\"}}}\n\nfunction! s:caching_from_dict(dict_name, kind) \"{{{\n  let dict_files = split(globpath(&runtimepath,\n        \\ 'autoload/neocomplcache/sources/vim_complete/'.a:dict_name.'.dict'), '\\n')\n  if empty(dict_files)\n    return []\n  endif\n\n  let keyword_pattern =\n        \\'^\\%(-\\h\\w*\\%(=\\%(\\h\\w*\\|[01*?+%]\\)\\?\\)\\?'.\n        \\'\\|<\\h[[:alnum:]_-]*>\\?\\|\\h[[:alnum:]_:#\\[]*\\%([!\\]]\\+\\|()\\?\\)\\?\\)'\n  let keyword_list = []\n  for line in readfile(dict_files[0])\n    call add(keyword_list, {\n          \\ 'word' : substitute(matchstr(\n          \\       line, keyword_pattern), '[\\[\\]]', '', 'g'),\n          \\ 'kind' : a:kind, 'abbr' : line\n          \\})\n  endfor\n\n  return keyword_list\nendfunction\"}}}\nfunction! s:caching_completion_from_dict(dict_name) \"{{{\n  let dict_files = split(globpath(&runtimepath,\n        \\ 'autoload/neocomplcache/sources/vim_complete/'.a:dict_name.'.dict'), '\\n')\n  if empty(dict_files)\n    return {}\n  endif\n\n  let keyword_dict = {}\n  for line in readfile(dict_files[0])\n    let word = matchstr(line, '^[[:alnum:]_\\[\\]]\\+')\n    let completion = matchstr(line[len(word):], '\\h\\w*')\n    if completion != ''\n      if word =~ '\\['\n        let [word_head, word_tail] = split(word, '\\[')\n        let word_tail = ' ' . substitute(word_tail, '\\]', '', '')\n      else\n        let word_head = word\n        let word_tail = ' '\n      endif\n\n      for i in range(len(word_tail))\n        let keyword_dict[word_head . word_tail[1:i]] = completion\n      endfor\n    endif\n  endfor\n\n  return keyword_dict\nendfunction\"}}}\nfunction! s:caching_prototype_from_dict(dict_name) \"{{{\n  let dict_files = split(globpath(&runtimepath,\n        \\ 'autoload/neocomplcache/sources/vim_complete/'.a:dict_name.'.dict'), '\\n')\n  if empty(dict_files)\n    return {}\n  endif\n  if a:dict_name == 'functions'\n    let pattern = '^[[:alnum:]_]\\+('\n  else\n    let pattern = '^[[:alnum:]_\\[\\](]\\+'\n  endif\n\n  let keyword_dict = {}\n  for line in readfile(dict_files[0])\n    let word = matchstr(line, pattern)\n    let rest = line[len(word):]\n    if word =~ '\\['\n      let [word_head, word_tail] = split(word, '\\[')\n      let word_tail = ' ' . substitute(word_tail, '\\]', '', '')\n    else\n      let word_head = word\n      let word_tail = ' '\n    endif\n\n    for i in range(len(word_tail))\n      let keyword_dict[word_head . word_tail[1:i]] = rest\n    endfor\n  endfor\n\n  return keyword_dict\nendfunction\"}}}\n\nfunction! s:get_cmdlist() \"{{{\n  \" Get command list.\n  redir => redir\n  silent! command\n  redir END\n\n  let keyword_list = []\n  let completions = [ 'augroup', 'buffer', 'behave',\n        \\ 'color', 'command', 'compiler', 'cscope',\n        \\ 'dir', 'environment', 'event', 'expression',\n        \\ 'file', 'file_in_path', 'filetype', 'function',\n        \\ 'help', 'highlight', 'history', 'locale',\n        \\ 'mapping', 'menu', 'option', 'shellcmd', 'sign',\n        \\ 'syntax', 'tag', 'tag_listfiles',\n        \\ 'var', 'custom', 'customlist' ]\n  let command_prototypes = {}\n  let command_completions = {}\n  for line in split(redir, '\\n')[1:]\n    let word = matchstr(line, '\\a\\w*')\n\n    \" Analyze prototype.\n    let end = matchend(line, '\\a\\w*')\n    let args = matchstr(line, '[[:digit:]?+*]', end)\n    if args != '0'\n      let prototype = matchstr(line, '\\a\\w*', end)\n      let found = 0\n      for comp in completions\n        if comp == prototype\n          let command_completions[word] = prototype\n          let found = 1\n\n          break\n        endif\n      endfor\n\n      if !found\n        let prototype = 'arg'\n      endif\n\n      if args == '*'\n        let prototype = '[' . prototype . '] ...'\n      elseif args == '?'\n        let prototype = '[' . prototype . ']'\n      elseif args == '+'\n        let prototype = prototype . ' ...'\n      endif\n\n      let command_prototypes[word] = ' ' . repeat(' ', 16 - len(word)) . prototype\n    else\n      let command_prototypes[word] = ''\n    endif\n    let prototype = command_prototypes[word]\n\n    call add(keyword_list, {\n          \\ 'word' : word, 'abbr' : word . prototype,\n          \\ 'description' : word . prototype, 'kind' : 'c'\n          \\})\n  endfor\n  let s:global_candidates_list.command_prototypes = command_prototypes\n  let s:global_candidates_list.command_completions = command_completions\n\n  return keyword_list\nendfunction\"}}}\nfunction! s:get_variablelist(dict, prefix) \"{{{\n  let kind_dict =\n        \\ ['0', '\"\"', '()', '[]', '{}', '.', 'b', 'no', 'j', 'ch']\n  return values(map(copy(a:dict), \"{\n        \\ 'word' : a:prefix.v:key,\n        \\ 'kind' : get(kind_dict, type(v:val), '?'),\n        \\}\"))\nendfunction\"}}}\nfunction! s:get_functionlist() \"{{{\n  \" Get function list.\n  redir => redir\n  silent! function\n  redir END\n\n  let keyword_dict = {}\n  let function_prototypes = {}\n  for line in split(redir, '\\n')\n    let line = line[9:]\n    if line =~ '^<SNR>'\n      continue\n    endif\n    let orig_line = line\n\n    let word = matchstr(line, '\\h[[:alnum:]_:#.]*()\\?')\n    if word != ''\n      let keyword_dict[word] = {\n            \\ 'word' : word, 'abbr' : line,\n            \\ 'description' : line,\n            \\}\n\n      let function_prototypes[word] = orig_line[len(word):]\n    endif\n  endfor\n\n  let s:global_candidates_list.function_prototypes = function_prototypes\n\n  return values(keyword_dict)\nendfunction\"}}}\nfunction! s:get_augrouplist() \"{{{\n  \" Get augroup list.\n  redir => redir\n  silent! augroup\n  redir END\n\n  let keyword_list = []\n  for group in split(redir . ' END', '\\s\\|\\n')\n    call add(keyword_list, { 'word' : group })\n  endfor\n  return keyword_list\nendfunction\"}}}\nfunction! s:get_mappinglist() \"{{{\n  \" Get mapping list.\n  redir => redir\n  silent! map\n  redir END\n\n  let keyword_list = []\n  for line in split(redir, '\\n')\n    let map = matchstr(line, '^\\a*\\s*\\zs\\S\\+')\n    if map !~ '^<' || map =~ '^<SNR>'\n      continue\n    endif\n    call add(keyword_list, { 'word' : map })\n  endfor\n  return keyword_list\nendfunction\"}}}\nfunction! s:get_envlist() \"{{{\n  \" Get environment variable list.\n\n  let keyword_list = []\n  for line in split(system('set'), '\\n')\n    let word = '$' . toupper(matchstr(line, '^\\h\\w*'))\n    call add(keyword_list, { 'word' : word, 'kind' : 'e' })\n  endfor\n  return keyword_list\nendfunction\"}}}\nfunction! s:make_completion_list(list, kind) \"{{{\n  let list = []\n  for item in a:list\n    call add(list, { 'word' : item, 'kind' : a:kind })\n  endfor\n\n  return list\nendfunction\"}}}\nfunction! s:analyze_function_line(line, keyword_dict, prototype) \"{{{\n  \" Get script function.\n  let line = substitute(matchstr(a:line, '\\<fu\\%[nction]!\\?\\s\\+\\zs.*)'), '\".*$', '', '')\n  let orig_line = line\n  let word = matchstr(line, '^\\h[[:alnum:]_:#.]*()\\?')\n  if word != '' && !has_key(a:keyword_dict, word) \n    let a:keyword_dict[word] = {\n          \\ 'word' : word, 'abbr' : line, 'kind' : 'f'\n          \\}\n    let a:prototype[word] = orig_line[len(word):]\n  endif\nendfunction\"}}}\nfunction! s:analyze_variable_line(line, keyword_dict) \"{{{\n  if a:line =~ '\\<\\%(let\\|for\\)\\s\\+\\a[[:alnum:]_:]*'\n    \" let var = pattern.\n    let word = matchstr(a:line, '\\<\\%(let\\|for\\)\\s\\+\\zs\\a[[:alnum:]_:]*')\n    let expression = matchstr(a:line, '\\<let\\s\\+\\a[[:alnum:]_:]*\\s*=\\s*\\zs.*$')\n    if !has_key(a:keyword_dict, word) \n      let a:keyword_dict[word] = {\n            \\ 'word' : word,\n            \\ 'kind' : s:get_variable_type(expression)\n            \\}\n    elseif expression != '' && a:keyword_dict[word].kind == ''\n      \" Update kind.\n      let a:keyword_dict[word].kind = s:get_variable_type(expression)\n    endif\n  elseif a:line =~ '\\<\\%(let\\|for\\)\\s\\+\\[.\\{-}\\]'\n    \" let [var1, var2] = pattern.\n    let words = split(matchstr(a:line,\n          \\'\\<\\%(let\\|for\\)\\s\\+\\[\\zs.\\{-}\\ze\\]'), '[,[:space:]]\\+')\n      let expressions = split(matchstr(a:line,\n            \\'\\<let\\s\\+\\[.\\{-}\\]\\s*=\\s*\\[\\zs.\\{-}\\ze\\]$'), '[,[:space:];]\\+')\n\n      let i = 0\n      while i < len(words)\n        let expression = get(expressions, i, '')\n        let word = words[i]\n\n        if !has_key(a:keyword_dict, word) \n          let a:keyword_dict[word] = {\n                \\ 'word' : word,\n                \\ 'kind' : s:get_variable_type(expression)\n                \\}\n        elseif expression != '' && a:keyword_dict[word].kind == ''\n          \" Update kind.\n          let a:keyword_dict[word].kind = s:get_variable_type(expression)\n        endif\n\n        let i += 1\n      endwhile\n    elseif a:line =~ '\\<fu\\%[nction]!\\?\\s\\+'\n      \" Get function arguments.\n      for arg in split(matchstr(a:line, '^[^(]*(\\zs[^)]*'), '\\s*,\\s*')\n        let word = 'a:' . (arg == '...' ?  '000' : arg)\n        let a:keyword_dict[word] = {\n              \\ 'word' : word,\n              \\ 'kind' : (arg == '...' ?  '[]' : '')\n              \\}\n\n      endfor\n      if a:line =~ '\\.\\.\\.)'\n        \" Extra arguments.\n        for arg in range(5)\n          let word = 'a:' . arg\n          let a:keyword_dict[word] = {\n                \\ 'word' : word,\n                \\ 'kind' : (arg == 0 ?  '0' : '')\n                \\}\n        endfor\n      endif\n    endif\nendfunction\"}}}\nfunction! s:analyze_dictionary_variable_line(line, keyword_dict, var_name) \"{{{\n  let var_pattern = a:var_name.'\\.\\h\\w*\\%(()\\?\\)\\?'\n  let let_pattern = '\\<let\\s\\+'.a:var_name.'\\.\\h\\w*'\n  let call_pattern = '\\<call\\s\\+'.a:var_name.'\\.\\h\\w*()\\?'\n\n  if a:line =~ let_pattern\n    let word = matchstr(a:line, a:var_name.'\\zs\\.\\h\\w*')\n    let expression = matchstr(a:line, let_pattern.'\\s*=\\zs.*$')\n    let kind = ''\n  elseif a:line =~ call_pattern\n    let word = matchstr(a:line, a:var_name.'\\zs\\.\\h\\w*()\\?')\n    let kind = '()'\n  else\n    let word = matchstr(a:line, a:var_name.'\\zs.\\h\\w*\\%(()\\?\\)\\?')\n    let kind = s:get_variable_type(matchstr(a:line, a:var_name.'\\.\\h\\w*\\zs.*$'))\n  endif\n\n  if !has_key(a:keyword_dict, word)\n    let a:keyword_dict[word] = { 'word' : word, 'kind' : kind }\n  elseif kind != '' && a:keyword_dict[word].kind == ''\n    \" Update kind.\n    let a:keyword_dict[word].kind = kind\n  endif\nendfunction\"}}}\nfunction! s:split_args(cur_text, complete_str) \"{{{\n  let args = split(a:cur_text)\n  if a:complete_str == ''\n    call add(args, '')\n  endif\n\n  return args\nendfunction\"}}}\n\n\" Initialize return types. \"{{{\nfunction! s:set_dictionary_helper(variable, keys, value) \"{{{\n  for key in split(a:keys, ',')\n    let a:variable[key] = a:value\n  endfor\nendfunction\"}}}\nlet s:function_return_types = {}\ncall neocomplcache#util#set_dictionary_helper(\n      \\ s:function_return_types,\n      \\ 'len,match,matchend',\n      \\ '0')\ncall neocomplcache#util#set_dictionary_helper(\n      \\ s:function_return_types,\n      \\ 'input,matchstr',\n      \\ '\"\"')\ncall neocomplcache#util#set_dictionary_helper(\n      \\ s:function_return_types,\n      \\ 'expand,filter,sort,split',\n      \\ '[]')\n\"}}}\nfunction! s:get_variable_type(expression) \"{{{\n  \" Analyze variable type.\n  if a:expression =~ '^\\%(\\s*+\\)\\?\\s*\\d\\+\\.\\d\\+'\n    return '.'\n  elseif a:expression =~ '^\\%(\\s*+\\)\\?\\s*\\d\\+'\n    return '0'\n  elseif a:expression =~ '^\\%(\\s*\\.\\)\\?\\s*[\"'']'\n    return '\"\"'\n  elseif a:expression =~ '\\<function('\n    return '()'\n  elseif a:expression =~ '^\\%(\\s*+\\)\\?\\s*\\['\n    return '[]'\n  elseif a:expression =~ '^\\s*{\\|^\\.\\h[[:alnum:]_:]*'\n    return '{}'\n  elseif a:expression =~ '\\<\\h\\w*('\n    \" Function.\n    let func_name = matchstr(a:expression, '\\<\\zs\\h\\w*\\ze(')\n    return has_key(s:function_return_types, func_name) ? s:function_return_types[func_name] : ''\n  else\n    return ''\n  endif\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/sources/vim_complete/mappings.dict",
    "content": "<buffer> ; the mapping will be effective in the current buffer only\n<expr> ; the argument is an expression evaluated to obtain the {rhs} that is used\n<Leader> ; define a mapping which uses the \"mapleader\" variable\n<LocalLeader> ; just like <Leader>, except that it uses \"maplocalleader\" instead of \"mapleader\"\n<Plug> ; used for an internal mapping, which is not to be matched with any key sequence\n<script> ; the mapping will only remap characters in the {rhs} using mappings that were defined local to a script\n<SID> ; unique mapping for the script\n<unique> ; the command will fail if the mapping or abbreviation already exists\n<silent> ; define a mapping which will not be echoed on the command line\n<Nul> ; zero\n<Nop> ; no operation\n<BS> ; backspace\n<Tab> ; tab\n<NL> ; linefeed\n<FF> ; formfeed\n<CR> ; carriage return\n<Return> ; same as <CR>\n<Enter> ; same as <CR>\n<Esc> ; escape\n<Space> ; space\n<lt> ; less-than <\n<Bslash> ; backslash \\\n<Bar> ; vertical bar |\n<Del> ; delete\n<CSI> ; command sequence intro  ALT-Esc\n<xCSI> ; CSI when typed in the GUI\n<EOL> ; end-of-line (can be <CR>, <LF> or <CR><LF>, depends on system and 'fileformat')\n<Up> ; cursor-up\n<Down> ; cursor-down\n<Left> ; cursor-left\n<Right> ; cursor-right\n<S-Up> ; shift-cursor-up\n<S-Down> ; shift-cursor-down\n<S-Left> ; shift-cursor-left\n<S-Right> ; shift-cursor-right\n<C-Left> ; control-cursor-left\n<C-Right> ; control-cursor-right\n<Help> ; help key\n<Undo> ; undo key\n<Insert> ; insert key\n<Home> ; home\n<End> ; end\n<PageUp> ; page-up\n<PageDown> ; page-down\n<kHome> ; keypad home (upper left)\n<kEnd> ; keypad end (lower left)\n<kPageUp> ; keypad page-up (upper right)\n<kPageDown> ; keypad page-down (lower right)\n<kPlus> ; keypad +\n<kMinus> ; keypad -\n<kMultiply> ; keypad *\n<kDivide> ; keypad /\n<kEnter> ; keypad Enter\n<kPoint> ; keypad Decimal point\n<LeftMouse>     ; Left mouse click\n<A-LeftMouse>   ; Left mouse click with Alt\n<C-LeftMouse>   ; Left mouse click with Ctrl\n<S-LeftMouse>   ; Left mouse click with Shift\n<2-LeftMouse>   ; Double left mouse click\n<3-LeftMouse>   ; Triple left mouse click\n<4-LeftMouse>   ; Quad left mouse click\n<LeftDrag>      ; Left mouse drag\n<LeftRelease>   ; Left mouse release\n<MiddleMouse>   ; Middle mouse click\n<MiddleDrag>    ; Middle mouse drag\n<MiddleRelease> ; Middle mouse drag\n<RightMouse>    ; Right mouse click\n<A-RightMouse>  ; Right mouse click with Alt\n<S-RightMouse>  ; Right mouse click with Shift\n<C-RightMouse>  ; Right mouse click with Ctrl\n<RightDrag>     ; Right mouse drag\n<RightRelease>  ; Right mouse release\n"
  },
  {
    "path": "autoload/neocomplcache/sources/vim_complete/options.dict",
    "content": "aleph ; ASCII code of the letter Aleph (Hebrew)\nallowrevins ; allow CTRL-_ in Insert and Command-line mode\naltkeymap ; for default second language (Farsi/Hebrew)\nambiwidth ; what to do with Unicode chars of ambiguous width\nantialias ; Mac OS X: use smooth, antialiased fonts\narabic ; for Arabic as a default second language\narabicshape ; do shaping for Arabic characters\nautochdir ; change directory to the file in the current window\nautoindent ; take indent for new line from previous line\nautoread ; autom. read file when changed outside of Vim\nautowrite ; automatically write file if changed\nautowriteall ; as 'autowrite', but works with more commands\nbackground ; \"dark\" or \"light\", used for highlight colors\nbackspace ; how backspace works at start of line\nbackup ; keep backup file after overwriting a file\nbackupcopy ; make backup as a copy, don't rename the file\nbackupdir ; list of directories for the backup file\nbackupext ; extension used for the backup file\nbackupskip ; no backup for files that match these patterns\nballoondelay ; delay in mS before a balloon may pop up\nballooneval ; switch on balloon evaluation\nballoonexpr ; expression to show in balloon\nbinary ; read/write/edit file in binary mode\nbioskey ; MS-DOS: use bios calls for input characters\nbomb ; prepend a Byte Order Mark to the file\nbreakat ; characters that may cause a line break\nbrowsedir ; which directory to start browsing in\nbufhidden ; what to do when buffer is no longer in window\nbuflisted ; whether the buffer shows up in the buffer list\nbuftype ; special type of buffer\ncasemap ; specifies how case of letters is changed\ncdpath ; list of directories searched with \":cd\"\ncedit ; key used to open the command-line window\ncharconvert ; expression for character encoding conversion\ncindent ; do C program indenting\ncinkeys ; keys that trigger indent when 'cindent' is set\ncinoptions ; how to do indenting when 'cindent' is set\ncinwords ; words where 'si' and 'cin' add an indent\nclipboard ; use the clipboard as the unnamed register\ncmdheight ; number of lines to use for the command-line\ncmdwinheight ; height of the command-line window\ncolorcolumn ; screen columns that are highlighted with ColorColumn\ncolumns ; number of columns in the display\ncomments ; patterns that can start a comment line\ncommentstring ; template for comments; used for fold marker\ncompatible ; behave Vi-compatible as much as possible\ncomplete ; specify how Insert mode completion works\ncompletefunc ; function to be used for Insert mode completion\ncompleteopt ; options for Insert mode completion\nconcealcursor ; sets the modes in which text in the cursor line can also be concealed\nconceallevel ; how text with the \"conceal\" syntax attribute\nconfirm ; ask what to do about unsaved/read-only files\nconskey ; get keys directly from console (MS-DOS only)\ncopyindent ; make 'autoindent' use existing indent structure\ncpoptions ; flags for Vi-compatible behavior\ncryptmethod ; method used for encryption when the buffer is written to a file\ncscopepathcomp ; how many components of the path to show\ncscopeprg ; command to execute cscope\ncscopequickfix ; use quickfix window for cscope results\ncscopetag ; use cscope for tag commands\ncscopetagorder ; determines \":cstag\" search order\ncscopeverbose ; give messages when adding a cscope database\ncursorcolumn ; highlight the screen column of the cursor\ncursorline ; highlight the screen line of the cursor\ndebug ; set to \"msg\" to see all error messages\ndefine ; pattern to be used to find a macro definition\ndelcombine ; delete combining characters on their own\ndictionary ; list of file names used for keyword completion\ndiff ; use diff mode for the current window\ndiffexpr ; expression used to obtain a diff file\ndiffopt ; options for using diff mode\ndigraph ; enable the entering of digraphs in Insert mode\ndirectory ; list of directory names for the swap file\ndisplay ; list of flags for how to display text\neadirection ; in which direction 'equalalways' works\nedcompatible ; toggle flags of \":substitute\" command\nencoding ; encoding used internally\nendofline ; write <EOL> for last line in file\nequalalways ; windows are automatically made the same size\nequalprg ; external program to use for \"=\" command\nerrorbells ; ring the bell for error messages\nerrorfile ; name of the errorfile for the QuickFix mode\nerrorformat ; description of the lines in the error file\nesckeys ; recognize function keys in Insert mode\neventignore ; autocommand events that are ignored\nexpandtab ; use spaces when <Tab> is inserted\nexrc ; read .vimrc and .exrc in the current directory\nfileencoding ; file encoding for multi-byte text\nfileencodings ; automatically detected character encodings\nfileformat ; file format used for file I/O\nfileformats ; automatically detected values for 'fileformat'\nfiletype ; type of file, used for autocommands\nfillchars ; characters to use for displaying special items\nfkmap ; Farsi keyboard mapping\nfoldclose ; close a fold when the cursor leaves it\nfoldcolumn ; width of the column used to indicate folds\nfoldenable ; set to display all folds open\nfoldexpr ; expression used when 'foldmethod' is \"expr\"\nfoldignore ; ignore lines when 'foldmethod' is \"indent\"\nfoldlevel ; close folds with a level higher than this\nfoldlevelstart ; 'foldlevel' when starting to edit a file\nfoldmarker ; markers used when 'foldmethod' is \"marker\"\nfoldmethod ; folding type\nfoldminlines ; minimum number of lines for a fold to be closed\nfoldnestmax ; maximum fold depth\nfoldopen ; for which commands a fold will be opened\nfoldtext ; expression used to display for a closed fold\nformatexpr ; expression used with \"gq\" command\nformatlistpat ; pattern used to recognize a list header\nformatoptions ; how automatic formatting is to be done\nformatprg ; name of external program used with \"gq\" command\nfsync ; whether to invoke fsync() after file write\ngdefault ; the \":substitute\" flag 'g' is default on\ngrepformat ; format of 'grepprg' output\ngrepprg ; program to use for \":grep\"\nguicursor ; GUI: settings for cursor shape and blinking\nguifont ; GUI: Name(s) of font(s) to be used\nguifontset ; GUI: Names of multi-byte fonts to be used\nguifontwide ; list of font names for double-wide characters\nguiheadroom ; GUI: pixels room for window decorations\nguioptions ; GUI: Which components and options are used\nguipty ; GUI: try to use a pseudo-tty for \":!\" commands\nguitablabel ; GUI: custom label for a tab page\nguitabtooltip ; GUI: custom tooltip for a tab page\nhelpfile ; full path name of the main help file\nhelpheight ; minimum height of a new help window\nhelplang ; preferred help languages\nhidden ; don't unload buffer when it is abandoned\nhighlight ; sets highlighting mode for various occasions\nhistory ; number of command-lines that are remembered\nhkmap ; Hebrew keyboard mapping\nhkmapp ; phonetic Hebrew keyboard mapping\nhlsearch ; highlight matches with last search pattern\nicon ; let Vim set the text of the window icon\niconstring ; string to use for the Vim icon text\nignorecase ; ignore case in search patterns\nimactivatekey ; key that activates the X input method\nimcmdline ; use IM when starting to edit a command line\nimdisable ; do not use the IM in any mode\niminsert ; use :lmap or IM in Insert mode\nimsearch ; use :lmap or IM when typing a search pattern\ninclude ; pattern to be used to find an include file\nincludeexpr ; expression used to process an include line\nincsearch ; highlight match while typing search pattern\nindentexpr ; expression used to obtain the indent of a line\nindentkeys ; keys that trigger indenting with 'indentexpr'\ninfercase ; adjust case of match for keyword completion\ninsertmode ; start the edit of a file in Insert mode\nisfname ; characters included in file names and pathnames\nisident ; characters included in identifiers\niskeyword ; characters included in keywords\nisprint ; printable characters\njoinspaces ; two spaces after a period with a join command\nkey ; encryption key\nkey ; for encrypting and decrypting the current buffer\nkeymap ; name of a keyboard mapping\nkeymodel ; enable starting/stopping selection with keys\nkeywordprg ; program to use for the \"K\" command\nlangmap ; alphabetic characters for other language mode\nlangmenu ; language to be used for the menus\nlaststatus ; tells when last window has status lines\nlazyredraw ; don't redraw while executing macros\nlinebreak ; wrap long lines at a blank\nlines ; number of lines in the display\nlinespace ; number of pixel lines to use between characters\nlisp ; automatic indenting for Lisp\nlispwords ; words that change how lisp indenting works\nlist ; show <Tab> and <EOL>\nlistchars ; characters for displaying in list mode\nloadplugins ; load plugin scripts when starting up\nmacatsui ; Mac GUI: use ATSUI text drawing\nmagic ; changes special characters in search patterns\nmakeef ; name of the errorfile for \":make\"\nmakeprg ; program to use for the \":make\" command\nmatchpairs ; pairs of characters that \"%\" can match\nmatchtime ; tenths of a second to show matching paren\nmaxcombine ; maximum nr of combining characters displayed\nmaxfuncdepth ; maximum recursive depth for user functions\nmaxmapdepth ; maximum recursive depth for mapping\nmaxmem ; maximum memory (in Kbyte) used for one buffer\nmaxmempattern ; maximum memory (in Kbyte) used for pattern search\nmaxmemtot ; maximum memory (in Kbyte) used for all buffers\nmenuitems ; maximum number of items in a menu\nmkspellmem ; memory used before :mkspell compresses the tree\nmodeline ; recognize modelines at start or end of file\nmodelines ; number of lines checked for modelines\nmodifiable ; changes to the text are not possible\nmodified ; buffer has been modified\nmore ; pause listings when the whole screen is filled\nmouse ; enable the use of mouse clicks\nmousefocus ; keyboard focus follows the mouse\nmousehide ; hide mouse pointer while typing\nmousemodel ; changes meaning of mouse buttons\nmouseshape ; shape of the mouse pointer in different modes\nmousetime ; max time between mouse double-click\nmzquantum ; the interval between polls for MzScheme threads\nnrformats ; number formats recognized for CTRL-A command\nnumber ; print the line number in front of each line\nnumberwidth ; number of columns used for the line number\nomnifunc ; function for filetype-specific completion\nopendevice ; allow reading/writing devices on MS-Windows\noperatorfunc ; function to be called for g@ operator\nosfiletype ; operating system-specific filetype information\nparagraphs ; nroff macros that separate paragraphs\npaste ; allow pasting text\npastetoggle ; key code that causes 'paste' to toggle\npatchexpr ; expression used to patch a file\npatchmode ; keep the oldest version of a file\npath ; list of directories searched with \"gf\" et.al.\npreserveindent ; preserve the indent structure when reindenting\npreviewheight ; height of the preview window\npreviewwindow ; identifies the preview window\nprintdevice ; name of the printer to be used for :hardcopy\nprintencoding ; encoding to be used for printing\nprintexpr ; expression used to print PostScript for :hardcopy\nprintfont ; name of the font to be used for :hardcopy\nprintheader ; format of the header used for :hardcopy\nprintmbcharset ; CJK character set to be used for :hardcopy\nprintmbfont ; font names to be used for CJK output of :hardcopy\nprintoptions ; controls the format of :hardcopy output\npumheight ; maximum height of the popup menu\nquoteescape ; escape characters used in a string\nreadonly ; disallow writing the buffer\nredrawtime ; timeout for 'hlsearch' and :match highlighting\nrelativenumber ; show the line number relative to the line with the cursor in front of each line\nremap ; allow mappings to work recursively\nreport ; threshold for reporting nr. of lines changed\nrestorescreen ; Win32: restore screen when exiting\nrevins ; inserting characters will work backwards\nrightleft ; window is right-to-left oriented\nrightleftcmd ; commands for which editing works right-to-left\nruler ; show cursor line and column in the status line\nrulerformat ; custom format for the ruler\nruntimepath ; list of directories used for runtime files\nscroll ; lines to scroll with CTRL-U and CTRL-D\nscrollbind ; scroll in window as other windows scroll\nscrolljump ; minimum number of lines to scroll\nscrolloff ; minimum nr. of lines above and below cursor\nscrollopt ; how 'scrollbind' should behave\nsections ; nroff macros that separate sections\nsecure ; secure mode for reading .vimrc in current dir\nselection ; what type of selection to use\nselectmode ; when to use Select mode instead of Visual mode\nsessionoptions ; options for :mksession\nshell ; name of shell to use for external commands\nshellcmdflag ; flag to shell to execute one command\nshellpipe ; string to put output of \":make\" in error file\nshellquote ; quote character(s) for around shell command\nshellredir ; string to put output of filter in a temp file\nshellslash ; use forward slash for shell file names\nshelltemp ; whether to use a temp file for shell commands\nshelltype ; Amiga: influences how to use a shell\nshellxquote ; like 'shellquote', but include redirection\nshiftround ; round indent to multiple of shiftwidth\nshiftwidth ; number of spaces to use for (auto)indent step\nshortmess ; list of flags, reduce length of messages\nshortname ; non-MS-DOS: Filenames assumed to be 8.3 chars\nshowbreak ; string to use at the start of wrapped lines\nshowcmd ; show (partial) command in status line\nshowfulltag ; show full tag pattern when completing tag\nshowmatch ; briefly jump to matching bracket if insert one\nshowmode ; message on status line to show current mode\nshowtabline ; tells when the tab pages line is displayed\nsidescroll ; minimum number of columns to scroll horizontal\nsidescrolloff ; min. nr. of columns to left and right of cursor\nsmartcase ; no ignore case when pattern has uppercase\nsmartindent ; smart autoindenting for C programs\nsmarttab ; use 'shiftwidth' when inserting <Tab>\nsofttabstop ; number of spaces that <Tab> uses while editing\nspell ; enable spell checking\nspellcapcheck ; pattern to locate end of a sentence\nspellfile ; files where zg and zw store words\nspelllang ; language(s) to do spell checking for\nspellsuggest ; method(s) used to suggest spelling corrections\nsplitbelow ; new window from split is below the current one\nsplitright ; new window is put right of the current one\nstartofline ; commands move cursor to first non-blank in line\nstatusline ; custom format for the status line\nsuffixes ; suffixes that are ignored with multiple match\nsuffixesadd ; suffixes added when searching for a file\nswapfile ; whether to use a swapfile for a buffer\nswapsync ; how to sync the swap file\nswitchbuf ; sets behavior when switching to another buffer\nsynmaxcol ; maximum column to find syntax items\nsyntax ; syntax to be loaded for current buffer\ntabline ; custom format for the console tab pages line\ntabpagemax ; maximum number of tab pages for -p and \"tab all\"\ntabstop ; number of spaces that <Tab> in file uses\ntagbsearch ; use binary searching in tags files\ntaglength ; number of significant characters for a tag\ntagrelative ; file names in tag file are relative\ntags ; list of file names used by the tag command\ntagstack ; push tags onto the tag stack\nterm ; name of the terminal\ntermbidi ; terminal takes care of bi-directionality\ntermencoding ; character encoding used by the terminal\nterse ; shorten some messages\ntextauto ; obsolete, use 'fileformats'\ntextmode ; obsolete, use 'fileformat'\ntextwidth ; maximum width of text that is being inserted\nthesaurus ; list of thesaurus files for keyword completion\ntildeop ; tilde command \"~\" behaves like an operator\ntimeout ; time out on mappings and key codes\ntimeoutlen ; time out time in milliseconds\ntitle ; let Vim set the title of the window\ntitlelen ; percentage of 'columns' used for window title\ntitleold ; old title, restored when exiting\ntitlestring ; string to use for the Vim window title\ntoolbar ; GUI: which items to show in the toolbar\ntoolbariconsize ; size of the toolbar icons (for GTK 2 only)\ntransparency ; GUI: set transparency percentage (max: 255)\nttimeout ; time out on mappings\nttimeoutlen ; time out time for key codes in milliseconds\nttybuiltin ; use built-in termcap before external termcap\nttyfast ; indicates a fast terminal connection\nttymouse ; type of mouse codes generated\nttyscroll ; maximum number of lines for a scroll\nttytype ; alias for 'term'\nundodir ; list of directory names for undo files\nundofile ; automatically saves undo history to an undo file\nundolevels ; maximum number of changes that can be undone\nundoreload ; save the whole buffer for undo when reloading it\nupdatecount ; after this many characters flush swap file\nupdatetime ; after this many milliseconds flush swap file\nverbose ; give informative messages\nverbosefile ; file to write messages in\nviewdir ; directory where to store files with :mkview\nviewoptions ; specifies what to save for :mkview\nviminfo ; use .viminfo file upon startup and exiting\nvirtualedit ; when to use virtual editing\nvisualbell ; use visual bell instead of beeping\nwarn ; warn for shell command when buffer was changed\nweirdinvert ; for terminals that have weird inversion method\nwhichwrap ; allow specified keys to cross line boundaries\nwildchar ; command-line character for wildcard expansion\nwildcharm ; like 'wildchar' but also works when mapped\nwildignore ; files matching these patterns are not completed\nwildmenu ; use menu for command line completion\nwildmode ; mode for 'wildchar' command-line expansion\nwildoptions ; specifies how command line completion is done.\nwinaltkeys ; when the windows system handles ALT keys\nwinfixheight ; keep window height when opening/closing windows\nwinfixwidth ; keep window width when opening/closing windows\nwinheight ; minimum number of lines for the current window\nwinminheight ; minimum number of lines for any window\nwinminwidth ; minimal number of columns for any window\nwinwidth ; minimal number of columns for current window\nwrap ; long lines wrap and continue on the next line\nwrapmargin ; chars from the right where wrapping starts\nwrapscan ; searches wrap around the end of the file\nwrite ; writing to a file is allowed\nwriteany ; write to file with no need for \"!\" override\nwritebackup ; make a backup before overwriting a file\nwritedelay ; delay this many msec for each char (for debug)\n"
  },
  {
    "path": "autoload/neocomplcache/sources/vim_complete/variables.dict",
    "content": "v:beval_col ; the number of the column, over which the mouse pointer is\nv:beval_bufnr ; the number of the buffer, over which the mouse pointer is\nv:beval_lnum ; the number of the line, over which the mouse pointer is\nv:beval_text ; the text under or after the mouse pointer\nv:beval_winnr ; the number of the window, over which the mouse pointer is\nv:char ; argument for evaluating 'formatexpr' and used for the typed character when using <expr> in an abbreviation\nv:charconvert_from ; the name of the character encoding of a file to be converted\nv:charconvert_to ; the name of the character encoding of a file after conversion\nv:cmdarg ; the extra arguments given to a file read/write command\nv:cmdbang ; when a \"!\" was used the value is 1, otherwise it is 0\nv:count ; the count given for the last Normal mode command\nv:count1 ; Just like \"v:count\", but defaults to one when no count is used\nv:ctype ; the current locale setting for characters of the runtime environment\nv:dying ; normally zero, when a deadly signal is caught it's set to one\nv:errmsg ; last given error message\nv:exception ; the value of the exception most recently caught and not finished\nv:fcs_reason ; the reason why the FileChangedShell event was triggered.\nv:fcs_choice ; what should happen after a FileChangedShell event was triggered\nv:fname_in ; the name of the input file\nv:fname_out ; the name of the output file\nv:fname_new ; the name of the new version of the file\nv:fname_diff ; the name of the diff (patch) file\nv:folddashes ; dashes representing foldlevel of a closed fold\nv:foldlevel ; foldlevel of closed fold\nv:foldend ; last line of closed fold\nv:foldstart ; first line of closed fold\nv:insertmode ; i: Insert mode r: Replace mode v: Virtual Replace mode\nv:key ; key of the current item of a Dictionary\nv:lang ; the current locale setting for messages of the runtime environment\nv:lc_time ; the current locale setting for time messages of the runtime environment\nv:lnum ; line number for the 'foldexpr' fold-expr and 'indentexpr' expressions\nv:mouse_win ; window number for a mouse click obtained with getchar()\nv:mouse_lnum ; line number for a mouse click obtained with getchar()\nv:mouse_col ; column number for a mouse click obtained with getchar()\nv:oldfiles ; list of file names that is loaded from the viminfo file on startup\nv:operator ; the last operator given in Normal mode\nv:prevcount ; the count given for the last but one Normal mode command\nv:profiling ; normally zero. set to one after using \":profile start\"\nv:progname ; contains the name (with path removed) with which Vim was invoked\nv:register ; the name of the register supplied to the last normal mode command\nv:scrollstart ; string describing the script or function that caused the screen to scroll up\nv:servername ; the resulting registered x11-clientserver name if any\nv:searchforward ; search direction: 1 after a forward search, 0 after a backward search\nv:shell_error ; result of the last shell command\nv:statusmsg ; last given status message\nv:swapname ; name of the swap file found\nv:swapchoice ; SwapExists autocommands can set this to the selected choice\nv:swapcommand ; normal mode command to be executed after a file has been opened\nv:termresponse ; the escape sequence returned by the terminal for the t_RV termcap entry\nv:this_session ; full filename of the last loaded or saved session file\nv:throwpoint ; the point where the exception most recently caught and not finished was thrown\nv:val ; value of the current item of a List or Dictionary\nv:version ; version number of Vim: Major version*100+minor version\nv:warningmsg ; last given warning message\n"
  },
  {
    "path": "autoload/neocomplcache/sources/vim_complete.vim",
    "content": "\"=============================================================================\n\" FILE: vim_complete.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 24 Jun 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nlet s:source = {\n      \\ 'name' : 'vim_complete',\n      \\ 'kind' : 'manual',\n      \\ 'filetypes' : { 'vim' : 1, 'vimconsole' : 1, },\n      \\ 'mark' : '[vim]',\n      \\ 'rank' : 300,\n      \\}\n\nfunction! s:source.initialize() \"{{{\n  \" Initialize.\n\n  \" Initialize complete function list. \"{{{\n  if !exists('g:neocomplcache_vim_completefuncs')\n    let g:neocomplcache_vim_completefuncs = {}\n  endif\n  \"}}}\n\n  \" Call caching event.\n  autocmd neocomplcache FileType *\n        \\ call neocomplcache#sources#vim_complete#helper#on_filetype()\n\n  \" Initialize check.\n  call neocomplcache#sources#vim_complete#helper#on_filetype()\n\n  \" Add command.\n  command! -nargs=? -complete=buffer NeoComplCacheCachingVim\n        \\ call neocomplcache#sources#vim_complete#helper#recaching(<q-args>)\nendfunction\"}}}\n\nfunction! s:source.finalize() \"{{{\n  delcommand NeoComplCacheCachingVim\n\n  if neocomplcache#exists_echodoc()\n    call echodoc#unregister('vim_complete')\n  endif\nendfunction\"}}}\n\nfunction! s:source.get_keyword_pos(cur_text) \"{{{\n  let cur_text = neocomplcache#sources#vim_complete#get_cur_text()\n\n  if cur_text =~ '^\\s*\"'\n    \" Comment.\n    return -1\n  endif\n\n  let pattern = '\\.\\%(\\h\\w*\\)\\?$\\|' .\n        \\ neocomplcache#get_keyword_pattern_end('vim')\n  if cur_text != '' && cur_text !~\n        \\ '^[[:digit:],[:space:][:tab:]$''<>]*\\h\\w*$'\n    let command_completion =\n          \\ neocomplcache#sources#vim_complete#helper#get_completion_name(\n          \\   neocomplcache#sources#vim_complete#get_command(cur_text))\n    if command_completion =~ '\\%(dir\\|file\\|shellcmd\\)'\n      let pattern = neocomplcache#get_keyword_pattern_end('filename')\n    endif\n  endif\n\n  let [complete_pos, complete_str] =\n        \\ neocomplcache#match_word(a:cur_text, pattern)\n  if complete_pos < 0\n    \" Use args pattern.\n    let [complete_pos, complete_str] =\n          \\ neocomplcache#match_word(a:cur_text, '\\S\\+$')\n  endif\n\n  if a:cur_text !~ '\\.\\%(\\h\\w*\\)\\?$' && neocomplcache#is_auto_complete()\n        \\ && bufname('%') !=# '[Command Line]'\n        \\ && neocomplcache#util#mb_strlen(complete_str)\n        \\      < g:neocomplcache_auto_completion_start_length\n    return -1\n  endif\n\n  return complete_pos\nendfunction\"}}}\n\nfunction! s:source.get_complete_words(complete_pos, complete_str) \"{{{\n  let cur_text = neocomplcache#sources#vim_complete#get_cur_text()\n  if neocomplcache#is_auto_complete() && cur_text !~ '\\h\\w*\\.\\%(\\h\\w*\\)\\?$'\n        \\ && len(a:complete_str) < g:neocomplcache_auto_completion_start_length\n        \\ && bufname('%') !=# '[Command Line]'\n    return []\n  endif\n\n  if cur_text =~ '\\h\\w*\\.\\%(\\h\\w*\\)\\?$'\n    \" Dictionary.\n    let complete_str = matchstr(cur_text, '.\\%(\\h\\w*\\)\\?$')\n    let list = neocomplcache#sources#vim_complete#helper#var_dictionary(\n          \\ cur_text, complete_str)\n    return neocomplcache#keyword_filter(list, complete_str)\n  elseif a:complete_str =~# '^&\\%([gl]:\\)\\?'\n    \" Options.\n    let prefix = matchstr(a:complete_str, '&\\%([gl]:\\)\\?')\n    let list = deepcopy(\n          \\ neocomplcache#sources#vim_complete#helper#option(\n          \\   cur_text, a:complete_str))\n    for keyword in list\n      let keyword.word =\n            \\ prefix . keyword.word\n      let keyword.abbr = prefix .\n            \\ get(keyword, 'abbr', keyword.word)\n    endfor\n  elseif a:complete_str =~? '^\\c<sid>'\n    \" SID functions.\n    let prefix = matchstr(a:complete_str, '^\\c<sid>')\n    let complete_str = substitute(a:complete_str, '^\\c<sid>', 's:', '')\n    let list = deepcopy(\n          \\ neocomplcache#sources#vim_complete#helper#function(\n          \\     cur_text, complete_str))\n    for keyword in list\n      let keyword.word = prefix . keyword.word[2:]\n      let keyword.abbr = prefix .\n            \\ get(keyword, 'abbr', keyword.word)[2:]\n    endfor\n  elseif cur_text =~# '\\<has([''\"]\\w*$'\n    \" Features.\n    let list = neocomplcache#sources#vim_complete#helper#feature(\n          \\ cur_text, a:complete_str)\n  elseif cur_text =~# '\\<expand([''\"][<>[:alnum:]]*$'\n    \" Expand.\n    let list = neocomplcache#sources#vim_complete#helper#expand(\n          \\ cur_text, a:complete_str)\n  elseif a:complete_str =~ '^\\$'\n    \" Environment.\n    let list = neocomplcache#sources#vim_complete#helper#environment(\n          \\ cur_text, a:complete_str)\n  elseif cur_text =~ '^[[:digit:],[:space:][:tab:]$''<>]*!\\s*\\f\\+$'\n    \" Shell commands.\n    let list = neocomplcache#sources#vim_complete#helper#shellcmd(\n          \\ cur_text, a:complete_str)\n  else\n    \" Commands.\n    let list = neocomplcache#sources#vim_complete#helper#command(\n          \\ cur_text, a:complete_str)\n  endif\n\n  return neocomplcache#keyword_filter(copy(list), a:complete_str)\nendfunction\"}}}\n\nfunction! neocomplcache#sources#vim_complete#define() \"{{{\n  return s:source\nendfunction\"}}}\n\nfunction! neocomplcache#sources#vim_complete#get_cur_text() \"{{{\n  let cur_text = neocomplcache#get_cur_text(1)\n  if &filetype == 'vimshell' && exists('*vimshell#get_secondary_prompt')\n        \\   && empty(b:vimshell.continuation)\n    return cur_text[len(vimshell#get_secondary_prompt()) :]\n  endif\n\n  let line = line('.')\n  let cnt = 0\n  while cur_text =~ '^\\s*\\\\' && line > 1 && cnt < 5\n    let cur_text = getline(line - 1) .\n          \\ substitute(cur_text, '^\\s*\\\\', '', '')\n    let line -= 1\n    let cnt += 1\n  endwhile\n\n  return split(cur_text, '\\s\\+|\\s\\+\\|<bar>', 1)[-1]\nendfunction\"}}}\nfunction! neocomplcache#sources#vim_complete#get_command(cur_text) \"{{{\n  return matchstr(a:cur_text, '\\<\\%(\\d\\+\\)\\?\\zs\\h\\w*\\ze!\\?\\|'.\n        \\ '\\<\\%([[:digit:],[:space:]$''<>]\\+\\)\\?\\zs\\h\\w*\\ze/.*')\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/util.vim",
    "content": "\"=============================================================================\n\" FILE: util.vim\n\" AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 26 Sep 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nlet s:is_windows = has('win16') || has('win32') || has('win64') || has('win95')\nlet s:is_cygwin = has('win32unix')\nlet s:is_mac = !s:is_windows && !s:is_cygwin\n      \\ && (has('mac') || has('macunix') || has('gui_macvim') ||\n      \\   (!isdirectory('/proc') && executable('sw_vers')))\n\nlet s:is_unix = has('unix')\nfunction! neocomplcache#util#truncate_smart(str, max, footer_width, separator) \"{{{\n  let width = s:wcswidth(a:str)\n  if width <= a:max\n    let ret = a:str\n  else\n    let header_width = a:max - s:wcswidth(a:separator) - a:footer_width\n    let ret = s:strwidthpart(a:str, header_width) . a:separator\n          \\ . s:strwidthpart_reverse(a:str, a:footer_width)\n  endif\n\n  return s:truncate(ret, a:max)\nendfunction\"}}}\n\nfunction! neocomplcache#util#truncate(str, width) \"{{{\n  \" Original function is from mattn.\n  \" http://github.com/mattn/googlereader-vim/tree/master\n\n  if a:str =~# '^[\\x00-\\x7f]*$'\n    return len(a:str) < a:width ?\n          \\ printf('%-'.a:width.'s', a:str) : strpart(a:str, 0, a:width)\n  endif\n\n  let ret = a:str\n  let width = s:wcswidth(a:str)\n  if width > a:width\n    let ret = s:strwidthpart(ret, a:width)\n    let width = s:wcswidth(ret)\n  endif\n\n  if width < a:width\n    let ret .= repeat(' ', a:width - width)\n  endif\n\n  return ret\nendfunction\"}}}\n\nfunction! neocomplcache#util#strchars(str) \"{{{\n  return s:strchars(a:str)\nendfunction\"}}}\nfunction! neocomplcache#util#wcswidth(str) \"{{{\n  return s:wcswidth(a:str)\nendfunction\"}}}\nfunction! neocomplcache#util#strwidthpart(str, width)\n  if a:width <= 0\n    return ''\n  endif\n  let ret = a:str\n  let width = s:wcswidth(a:str)\n  while width > a:width\n    let char = matchstr(ret, '.$')\n    let ret = ret[: -1 - len(char)]\n    let width -= s:wcswidth(char)\n  endwhile\n\n  return ret\nendfunction\nfunction! neocomplcache#util#strwidthpart_reverse(str, width) \"{{{\n  if a:width <= 0\n    return ''\n  endif\n  let ret = a:str\n  let width = s:wcswidth(a:str)\n  while width > a:width\n    let char = matchstr(ret, '^.')\n    let ret = ret[len(char) :]\n    let width -= s:wcswidth(char)\n  endwhile\n\n  return ret\nendfunction\"}}}\n\nfunction! neocomplcache#util#substitute_path_separator(path) \"{{{\n  return s:is_windows ? substitute(a:path, '\\\\', '/', 'g') : a:path\nendfunction\"}}}\nfunction! neocomplcache#util#mb_strlen(str) \"{{{\n  return s:strchars(a:str)\nendfunction\"}}}\nfunction! neocomplcache#util#system(str, ...) \"{{{\n  let command = a:str\n  let input = a:0 >= 1 ? a:1 : ''\n  let command = neocomplcache#util#iconv(command, &encoding, 'char')\n  let input = neocomplcache#util#iconv(input, &encoding, 'char')\n\n  if a:0 == 0\n    let output = neocomplcache#util#has_vimproc() ?\n          \\ vimproc#system(command) : system(command)\n  elseif a:0 == 1\n    let output = neocomplcache#util#has_vimproc() ?\n          \\ vimproc#system(command, input) : system(command, input)\n  else\n    \" ignores 3rd argument unless you have vimproc.\n    let output = neocomplcache#util#has_vimproc() ?\n          \\ vimproc#system(command, input, a:2) : system(command, input)\n  endif\n\n  let output = neocomplcache#util#iconv(output, 'char', &encoding)\n\n  return output\nendfunction\"}}}\nfunction! neocomplcache#util#has_lua() \"{{{\n  \" Note: Disabled if_lua feature if less than 7.3.885.\n  \" Because if_lua has double free problem.\n  return has('lua') && (v:version > 703 || v:version == 703 && has('patch885'))\nendfunction\"}}}\nfunction! neocomplcache#util#is_windows() \"{{{\n  return s:is_windows\nendfunction\"}}}\nfunction! neocomplcache#util#is_mac() \"{{{\n  return s:is_mac\nendfunction\"}}}\nfunction! neocomplcache#util#get_last_status(...) \"{{{\n  return neocomplcache#util#has_vimproc() ?\n        \\ vimproc#get_last_status() : v:shell_error\nendfunction\"}}}\nfunction! neocomplcache#util#escape_pattern(str) \"{{{\n  return escape(a:str, '~\"\\.^$[]*')\nendfunction\"}}}\nfunction! neocomplcache#util#iconv(expr, from, to) \"{{{\n  if a:from == '' || a:to == '' || a:from ==? a:to\n    return a:expr\n  endif\n  let result = iconv(a:expr, a:from, a:to)\n  return result != '' ? result : a:expr\nendfunction\"}}}\nfunction! neocomplcache#util#uniq(list, ...) \"{{{\n  let list = a:0 ? map(copy(a:list), printf('[v:val, %s]', a:1)) : copy(a:list)\n  let i = 0\n  let seen = {}\n  while i < len(list)\n    let key = string(a:0 ? list[i][1] : list[i])\n    if has_key(seen, key)\n      call remove(list, i)\n    else\n      let seen[key] = 1\n      let i += 1\n    endif\n  endwhile\n  return a:0 ? map(list, 'v:val[0]') : list\nendfunction\"}}}\nfunction! neocomplcache#util#sort_by(list, expr) \"{{{\n  let pairs = map(a:list, printf('[v:val, %s]', a:expr))\n  return map(s:sort(pairs,\n  \\      'a:a[1] ==# a:b[1] ? 0 : a:a[1] ># a:b[1] ? 1 : -1'), 'v:val[0]')\nendfunction\"}}}\n\n\" Sudo check.\nfunction! neocomplcache#util#is_sudo() \"{{{\n  return $SUDO_USER != '' && $USER !=# $SUDO_USER\n      \\ && $HOME !=# expand('~'.$USER)\n      \\ && $HOME ==# expand('~'.$SUDO_USER)\nendfunction\"}}}\n\nfunction! neocomplcache#util#glob(pattern, ...) \"{{{\n  if a:pattern =~ \"'\"\n    \" Use glob('*').\n    let cwd = getcwd()\n    let base = neocomplcache#util#substitute_path_separator(\n          \\ fnamemodify(a:pattern, ':h'))\n    execute 'lcd' fnameescape(base)\n\n    let files = map(split(neocomplcache#util#substitute_path_separator(\n          \\ glob('*')), '\\n'), \"base . '/' . v:val\")\n\n    execute 'lcd' fnameescape(cwd)\n\n    return files\n  endif\n\n  \" let is_force_glob = get(a:000, 0, 0)\n  let is_force_glob = get(a:000, 0, 1)\n\n  if !is_force_glob && a:pattern =~ '^[^\\\\*]\\+/\\*'\n        \\ && neocomplcache#util#has_vimproc() && exists('*vimproc#readdir')\n    return filter(vimproc#readdir(a:pattern[: -2]), 'v:val !~ \"/\\\\.\\\\.\\\\?$\"')\n  else\n    \" Escape [.\n    if neocomplcache#util#is_windows()\n      let glob = substitute(a:pattern, '\\[', '\\\\[[]', 'g')\n    else\n      let glob = escape(a:pattern, '[')\n    endif\n\n    return split(neocomplcache#util#substitute_path_separator(glob(glob)), '\\n')\n  endif\nendfunction\"}}}\nfunction! neocomplcache#util#expand(path) \"{{{\n  return expand(escape(a:path, '*?[]\"={}'), 1)\nendfunction\"}}}\n\nfunction! neocomplcache#util#set_default(var, val, ...)  \"{{{\n  if !exists(a:var) || type({a:var}) != type(a:val)\n    let alternate_var = get(a:000, 0, '')\n\n    let {a:var} = exists(alternate_var) ?\n          \\ {alternate_var} : a:val\n  endif\nendfunction\"}}}\nfunction! neocomplcache#util#set_dictionary_helper(variable, keys, pattern) \"{{{\n  for key in split(a:keys, '\\s*,\\s*')\n    if !has_key(a:variable, key)\n      let a:variable[key] = a:pattern\n    endif\n  endfor\nendfunction\"}}}\n\nfunction! neocomplcache#util#set_default_dictionary(variable, keys, value) \"{{{\n  if !exists('s:disable_dictionaries')\n    let s:disable_dictionaries = {}\n  endif\n\n  if has_key(s:disable_dictionaries, a:variable)\n    return\n  endif\n\n  call neocomplcache#util#set_dictionary_helper({a:variable}, a:keys, a:value)\nendfunction\"}}}\nfunction! neocomplcache#util#disable_default_dictionary(variable) \"{{{\n  if !exists('s:disable_dictionaries')\n    let s:disable_dictionaries = {}\n  endif\n\n  let s:disable_dictionaries[a:variable] = 1\nendfunction\"}}}\n\nfunction! neocomplcache#util#split_rtp(...) \"{{{\n  let rtp = a:0 ? a:1 : &runtimepath\n  if type(rtp) == type([])\n    return rtp\n  endif\n\n  if rtp !~ '\\\\'\n    return split(rtp, ',')\n  endif\n\n  let split = split(rtp, '\\\\\\@<!\\%(\\\\\\\\\\)*\\zs,')\n  return map(split,'substitute(v:val, ''\\\\\\([\\\\,]\\)'', \"\\\\1\", \"g\")')\nendfunction\"}}}\nfunction! neocomplcache#util#join_rtp(list) \"{{{\n  return join(map(copy(a:list), 's:escape(v:val)'), ',')\nendfunction\"}}}\n\" Escape a path for runtimepath.\nfunction! s:escape(path)\"{{{\n  return substitute(a:path, ',\\|\\\\,\\@=', '\\\\\\0', 'g')\nendfunction\"}}}\n\nfunction! neocomplcache#util#has_vimproc() \"{{{\n  \" Initialize.\n  if !exists('g:neocomplcache_use_vimproc')\n    \" Check vimproc.\n    try\n      call vimproc#version()\n      let exists_vimproc = 1\n    catch\n      let exists_vimproc = 0\n    endtry\n\n    let g:neocomplcache_use_vimproc = exists_vimproc\n  endif\n\n  return g:neocomplcache_use_vimproc\nendfunction\"}}}\n\nfunction! neocomplcache#util#dup_filter(list) \"{{{\n  let dict = {}\n  for keyword in a:list\n    if !has_key(dict, keyword.word)\n      let dict[keyword.word] = keyword\n    endif\n  endfor\n\n  return values(dict)\nendfunction\"}}}\n\nfunction! neocomplcache#util#convert2list(expr) \"{{{\n  return type(a:expr) ==# type([]) ? a:expr : [a:expr]\nendfunction\"}}}\n\n\" Returns the number of character in a:str.\n\" NOTE: This returns proper value\n\" even if a:str contains multibyte character(s).\n\" s:strchars(str) {{{\nif exists('*strchars')\n  function! s:strchars(str)\n    return strchars(a:str)\n  endfunction\nelse\n  function! s:strchars(str)\n    return strlen(substitute(copy(a:str), '.', 'x', 'g'))\n  endfunction\nendif \"}}}\n\nif v:version >= 703\n  \" Use builtin function.\n  function! s:wcswidth(str)\n    return strwidth(a:str)\n  endfunction\nelse\n  function! s:wcswidth(str)\n    if a:str =~# '^[\\x00-\\x7f]*$'\n      return strlen(a:str)\n    end\n\n    let mx_first = '^\\(.\\)'\n    let str = a:str\n    let width = 0\n    while 1\n      let ucs = char2nr(substitute(str, mx_first, '\\1', ''))\n      if ucs == 0\n        break\n      endif\n      let width += s:_wcwidth(ucs)\n      let str = substitute(str, mx_first, '', '')\n    endwhile\n    return width\n  endfunction\n\n  \" UTF-8 only.\n  function! s:_wcwidth(ucs)\n    let ucs = a:ucs\n    if (ucs >= 0x1100\n          \\  && (ucs <= 0x115f\n          \\  || ucs == 0x2329\n          \\  || ucs == 0x232a\n          \\  || (ucs >= 0x2e80 && ucs <= 0xa4cf\n          \\      && ucs != 0x303f)\n          \\  || (ucs >= 0xac00 && ucs <= 0xd7a3)\n          \\  || (ucs >= 0xf900 && ucs <= 0xfaff)\n          \\  || (ucs >= 0xfe30 && ucs <= 0xfe6f)\n          \\  || (ucs >= 0xff00 && ucs <= 0xff60)\n          \\  || (ucs >= 0xffe0 && ucs <= 0xffe6)\n          \\  || (ucs >= 0x20000 && ucs <= 0x2fffd)\n          \\  || (ucs >= 0x30000 && ucs <= 0x3fffd)\n          \\  ))\n      return 2\n    endif\n    return 1\n  endfunction\nendif\n\nfunction! s:strwidthpart(str, width)\n  if a:width <= 0\n    return ''\n  endif\n  let ret = a:str\n  let width = s:wcswidth(a:str)\n  while width > a:width\n    let char = matchstr(ret, '.$')\n    let ret = ret[: -1 - len(char)]\n    let width -= s:wcswidth(char)\n  endwhile\n\n  return ret\nendfunction\nfunction! s:strwidthpart_reverse(str, width)\n  if a:width <= 0\n    return ''\n  endif\n  let ret = a:str\n  let width = s:wcswidth(a:str)\n  while width > a:width\n    let char = matchstr(ret, '^.')\n    let ret = ret[len(char) :]\n    let width -= s:wcswidth(char)\n  endwhile\n\n  return ret\nendfunction\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache/variables.vim",
    "content": "\"=============================================================================\n\" FILE: variables.vim\n\" AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 01 May 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! neocomplcache#variables#get_frequencies() \"{{{\n  if !exists('s:filetype_frequencies')\n    let s:filetype_frequencies = {}\n  endif\n  let filetype = neocomplcache#context_filetype#get(&filetype)\n  if !has_key(s:filetype_frequencies, filetype)\n    let s:filetype_frequencies[filetype] = {}\n  endif\n\n  let frequencies = s:filetype_frequencies[filetype]\n\n  return frequencies\nendfunction\"}}}\n\nfunction! neocomplcache#variables#get_sources() \"{{{\n  if !exists('s:sources')\n    let s:sources = {}\n  endif\n  return s:sources\nendfunction\"}}}\n\nfunction! neocomplcache#variables#get_filters() \"{{{\n  if !exists('s:filters')\n    let s:filters = {}\n  endif\n  return s:filters\nendfunction\"}}}\n\nfunction! neocomplcache#variables#get_custom() \"{{{\n  if !exists('s:custom')\n    let s:custom = {}\n    let s:custom.sources = {}\n    let s:custom.sources._ = {}\n  endif\n\n  return s:custom\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/neocomplcache.vim",
    "content": "\"=============================================================================\n\" FILE: neocomplcache.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 26 Sep 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nif !exists('g:loaded_neocomplcache')\n  runtime! plugin/neocomplcache.vim\nendif\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nscriptencoding utf-8\n\nfunction! neocomplcache#initialize() \"{{{\n  return neocomplcache#init#enable()\nendfunction\"}}}\n\nfunction! neocomplcache#get_current_neocomplcache() \"{{{\n  if !exists('b:neocomplcache')\n    call neocomplcache#init#_current_neocomplcache()\n  endif\n\n  return b:neocomplcache\nendfunction\"}}}\nfunction! neocomplcache#get_context() \"{{{\n  return neocomplcache#get_current_neocomplcache().context\nendfunction\"}}}\n\n\" Source helper. \"{{{\nfunction! neocomplcache#define_source(source) \"{{{\n  let sources = neocomplcache#variables#get_sources()\n  for source in neocomplcache#util#convert2list(a:source)\n    let sources[source.name] = neocomplcache#init#_source(source)\n  endfor\nendfunction\"}}}\nfunction! neocomplcache#define_filter(filter) \"{{{\n  let filters = neocomplcache#variables#get_filters()\n  for filter in neocomplcache#util#convert2list(a:filter)\n    let filters[filter.name] = neocomplcache#init#_filter(filter)\n  endfor\nendfunction\"}}}\nfunction! neocomplcache#available_sources() \"{{{\n  return copy(neocomplcache#variables#get_sources())\nendfunction\"}}}\nfunction! neocomplcache#custom_source(source_name, option_name, value) \"{{{\n  let custom_sources = neocomplcache#variables#get_custom().sources\n\n  for key in split(a:source_name, '\\s*,\\s*')\n    if !has_key(custom_sources, key)\n      let custom_sources[key] = {}\n    endif\n\n    let custom_sources[key][a:option_name] = a:value\n  endfor\nendfunction\"}}}\n\nfunction! neocomplcache#is_enabled_source(source_name) \"{{{\n  return neocomplcache#helper#is_enabled_source(a:source_name)\nendfunction\"}}}\nfunction! neocomplcache#is_disabled_source(source_name) \"{{{\n  let filetype = neocomplcache#get_context_filetype()\n\n  let disabled_sources = get(\n        \\ g:neocomplcache_disabled_sources_list, filetype,\n        \\   get(g:neocomplcache_disabled_sources_list, '_', []))\n  return index(disabled_sources, a:source_name) >= 0\nendfunction\"}}}\nfunction! neocomplcache#keyword_escape(complete_str) \"{{{\n  return neocomplcache#helper#keyword_escape(a:complete_str)\nendfunction\"}}}\nfunction! neocomplcache#keyword_filter(list, complete_str) \"{{{\n  return neocomplcache#filters#keyword_filter(a:list, a:complete_str)\nendfunction\"}}}\nfunction! neocomplcache#dup_filter(list) \"{{{\n  return neocomplcache#util#dup_filter(a:list)\nendfunction\"}}}\nfunction! neocomplcache#check_match_filter(complete_str) \"{{{\n  return neocomplcache#keyword_escape(a:complete_str) =~ '[^\\\\]\\*\\|\\\\+'\nendfunction\"}}}\nfunction! neocomplcache#check_completion_length_match(complete_str, completion_length) \"{{{\n  return neocomplcache#keyword_escape(\n        \\ a:complete_str[: a:completion_length-1]) =~\n        \\'[^\\\\]\\*\\|\\\\+\\|\\\\%(\\|\\\\|'\nendfunction\"}}}\nfunction! neocomplcache#dictionary_filter(dictionary, complete_str) \"{{{\n  return neocomplcache#filters#dictionary_filter(a:dictionary, a:complete_str)\nendfunction\"}}}\nfunction! neocomplcache#unpack_dictionary(dict) \"{{{\n  let ret = []\n  let values = values(a:dict)\n  for l in (type(values) == type([]) ?\n        \\ values : values(values))\n    let ret += (type(l) == type([])) ? copy(l) : values(l)\n  endfor\n\n  return ret\nendfunction\"}}}\nfunction! neocomplcache#pack_dictionary(list) \"{{{\n  let completion_length = 2\n  let ret = {}\n  for candidate in a:list\n    let key = tolower(candidate.word[: completion_length-1])\n    if !has_key(ret, key)\n      let ret[key] = {}\n    endif\n\n    let ret[key][candidate.word] = candidate\n  endfor\n\n  return ret\nendfunction\"}}}\nfunction! neocomplcache#add_dictionaries(dictionaries) \"{{{\n  if empty(a:dictionaries)\n    return {}\n  endif\n\n  let ret = a:dictionaries[0]\n  for dict in a:dictionaries[1:]\n    for [key, value] in items(dict)\n      if has_key(ret, key)\n        let ret[key] += value\n      else\n        let ret[key] = value\n      endif\n    endfor\n  endfor\n\n  return ret\nendfunction\"}}}\n\nfunction! neocomplcache#system(...) \"{{{\n  return call('neocomplcache#util#system', a:000)\nendfunction\"}}}\nfunction! neocomplcache#has_vimproc() \"{{{\n  return neocomplcache#util#has_vimproc()\nendfunction\"}}}\n\nfunction! neocomplcache#get_cur_text(...) \"{{{\n  \" Return cached text.\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  return (a:0 == 0 && mode() ==# 'i' &&\n        \\  neocomplcache.cur_text != '') ?\n        \\ neocomplcache.cur_text : neocomplcache#helper#get_cur_text()\nendfunction\"}}}\nfunction! neocomplcache#get_next_keyword() \"{{{\n  \" Get next keyword.\n  let pattern = '^\\%(' . neocomplcache#get_next_keyword_pattern() . '\\m\\)'\n\n  return matchstr('a'.getline('.')[len(neocomplcache#get_cur_text()) :], pattern)[1:]\nendfunction\"}}}\nfunction! neocomplcache#get_completion_length(source_name) \"{{{\n  let sources = neocomplcache#variables#get_sources()\n  if !has_key(sources, a:source_name)\n    \" Unknown.\n    return -1\n  endif\n\n  if neocomplcache#is_auto_complete()\n        \\ && neocomplcache#get_current_neocomplcache().completion_length >= 0\n    return neocomplcache#get_current_neocomplcache().completion_length\n  else\n    return sources[a:source_name].min_pattern_length\n  endif\nendfunction\"}}}\nfunction! neocomplcache#set_completion_length(source_name, length) \"{{{\n  let custom = neocomplcache#variables#get_custom().sources\n  if !has_key(custom, a:source_name)\n    let custom[a:source_name] = {}\n  endif\n\n  if !has_key(custom[a:source_name], 'min_pattern_length')\n    let custom[a:source_name].min_pattern_length = a:length\n  endif\nendfunction\"}}}\nfunction! neocomplcache#get_keyword_pattern(...) \"{{{\n  let filetype = a:0 != 0? a:000[0] : neocomplcache#get_context_filetype()\n\n  return neocomplcache#helper#unite_patterns(\n        \\ g:neocomplcache_keyword_patterns, filetype)\nendfunction\"}}}\nfunction! neocomplcache#get_next_keyword_pattern(...) \"{{{\n  let filetype = a:0 != 0? a:000[0] : neocomplcache#get_context_filetype()\n  let next_pattern = neocomplcache#helper#unite_patterns(\n        \\ g:neocomplcache_next_keyword_patterns, filetype)\n\n  return (next_pattern == '' ? '' : next_pattern.'\\m\\|')\n        \\ . neocomplcache#get_keyword_pattern(filetype)\nendfunction\"}}}\nfunction! neocomplcache#get_keyword_pattern_end(...) \"{{{\n  let filetype = a:0 != 0? a:000[0] : neocomplcache#get_context_filetype()\n\n  return '\\%('.neocomplcache#get_keyword_pattern(filetype).'\\m\\)$'\nendfunction\"}}}\nfunction! neocomplcache#match_word(...) \"{{{\n  return call('neocomplcache#helper#match_word', a:000)\nendfunction\"}}}\nfunction! neocomplcache#is_enabled() \"{{{\n  return neocomplcache#init#is_enabled()\nendfunction\"}}}\nfunction! neocomplcache#is_locked(...) \"{{{\n  let bufnr = a:0 > 0 ? a:1 : bufnr('%')\n  return !neocomplcache#is_enabled() || &paste\n        \\ || g:neocomplcache_disable_auto_complete\n        \\ || neocomplcache#get_current_neocomplcache().lock\n        \\ || (g:neocomplcache_lock_buffer_name_pattern != '' &&\n        \\   bufname(bufnr) =~ g:neocomplcache_lock_buffer_name_pattern)\n        \\ || &l:omnifunc ==# 'fuf#onComplete'\nendfunction\"}}}\nfunction! neocomplcache#is_plugin_locked(source_name) \"{{{\n  if !neocomplcache#is_enabled()\n    return 1\n  endif\n\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n\n  return get(neocomplcache.lock_sources, a:source_name, 0)\nendfunction\"}}}\nfunction! neocomplcache#is_auto_select() \"{{{\n  return g:neocomplcache_enable_auto_select && !neocomplcache#is_eskk_enabled()\nendfunction\"}}}\nfunction! neocomplcache#is_auto_complete() \"{{{\n  return &l:completefunc == 'neocomplcache#complete#auto_complete'\nendfunction\"}}}\nfunction! neocomplcache#is_sources_complete() \"{{{\n  return &l:completefunc == 'neocomplcache#complete#sources_manual_complete'\nendfunction\"}}}\nfunction! neocomplcache#is_eskk_enabled() \"{{{\n  return exists('*eskk#is_enabled') && eskk#is_enabled()\nendfunction\"}}}\nfunction! neocomplcache#is_eskk_convertion(cur_text) \"{{{\n  return neocomplcache#is_eskk_enabled()\n        \\   && eskk#get_preedit().get_henkan_phase() !=#\n        \\             g:eskk#preedit#PHASE_NORMAL\nendfunction\"}}}\nfunction! neocomplcache#is_multibyte_input(cur_text) \"{{{\n  return (exists('b:skk_on') && b:skk_on)\n        \\     || char2nr(split(a:cur_text, '\\zs')[-1]) > 0x80\nendfunction\"}}}\nfunction! neocomplcache#is_text_mode() \"{{{\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  return get(g:neocomplcache_text_mode_filetypes,\n        \\ neocomplcache.context_filetype, 0)\nendfunction\"}}}\nfunction! neocomplcache#is_windows() \"{{{\n  return neocomplcache#util#is_windows()\nendfunction\"}}}\nfunction! neocomplcache#is_win() \"{{{\n  return neocomplcache#util#is_windows()\nendfunction\"}}}\nfunction! neocomplcache#is_prefetch() \"{{{\n  return !neocomplcache#is_locked() &&\n        \\ (g:neocomplcache_enable_prefetch || &l:formatoptions =~# 'a')\nendfunction\"}}}\nfunction! neocomplcache#exists_echodoc() \"{{{\n  return exists('g:loaded_echodoc') && g:loaded_echodoc\nendfunction\"}}}\nfunction! neocomplcache#within_comment() \"{{{\n  return neocomplcache#helper#get_syn_name(1) ==# 'Comment'\nendfunction\"}}}\nfunction! neocomplcache#print_caching(string) \"{{{\n  if g:neocomplcache_enable_caching_message\n    redraw\n    echon a:string\n  endif\nendfunction\"}}}\nfunction! neocomplcache#print_error(string) \"{{{\n  echohl Error | echomsg a:string | echohl None\nendfunction\"}}}\nfunction! neocomplcache#print_warning(string) \"{{{\n  echohl WarningMsg | echomsg a:string | echohl None\nendfunction\"}}}\nfunction! neocomplcache#head_match(checkstr, headstr) \"{{{\n  let checkstr = &ignorecase ?\n        \\ tolower(a:checkstr) : a:checkstr\n  let headstr = &ignorecase ?\n        \\ tolower(a:headstr) : a:headstr\n  return stridx(checkstr, headstr) == 0\nendfunction\"}}}\nfunction! neocomplcache#get_source_filetypes(filetype) \"{{{\n  return neocomplcache#helper#get_source_filetypes(a:filetype)\nendfunction\"}}}\nfunction! neocomplcache#get_sources_list(dictionary, filetype) \"{{{\n  return neocomplcache#helper#ftdictionary2list(a:dictionary, a:filetype)\nendfunction\"}}}\nfunction! neocomplcache#escape_match(str) \"{{{\n  return escape(a:str, '~\"*\\.^$[]')\nendfunction\"}}}\nfunction! neocomplcache#get_context_filetype(...) \"{{{\n  if !neocomplcache#is_enabled()\n    return &filetype\n  endif\n\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n\n  if a:0 != 0 || mode() !=# 'i' ||\n        \\ neocomplcache.context_filetype == ''\n    call neocomplcache#context_filetype#set()\n  endif\n\n  return neocomplcache.context_filetype\nendfunction\"}}}\nfunction! neocomplcache#get_context_filetype_range(...) \"{{{\n  if !neocomplcache#is_enabled()\n    return [[1, 1], [line('$'), len(getline('$'))+1]]\n  endif\n\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n\n  if a:0 != 0 || mode() !=# 'i' ||\n        \\ neocomplcache.context_filetype == ''\n    call neocomplcache#context_filetype#set()\n  endif\n\n  if neocomplcache.context_filetype ==# &filetype\n    return [[1, 1], [line('$'), len(getline('$'))+1]]\n  endif\n\n  return neocomplcache.context_filetype_range\nendfunction\"}}}\nfunction! neocomplcache#print_debug(expr) \"{{{\n  if g:neocomplcache_enable_debug\n    echomsg string(a:expr)\n  endif\nendfunction\"}}}\nfunction! neocomplcache#get_temporary_directory() \"{{{\n  let directory = neocomplcache#util#substitute_path_separator(\n        \\ neocomplcache#util#expand(g:neocomplcache_temporary_dir))\n  if !isdirectory(directory) && !neocomplcache#util#is_sudo()\n    call mkdir(directory, 'p')\n  endif\n\n  return directory\nendfunction\"}}}\nfunction! neocomplcache#complete_check() \"{{{\n  return neocomplcache#helper#complete_check()\nendfunction\"}}}\nfunction! neocomplcache#check_invalid_omnifunc(omnifunc) \"{{{\n  return a:omnifunc == '' || (a:omnifunc !~ '#' && !exists('*' . a:omnifunc))\nendfunction\"}}}\nfunction! neocomplcache#skip_next_complete() \"{{{\n  let neocomplcache = neocomplcache#get_current_neocomplcache()\n  let neocomplcache.skip_next_complete = 1\nendfunction\"}}}\n\nfunction! neocomplcache#set_dictionary_helper(variable, keys, value) \"{{{\n  return neocomplcache#util#set_dictionary_helper(\n        \\ a:variable, a:keys, a:value)\nendfunction\"}}}\nfunction! neocomplcache#disable_default_dictionary(variable) \"{{{\n  return neocomplcache#util#disable_default_dictionary(a:variable)\nendfunction\"}}}\nfunction! neocomplcache#filetype_complete(arglead, cmdline, cursorpos) \"{{{\n  return neocomplcache#helper#filetype_complete(a:arglead, a:cmdline, a:cursorpos)\nendfunction\"}}}\n\"}}}\n\n\" Key mapping functions. \"{{{\nfunction! neocomplcache#smart_close_popup()\n  return neocomplcache#mappings#smart_close_popup()\nendfunction\nfunction! neocomplcache#close_popup()\n  return neocomplcache#mappings#close_popup()\nendfunction\nfunction! neocomplcache#cancel_popup()\n  return neocomplcache#mappings#cancel_popup()\nendfunction\nfunction! neocomplcache#undo_completion()\n  return neocomplcache#mappings#undo_completion()\nendfunction\nfunction! neocomplcache#complete_common_string()\n  return neocomplcache#mappings#complete_common_string()\nendfunction\nfunction! neocomplcache#start_manual_complete(...)\n  return call('neocomplcache#mappings#start_manual_complete', a:000)\nendfunction\n\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/unite/sources/file_include.vim",
    "content": "\"=============================================================================\n\" FILE: neocomplcache.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\"          manga_osyo (Original)\n\" Last Modified: 19 Dec 2011.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! unite#sources#file_include#define()\n  return s:source\nendfunction\n\nlet s:source = {\n      \\ 'name' : 'file_include',\n      \\ 'description' : 'candidates from include files',\n      \\ 'hooks' : {},\n      \\}\nfunction! s:source.hooks.on_init(args, context) \"{{{\n  \" From neocomplcache include files.\n  let a:context.source__include_files =\n        \\ neocomplcache#sources#include_complete#get_include_files(bufnr('%'))\n  let a:context.source__path = &path\nendfunction\"}}}\n\nfunction! s:source.gather_candidates(args, context) \"{{{\n  let files = map(copy(a:context.source__include_files), '{\n        \\ \"word\" : neocomplcache#util#substitute_path_separator(v:val),\n        \\ \"abbr\" : neocomplcache#util#substitute_path_separator(v:val),\n        \\ \"source\" : \"file_include\",\n        \\ \"kind\" : \"file\",\n        \\ \"action__path\" : v:val\n        \\ }')\n\n  for word in files\n    \" Path search.\n    for path in map(split(a:context.source__path, ','),\n          \\ 'neocomplcache#util#substitute_path_separator(v:val)')\n      if path != '' && neocomplcache#head_match(word.word, path . '/')\n        let word.abbr = word.abbr[len(path)+1 : ]\n        break\n      endif\n    endfor\n  endfor\n\n  return files\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "autoload/unite/sources/neocomplcache.vim",
    "content": "\"=============================================================================\n\" FILE: neocomplcache.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 27 Jul 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\"=============================================================================\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! unite#sources#neocomplcache#define() \"{{{\n  return s:neocomplcache_source\nendfunction \"}}}\n\n\" neocomplcache unite source.\nlet s:neocomplcache_source = {\n      \\ 'name': 'neocomplcache',\n      \\ 'hooks' : {},\n      \\ }\n\nfunction! s:neocomplcache_source.hooks.on_init(args, context) \"{{{\n  if !neocomplcache#is_enabled()\n    let a:context.source__complete_pos = -1\n    let a:context.source__candidates = []\n    return\n  endif\n\n  \" Save options.\n  let max_list_save = g:neocomplcache_max_list\n  let max_keyword_width_save = g:neocomplcache_max_keyword_width\n  let manual_start_length = g:neocomplcache_manual_completion_start_length\n\n  try\n    let g:neocomplcache_max_list = -1\n    let g:neocomplcache_max_keyword_width = -1\n    let g:neocomplcache_manual_completion_start_length = 0\n    let &l:completefunc = 'neocomplcache#complete#unite_complete'\n\n    let cur_text = neocomplcache#get_cur_text(1)\n    let complete_results = neocomplcache#complete#_get_results(cur_text)\n    let a:context.source__complete_pos =\n          \\ neocomplcache#complete#_get_complete_pos(complete_results)\n    let a:context.source__candidates = neocomplcache#complete#_get_words(\n          \\ complete_results, a:context.source__complete_pos,\n          \\ cur_text[a:context.source__complete_pos :])\n  finally\n    \" Restore options.\n    let g:neocomplcache_max_list = max_list_save\n    let g:neocomplcache_max_keyword_width = max_keyword_width_save\n    let &l:completefunc = 'neocomplcache#complete#auto_complete'\n    let g:neocomplcache_manual_completion_start_length = manual_start_length\n  endtry\nendfunction\"}}}\n\nfunction! s:neocomplcache_source.gather_candidates(args, context) \"{{{\n  let keyword_pos = a:context.source__complete_pos\n  let list = []\n  for keyword in a:context.source__candidates\n    let dict = {\n        \\   'word' : keyword.word,\n        \\   'abbr' : printf('%-50s', get(keyword, 'abbr', keyword.word)),\n        \\   'kind': 'completion',\n        \\   'action__complete_word' : keyword.word,\n        \\   'action__complete_pos' : keyword_pos,\n        \\ }\n    if has_key(keyword, 'kind')\n      let dict.abbr .= ' ' . keyword.kind\n    endif\n    if has_key(keyword, 'menu')\n      let dict.abbr .= ' ' . keyword.menu\n    endif\n    if has_key(keyword, 'description')\n      if type(keyword.description) ==# type(function('tr'))\n        let dict.action__complete_info_lazy = keyword.description\n      else\n        let dict.action__complete_info = keyword.description\n      endif\n    endif\n\n    call add(list, dict)\n  endfor\n\n  return list\nendfunction \"}}}\n\nfunction! unite#sources#neocomplcache#start_complete() \"{{{\n  return s:start_complete(0)\nendfunction \"}}}\n\nfunction! unite#sources#neocomplcache#start_quick_match() \"{{{\n  return s:start_complete(1)\nendfunction \"}}}\n\nfunction! s:start_complete(is_quick_match) \"{{{\n  if !neocomplcache#is_enabled()\n    return ''\n  endif\n  if !exists(':Unite')\n    echoerr 'unite.vim is not installed.'\n    return ''\n  endif\n\n  return unite#start_complete(['neocomplcache'], {\n        \\ 'auto_preview' : 1, 'quick_match' : a:is_quick_match,\n        \\ 'input' : neocomplcache#get_cur_text(1),\n        \\ })\nendfunction\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "doc/neocomplcache.txt",
    "content": "*neocomplcache.txt*\tUltimate auto completion system for Vim\n\nVersion: 8.2\nAuthor : Shougo <Shougo.Matsu@gmail.com>\nLicense: MIT license  {{{\n    Permission is hereby granted, free of charge, to any person obtaining\n    a copy of this software and associated documentation files (the\n    \"Software\"), to deal in the Software without restriction, including\n    without limitation the rights to use, copy, modify, merge, publish,\n    distribute, sublicense, and/or sell copies of the Software, and to\n    permit persons to whom the Software is furnished to do so, subject to\n    the following conditions:\n    The above copyright notice and this permission notice shall be included\n    in all copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n}}}\n\nCONTENTS\t\t\t\t\t*neocomplcache-contents*\n\nIntroduction\t\t|neocomplcache-introduction|\nInstall\t\t\t|neocomplcache-install|\nInterface\t\t|neocomplcache-interface|\n  Commands\t\t  |neocomplcache-commands|\n  Variables\t\t  |neocomplcache-variables|\n  Key mappings\t\t  |neocomplcache-key-mappings|\n  Functions\t\t  |neocomplcache-functions|\nExamples\t\t|neocomplcache-examples|\nSources\t\t\t|neocomplcache-sources|\n  User sources\t\t  |neocomplcache-user-sources|\nCreate source\t\t|neocomplcache-create-source|\n  Source attributes       |neocomplcache-source-attributes|\n  Candidate attributes   |neocomplcache-candidate-attributes|\nCreate filter\t\t|neocomplcache-create-filter|\n  Filter attributes       |neocomplcache-filter-attributes|\nFILTERS\t\t\t|neocomplcache-filters|\nFAQ\t\t\t|neocomplcache-faq|\n\n==============================================================================\nINTRODUCTION\t\t\t\t\t*neocomplcache-introduction*\n\n*neocomplcache* is the abbreviation of \"neo-completion with cache\". It\nprovides keyword completion system by maintaining a cache of keywords in the\ncurrent buffer. neocomplcache could be customized easily and has a lot more\nfeatures than the Vim's standard completion feature.\nNote: neocomplcache may consume more memory than other plugins.\n\nNote: If you use Vim 7.3.885 or above with if\\_lua feature, you should use\nneocomplete.  It is faster than neocomplcache.\n\nhttps://github.com/Shougo/neocomplete.vim\n\n==============================================================================\nINSTALL\t\t\t\t\t\t*neocomplcache-install*\n\n1: Extract the file and put files in your Vim directory\n   (usually ~/.vim/ or Program Files/Vim/vimfiles on Windows).\n2: Execute |:NeoComplCacheEnable| command or set\nlet g:neocomplcache_enable_at_startup = 1\nin your .vimrc.\n\n\t\t\t\t\t\t*neocomplcache-asynchronous*\n*neocomplcache-RECOMMENDATION*\nWith neocomplcache Ver.6.0 or later, when you have |vimproc| installed,\nneocomplcache creates caches asynchronously.\n\nvimproc is distributed at: http://github.com/Shougo/vimproc\n\nTo use vimproc, you must compile it.  Refer to the vimproc documentation.\n\nNote: Snippets feature (snippets_complete source), which was originally\n      built-in, left since neocomplcache ver.7.\n      If you were using it, please install neosnippet source manually.\n\nhttps://github.com/Shougo/neosnippet\n\n==============================================================================\nINTERFACE\t\t\t\t\t*neocomplcache-interface*\n\n------------------------------------------------------------------------------\nCOMMANDS \t\t\t\t\t*neocomplcache-commands*\n\n:NeoComplCacheEnable\t\t\t\t*:NeoComplCacheEnable*\n\t\tValidate neocomplcache and initialize it.\n\t\tWarning: Conventional cache disappears.\n\n:NeoComplCacheDisable\t\t\t\t*:NeoComplCacheDisable*\n\t\tInvalidate neocomplcache and clean it up.\n\n:NeoComplCacheToggle\t\t\t\t*:NeoComplCacheToggle*\n\t\tChange a lock state of neocomplcache.\n\t\tWhile neocomplcache is in locking, you cannot use automatic\n\t\tcompletions.\n\t\tNote: This command enables neocomplcache when neocomplcache is\n\t\talready disabled.\n\n:Neco [{anim-number}] \t\t\t\t*:Neco*\n\t\tSecret.\n\n:NeoComplCacheLock\t\t\t\t*:NeoComplCacheLock*\n\t\tLock neocomplcache.\n\t\tWhile neocomplcache is in locking, you cannot use automatic\n\t\tcompletions but can use manual completions.\n\t\tThe lock status is local to each buffer.\n\t\tNote: This command is disabled when neocomplcache is disabled.\n\n:NeoComplCacheUnlock\t\t\t\t*:NeoComplCacheUnlock*\n\t\tUnlock neocomplcache.\n\t\tNote: This command is disabled when neocomplcache is disabled.\n\n:NeoComplCacheLockSource {source-name}\t\t*:NeoComplCacheLockSource*\n\t\tDisable {source-name} source completion.  Disable state is\n\t\tlocal to each buffer.\n\n:NeoComplCacheUnlockSource {source-name}\t*:NeoComplCacheUnlockSource*\n\t\tUnlock {source-name} source completion.\n\n\t\t\t\t\t*:NeoComplCacheAutoCompletionLength*\n:NeoComplCacheAutoCompletionLength {length}\n\t\tChange start length of automatic completion to {length}.\n\t\tNote: This length value is local to each buffer.\n\n:NeoComplCacheCachingBuffer [bufname]\t\t*:NeoComplCacheCachingBuffer*\n\t\tCache [bufname] buffer.\n\t\tWarning: it may take time considerably for the big buffer.\n\t\tThis selects current buffer when you omitted [bufname].  When\n\t\t[bufname] buffer is not cached, this performs only simple\n\t\tcaching.  If [bufname] is not loaded, neocomplcache will open\n\t\t[bufname] automatically.\n\n:NeoComplCacheCachingSyntax [filetype]\t\t*:NeoComplCacheCachingSyntax*\n\t\tCaches [filetype] syntax file.\n\t\tSelects current buffer filetype when [filetype] is omitted.\n\n:NeoComplCacheCachingDictionary [filetype]\n\t\t\t\t\t*:NeoComplCacheCachingDictionary*\n\t\tCaches [filetype] dictionary file.\n\t\tSelects current buffer filetype when [filetype] is omitted.\n\n:NeoComplCacheCachingTags\t\t*:NeoComplCacheCachingTags*\n\t\tCaches tags file in current buffer.\n\n:NeoComplCacheCachingInclude [bufname]\t\t*:NeoComplCacheCachingInclude*\n\t\tCaches [bufname] include file.\n\t\tSelects current buffer name when [bufname] is omitted.\n\n:NeoComplCachePrintSource [bufname]\t\t*:NeoComplCachePrintSource*\n\t\tOutputs [bufname] buffer's cache in current buffer.\n\t\tThis command is for debugging.\n\t\tSelects current buffer when [bufname] is omitted.\n\t\tFor a command for debugging, a user will not need to use it\n\t\tmainly.\n\n:NeoComplCacheOutputKeyword [bufname]\t\t*:NeoComplCacheOutputKeyword*\n\t\tWrite the keyword which cached [bufname] buffer in current\n\t\tbuffer.  Select current buffer when [bufname] omitted.  When\n\t\tyou make a dictionary file by yourself, it may be\n\t\tconvenient.\n\n\n:NeoComplCacheSetFileType [filetype]\t\t*:NeoComplCacheSetFileType*\n\t\tChange filetype to [filetype] in current buffer.\n\t\tThis filetype is only used by neocomplcache.\n\t\tNote: You can get current filetype by\n\t\t|neocomplcache#get_context_filetype()|\n\n:NeoComplCacheClean \t\t\t\t*:NeoComplCacheClean*\n\t\tClean cache files in |g:neocomplcache_temporary_dir|.\n\n------------------------------------------------------------------------------\nVARIABLES \t\t\t\t\t*neocomplcache-variables*\n\n\t\t\t\t\t*g:neocomplcache_enable_at_startup*\ng:neocomplcache_enable_at_startup\n\t\tNeocomplcache gets started automatically when Vim starts if\n\t\tthis value is 1.\n\n\t\tWith the default value 0, you cannot use neocomplcache\n\t\tunless you start it manually.\n\n\t\tNote: This option has to be set in .vimrc or _vimrc.  NOT IN\n\t\t.gvimrc nor _gvimrc!\n\ng:neocomplcache_max_list\t\t\t*g:neocomplcache_max_list*\n\t\tThis variable controls the number of candidates displayed in a\n\t\tpop-up menu.  Candidates more than this value won't be show\n\t\tup.\n\n\t\tDefault value is 100.\n\n\t\t\t\t\t*g:neocomplcache_max_keyword_width*\ng:neocomplcache_max_keyword_width\n\t\tThis variable controls the indication width of a candidate\n\t\tdisplayed in a pop-up menu.  The case beyond this value is\n\t\tcut down properly.\n\n\t\tDefault value is 80.\n\n\t\t\t\t\t*g:neocomplcache_max_menu_width*\ng:neocomplcache_max_menu_width\n\t\tThis variable controls the indication width of a menu\n\t\tdisplayed in a pop-up menu.  The case beyond this value is cut\n\t\tdown.\n\n\t\tDefault value is 15.\n\n\t\t\t\t*g:neocomplcache_auto_completion_start_length*\ng:neocomplcache_auto_completion_start_length\n\t\tThis variable controls the number of the input completion\n\t\tat the time of key input automatically.\n\t\tNote: |g:neocomplcache_auto_completion_start_length| is used\n\t\tfor \"keyword\" kind source only. Please refer to\n\t\t\t|neocomplcache-source-attribute-min_pattern_length|.\n\n\t\tDefault value is 2.\n\n\t\t\t*g:neocomplcache_manual_completion_start_length*\ng:neocomplcache_manual_completion_start_length\n\t\tThis variable controls the number of the input completion\n\t\tat the time of manual completion.  It is convenient when you\n\t\treduce this value, but may get heavy when you deleted a\n\t\tletter in <C-h> or <BS> at popup indication time.\n\n\t\tDefault value is 0.\n\n\t\t\t\t\t*g:neocomplcache_min_keyword_length*\ng:neocomplcache_min_keyword_length\n\t\tIn a buffer or dictionary files, this variable controls\n\t\tlength of keyword becoming the object of the completion at\n\t\tthe minimum.\n\n\t\tDefault value is 4.\n\n\t\t\t\t\t*g:neocomplcache_min_syntax_length*\ng:neocomplcache_min_syntax_length\n\t\tIn syntax files, this variable controls length of keyword\n\t\tbecoming the object of the completion at the minimum.\n\n\t\tDefault value is 4.\n\n\t\t\t\t\t*g:neocomplcache_enable_ignore_case*\ng:neocomplcache_enable_ignore_case\n\t\tWhen neocomplcache looks for candidate completion, this\n\t\tvariable controls whether neocomplcache ignores the upper-\n\t\tand lowercase.  If it is 1, neocomplcache ignores case.\n\n\t\tDefault value is 'ignorecase'.\n\n\t\t\t\t\t*g:neocomplcache_enable_smart_case*\ng:neocomplcache_enable_smart_case\n\t\tWhen a capital letter is included in input, neocomplcache does\n\t\tnot ignore the upper- and lowercase.\n\n\t\tDefault value is 'infercase'.\n\n\t\t\t\t*g:neocomplcache_disable_auto_complete*\ng:neocomplcache_disable_auto_complete\n\t\tThis variable controls whether you invalidate automatic\n\t\tcompletion.  If it is 1, automatic completion becomes\n\t\tinvalid, but can use the manual completion by <C-x><C-u>.\n\n\t\tDefault value is 0.\n\n\t\t\t\t\t*g:neocomplcache_enable_wildcard*\ng:neocomplcache_enable_wildcard\n\t\tThis variable controls whether neocomplcache accept wild\n\t\tcard character '*' for input-saving.\n\t\tNote: You can customize the wildcard character by\n\t\t|g:neocomplcache_wildcard_characters|.\n\n\t\tDefault value is 1.\n\n\t\t\t\t\t*g:neocomplcache_enable_cursor_hold_i*\ng:neocomplcache_enable_cursor_hold_i\n\t\tThis variable controls whether neocomplcache use |CursorHoldI|\n\t\tevent when complete candidates.\n\t\tNote: You should not use this option if less than Vim 7.3.418.\n\t\tNote: This option must be set before call\n\t\t|:NeoComplCacheEnable|.\n\n\t\tDefault value is 0.\n\n\t\t\t\t\t*g:neocomplcache_cursor_hold_i_time*\ng:neocomplcache_cursor_hold_i_time\n\t\tIf g:neocomplcache_enable_cursor_hold_i is non-zero and in\n\t\tinsert mode, this value changes 'updatetime' option.\n\n\t\tDefault value is 300.\n\n\t\t\t\t*g:neocomplcache_enable_insert_char_pre*\ng:neocomplcache_enable_insert_char_pre\n\t\tThis variable controls whether neocomplcache use\n\t\t|InsertCharPre| event when complete candidates.\n\t\tNote: You should not use this option if less than Vim 7.3.461.\n\t\tNote: This option must be set before call\n\t\t|:NeoComplCacheEnable|.\n\t\tNote: This option is experimental.\n\n\t\tDefault value is 0.\n\n\t\t\t\t\t*g:neocomplcache_enable_auto_select*\ng:neocomplcache_enable_auto_select\n\t\tWhen neocomplcache displays candidates, this option controls\n\t\twhether neocomplcache selects the first candidate\n\t\tautomatically.  If you enable this option, neocomplcache's\n\t\tcompletion behavior is like |AutoComplPop|.\n\n\t\tDefault value is 0.\n\n\t\t\t\t*g:neocomplcache_enable_auto_delimiter*\ng:neocomplcache_enable_auto_delimiter\n\t\tThis option controls whether neocomplcache insert delimiter\n\t\tautomatically.  For example, /(filename) or #(Vim script).\n\n\t\tDefault value is 0.\n\n\t\t\t\t*g:neocomplcache_enable_camel_case_completion*\ng:neocomplcache_enable_camel_case_completion\n\t\tWhen you input a capital letter, this variable controls\n\t\twhether neocomplcache takes an ambiguous searching as an end\n\t\tof the words in it.  For example, neocomplcache comes to match\n\t\tit with \"ArgumentsException\" when you input it with \"AE\".\n\n\t\tNote: This feature may be too slow.\n\n\t\tDefault value is 0.\n\n\t\t\t\t*g:neocomplcache_enable_underbar_completion*\ng:neocomplcache_enable_underbar_completion\n\t\tWhen you input _, this variable controls whether\n\t\tneocomplcache takes an ambiguous searching as an end of the\n\t\twords in it.  For example, neocomplcache comes to match it\n\t\twith \"public_html\" when you input it with \"p_h\".\n\n\t\tNote: This feature may be too slow.\n\n\t\tDefault value is 0.\n\n\t\t\t\t*g:neocomplcache_enable_fuzzy_completion*\ng:neocomplcache_enable_fuzzy_completion\n\t\tWhen you input one character, this variable controls whether\n\t\tneocomplcache takes an ambiguous searching as an end of the\n\t\twords in it.  For example, neocomplcache comes to match it with\n\t\t\"public_html\" or \"PublicHtml\" when you input it with \"puh\".\n\n\t\tNote: If you enable it,\n\t\t|g:neocomplcache_enable_underbar_completion| and\n\t\t|g:neocomplcache_enable_camel_case_completion| is disabled.\n\n\t\tNote: If |g:neocomplcache_fuzzy_completion_start_length| is 3,\n\t\t\"ph\" does not complete \"public_html\".\n\n\t\tNote: This match is too heavy.  So, it is enabled when your\n\t\tinput length is longer than or equal to\n\t\t|g:neocomplcache_fuzzy_completion_start_length| and less than\n\t\t20 characters.\n\n\t\tDefault value is 0.\n\n\t\t\t*g:neocomplcache_fuzzy_completion_start_length*\ng:neocomplcache_fuzzy_completion_start_length\n\t\tIt controls length of fuzzy completion start length.  For\n\t\texample, if this variable is \"3\", third and after input\n\t\tcharacters are fuzzy matched.  But first and second input\n\t\tcharacters are not fuzzy matched.\n\t\tNote: If this variable changed, completion speed may be too\n\t\tslow.\n\n\t\tDefault value is 3.\n\n\t\t\t\t*g:neocomplcache_enable_caching_message*\ng:neocomplcache_enable_caching_message\n\t\tWhen make cache, this variable controls whether neocomplcache\n\t\tdisplays the message in Command-line.\n\n\t\tDefault value is 1.\n\n\t\t\t\t*g:neocomplcache_caching_limit_file_size*\ng:neocomplcache_caching_limit_file_size\n\t\tThis variable set file size to make a cache of a file.  If\n\t\topen file is bigger than this size, neocomplcache does not\n\t\tmake a cache.\n\n\t\tDefault value is 500000.\n\n\t\t\t*g:neocomplcache_disable_caching_file_path_pattern*\ng:neocomplcache_disable_caching_file_path_pattern\n\t\tThis variable set a pattern of the buffer file path.  If\n\t\tmatched it, neocomplcache does not save a cache of the buffer.\n\t\tWhen it is an empty character string, neocomplcache will\n\t\tignore.\n\n\t\tDefault value is ''.\n\n\t\t\t\t*g:neocomplcache_lock_buffer_name_pattern*\ng:neocomplcache_lock_buffer_name_pattern\n\t\tThis variable set a pattern of the buffer name.  If matched it,\n\t\tneocomplcache does not complete automatically.  When it is an\n\t\tempty character string, neocomplcache will ignore.\n\n\t\tDefault value is ''.\n\ng:neocomplcache_enable_prefetch\t\t*g:neocomplcache_enable_prefetch*\n\t\tThis variable controls whether neocomplcache prefetches.  If\n\t\tthis variable is non-zero, neocomplcache does not flick in\n\t\tauto completion.\n\n\t\tNote: This variable has a side effect.  Partial function (ex:\n\t\t|complete_check()|) is disabled in completefunc.\n\t\tNote: If this variable is 0, an input problem may occur in\n\t\tusing uim-skk or other IMEs on GVim.\n\n\t\tDefault value is 0 (above or equal to 7.3.519.)\n\t\tDefault value is 1 (|+xim| and GUI version.)\n\ng:neocomplcache_lock_iminsert\t\t*g:neocomplcache_lock_iminsert*\n\t\tIf this variable is non-zero, neocomplcache locks when\n\t\t'iminsert' is non-zero.\n\n\t\tDefault value is 0.\n\ng:neocomplcache_temporary_dir\t\t*g:neocomplcache_temporary_dir*\n\t\tThis variable appoints the directory that neocomplcache\n\t\tbegins to write a file at one time.  When there is not the\n\t\tdirectory which appointed here, it is made.  For example,\n\t\tbuffer_complete.vim stores cache of the keyword in this\n\t\t'buffer_cache' sub directory.\n\n\t\tDefault value is \"$XDG_CACHE_HOME/neocomplcache\" or\n\t\texpand(\"~/.cache/neocomplcache\"); the absolute path of it.\n\ng:neocomplcache_keyword_patterns\n\t\t\t\t\t*g:neocomplcache_keyword_patterns*\n\t\tThis dictionary records keyword patterns to completion.\n\t\tThis is appointed in regular expression every file type.\n\t\tIf the key is \"_\" or \"default\", it is used for default\n\t\tpattern.\n\n\t\tBecause it is complicated, refer to\n\t\tneocomplcache#init#_variables() in\n\t\tautoload/neocomplcache/init.vim for the initial value.\n>\n\t\t\" Examples:\n\t\tif !exists('g:neocomplcache_keyword_patterns')\n\t\t  let g:neocomplcache_keyword_patterns = {}\n\t\tendif\n\t\tlet g:neocomplcache_keyword_patterns._ = '\\h\\w*'\n<\n\t\t\t\t*g:neocomplcache_next_keyword_patterns*\ng:neocomplcache_next_keyword_patterns\n\t\tThis dictionary records regular expression to recognize a\n\t\tkeyword pattern of the next than a cursor.  The form is the\n\t\tsame as |g:neocomplcache_keyword_patterns|.\n\n\t\tBecause it is complicated, refer to\n\t\tneocomplcache#init#_variables() in\n\t\tautoload/neocomplcache/init.vim for the initial value.\n\ng:neocomplcache_omni_patterns\t\t*g:neocomplcache_omni_patterns*\n\t\tThis dictionary records keyword patterns used in\n\t\t|omni_complete|.  This is appointed in regular expression\n\t\tevery file type or 'omnifunc' name.  If this pattern is not\n\t\tdefined or empty pattern, neocomplcache does not call\n\t\t'omnifunc'.\n\t\tNote: ruby and php omnifunc are disabled, because they are too\n\t\tslow.\n\t\tNote: Partial omnifunc has problem when neocomplcache call(Ex:\n\t\trubycomplete, jedi.vim, cocoa.vim and clang_complete).  You should\n\t\t|g:neocomplcache_force_omni_patterns| instead.\n\n\t\tBecause it is complicated, refer to s:source.initialize()\n\t\tautoload/neocomplcache/sources/omni_complete.vim for the\n\t\tinitial value.\n>\n\t\t\" Examples:\n\t\tif !exists('g:neocomplcache_omni_patterns')\n\t\tlet g:neocomplcache_omni_patterns = {}\n\t\tendif\n\t\tlet g:neocomplcache_omni_patterns.php = '[^. \\t]->\\h\\w*\\|\\h\\w*::'\n\t\tlet g:neocomplcache_omni_patterns.c = '[^.[:digit:] *\\t]\\%(\\.\\|->\\)'\n\t\tlet g:neocomplcache_omni_patterns.cpp = '[^.[:digit:] *\\t]\\%(\\.\\|->\\)\\|\\h\\w*::'\n<\n\t\t\t\t\t*g:neocomplcache_force_omni_patterns*\ng:neocomplcache_force_omni_patterns\n\t\tThis dictionary records keyword patterns to Omni completion.\n\t\tThis is appointed in regular expression every file type.\n\t\tIf this pattern is not defined or empty pattern, neocomplcache\n\t\tdoes not call 'omnifunc'.\n\t\tNote: If it is a set, neocomplcache will call 'omnifunc' or\n\t\t|g:neocomplcache_omni_functions| directly.  So almost\n\t\tneocomplcache features are disabled.  But all Omni completion\n\t\tworks instead of |g:neocomplcache_omni_patterns|.\n\t\tNote: This feature may change 'omnifunc' value.\n>\n\t\tif !exists('g:neocomplcache_force_omni_patterns')\n\t\t  let g:neocomplcache_force_omni_patterns = {}\n\t\tendif\n\t\tlet g:neocomplcache_force_omni_patterns.ruby = '[^. *\\t]\\.\\w*\\|\\h\\w*::'\n<\n\t\tBecause it is complicated, refer to\n\t\tneocomplcache#init#_variables() in\n\t\tautoload/neocomplcache/init.vim for the initial value.\n\n\t\t\t\t\t*g:neocomplcache_tags_filter_patterns*\ng:neocomplcache_tags_filter_patterns\n\t\tThis dictionary records a pattern to filter a candidate in\n\t\tthe tag completion.  For example, it can exclude a candidate\n\t\tbeginning in _ in file type of C/C++.\n\n\t\tBecause it is complicated, refer to\n\t\tneocomplcache#init#_variables() in\n\t\tautoload/neocomplcache/init.vim for the initial value.\n\n\t\t\t\t*g:neocomplcache_tags_caching_limit_file_size*\ng:neocomplcache_tags_caching_limit_file_size\n\t\tThis variable set file size to make a cache of a file in\n\t\ttags_complete source.  If open file is bigger than this size,\n\t\tneocomplcache does not make a tags cache.\n\n\t\tDefault value is 500000.\n\n\t\t\t\t*g:neocomplcache_same_filetype_lists*\ng:neocomplcache_same_filetype_lists\n\t\tIt is a dictionary to connect file type mutually.  It is\n\t\teffective at time to let you refer to c and cpp mutually.\n\t\tThe value are comma-separated filetypes.\n\t\tIf the value contains \"_\", neocomplcache completes from all\n\t\tbuffers.  If the key is \"_\", the value will be used for default\n\t\tsame filetypes.\n\t\tNote: neocomplcache completes from same filetype buffers in\n\t\tdefault.\n>\n\t\tif !exists('g:neocomplcache_same_filetype_lists')\n\t\t  let g:neocomplcache_same_filetype_lists = {}\n\t\tendif\n\t\t\" In c buffers, completes from cpp and d buffers.\n\t\tlet g:neocomplcache_same_filetype_lists.c = 'cpp,d'\n\t\t\" In cpp buffers, completes from c buffers.\n\t\tlet g:neocomplcache_same_filetype_lists.cpp = 'c'\n\t\t\" In gitconfig buffers, completes from all buffers.\n\t\tlet g:neocomplcache_same_filetype_lists.gitconfig = '_'\n\t\t\" In default, completes from all buffers.\n\t\tlet g:neocomplcache_same_filetype_lists._ = '_'\n<\n\t\tBecause it is complicated, refer to\n\t\tneocomplcache#init#_variables() in\n\t\tautoload/neocomplcache/init.vim for the initial value.\n\t\tNote: To disable neocomplcache initialization, you must use\n\t\t|neocomplcache#disable_default_dictionary()|.\n\n\t\t\t\t*g:neocomplcache_dictionary_filetype_lists*\ng:neocomplcache_dictionary_filetype_lists\n\t\tIt is a dictionary to connect a dictionary file with file\n\t\ttype.  The dictionary's key is filetype and comma-separated\n\t\tmultiple value is a path to a dictionary file.  If this\n\t\tvariable is empty, neocomplcache uses 'dictionary' option.\n\t\tWhen you set \"text\" key, you will appoint dictionary files in\n\t\ttext mode.\n\t\tNote: Global 'dictionary' file is not loaded automatically.\n\n\t\tDefault value is {}.\n\n\t\t\t\t\t*g:neocomplcache_dictionary_patterns*\ng:neocomplcache_dictionary_patterns\n\t\tIt is a dictionary to dictionary keyword patterns.  The\n\t\tdictionary's key is filetype and value is keyword pattern.\n\t\tIf this variable is empty, neocomplcache uses\n\t\t|g:neocomplcache_keyword_patterns| option.\n\n\t\tDefault value is {}.\n\n\t\t\t\t*g:neocomplcache_context_filetype_lists*\ng:neocomplcache_context_filetype_lists\n\t\tIt is a dictionary to define context filetypes.\n\t\tThe item is a list of dictionaries.\n\t\t\t\t*g:neocomplcache_filetype_include_lists*\n\t\tNote: g:neocomplcache_filetype_include_lists is deprecated\n\t\tname.\n\n\t\tThe keys and values are below.\n\t\t\"filetype\" : includes filetype name.\n\t\t\"start\" : filetype start pattern.\n\t\t\"end\" : filetype end pattern.  You can use \\1 to refer start's\n\t\t\tmatched pattern.\n>\n\t\t\" Examples:\n\t\tif !exists('g:neocomplcache_context_filetype_lists')\n\t\tlet g:neocomplcache_context_filetype_lists = {}\n\t\tendif\n\t\tlet g:neocomplcache_context_filetype_lists.perl6 =\n\t\t\\ [{'filetype' : 'pir', 'start' : 'Q:PIR\\s*{', 'end' : '}'}]\n\t\tlet g:neocomplcache_context_filetype_lists.vim =\n\t\t\\ [{'filetype' : 'python', 'start' : '^\\s*python <<\\s*\\(\\h\\w*\\)', 'end' : '^\\1'}]\n<\n\t\tBecause it is complicated, refer to\n\t\tneocomplcache#init#_variables() in\n\t\tautoload/neocomplcache/init.vim for the initial value.\n\n\t\t\t\t\t*g:neocomplcache_text_mode_filetypes*\ng:neocomplcache_text_mode_filetypes\n\t\tIt is a dictionary to define text mode filetypes.  The\n\t\tdictionary's key is filetype and value is number.  If the\n\t\tvalue is non-zero, this filetype is text mode.  In text mode,\n\t\tneocomplcache supports word conversion to write English.\n\n\t\tFor example, if you input \"Fo\", neocomplcache will convert\n\t\tcandidate \"foo\" to \"Foo\".  If you input \"foo\", neocomplcache\n\t\twill convert candidate \"FooBar\" to \"foobar\".  If you input\n\t\t\"FO\", neocomplcache will convert candidate \"foo\" to \"FOO\".\n\t\tNote: Text mode conversion is only used for \"foobar\" or\n\t\t\"Foobar\" or \"FOOBAR\" words.  Not \"fooBar\" or \"FooBar\".\n\n\t\tBecause it is complicated, refer to\n\t\tneocomplcache#init#_variables() in\n\t\tautoload/neocomplcache/init.vim for the initial value.\n\ng:neocomplcache_ctags_program\t\t*g:neocomplcache_ctags_program*\n\t\tIt is the path to the ctags command.  If this command is not\n\t\tinstalled, include_complete is disabled.\n\n\t\tDefault value is \"ctags\".\n\ng:neocomplcache_ctags_arguments_list\n\t\t\t\t\t*g:neocomplcache_ctags_arguments_list*\n\t\tIt is the dictionary of the character string to set a value\n\t\tto give as an argument of the commands when buffer_complete\n\t\tand include_complete use a ctags command.  The dictionary's\n\t\tkey is filetype.  If the key is \"_\", it will be used for\n\t\tdefault.\n\n\t\tBecause it is complicated, refer to\n\t\tneocomplcache#init#_variables() in\n\t\tautoload/neocomplcache/init.vim for the initial value.\n\ng:neocomplcache_include_paths\t\t*g:neocomplcache_include_paths*\n\t\tIt is the variable to enumerate path of the include file\n\t\tevery file type.  When there is not it, 'path' is used.\n\t\tRefer to 'path' for the description form.  It is the\n\t\tdictionary of the character string that assumed file type a\n\t\tkey.\n\n\t\tBecause it is complicated, refer to s:source.initialize() in\n\t\tautoload/neocomplcache/sources/include_complete.vim for the\n\t\tinitial value.\n\ng:neocomplcache_include_exprs\t\t\t*g:neocomplcache_include_exprs*\n\t\tIt is the expression string of the line analysis to perform\n\t\tto acquire an include file name.  When there is not it,\n\t\t'includeexpr' is used.  Refer to 'includeexpr' for the\n\t\tdescription form.  It is the dictionary of the character\n\t\tstring that assumed file type a key.\n\n\t\tBecause it is complicated, refer to s:source.initialize() in\n\t\tautoload/neocomplcache/sources/include_complete.vim for the\n\t\tinitial value.\n\ng:neocomplcache_include_patterns\t*g:neocomplcache_include_patterns*\n\t\tThis variable appoints the pattern of the include command.\n\t\tWhen there is not it, 'include' is used.  Refer to 'include'\n\t\tfor the description form.  It is the dictionary of the\n\t\tcharacter string that assumed file type a key.\n\n\t\tBecause it is complicated, refer to s:source.initialize() in\n\t\tautoload/neocomplcache/sources/include_complete.vim for the\n\t\tinitial value.\n\n\t\t\t\t\t*g:neocomplcache_include_functions*\ng:neocomplcache_include_functions\n\t\tThis variable appoints the function name of the include\n\t\tcommand.  When there is not it, ignored.  It is the dictionary\n\t\tof the function name string that assumed file type a key.\n\n\t\tThe function args are {lines} and {path}.\n\t\t{lines} is the list of buffer lines.\n\t\t{path} is the include path.\n\t\tThe return value is the list of include files.\n\n\t\tBecause it is complicated, refer to s:source.initialize() in\n\t\tautoload/neocomplcache/sources/include_complete.vim for the\n\t\tinitial value.\n\n\t\t\t\t*g:neocomplcache_include_max_processes*\ng:neocomplcache_include_max_processes\n\t\tThis variable appoints the max number of include processes.\n\t\tWhen this variable is 0, include process will be disabled.\n\n\t\tDefault value is 20.\n\n\t\t\t\t*g:neocomplcache_filename_include_exprs*\ng:neocomplcache_filename_include_exprs\n\t\tIt is the expression string of the line analysis to perform\n\t\tto substitute an include file name.  When there is not it,\n\t\tignored.  Refer to 'includeexpr' for the\n\t\tdescription form.  It is the dictionary of the character\n\t\tstring that assumed file type a key.\n\n\t\tExample: Perl\n>\n\t\tlet g:neocomplcache_filename_include_exprs.perl =\n\t\t\\ 'fnamemodify(substitute(v:fname, \"/\", \"::\", \"g\"), \":r\")'\n<\n\n\t\tBecause it is complicated, refer to s:source.initialize() in\n\t\tautoload/neocomplcache/sources/filename_complete.vim for the\n\t\tinitial value.\n\n\t\t\t\t*g:neocomplcache_filename_include_exts*\ng:neocomplcache_filename_include_exts\n\t\tIt is the list of include file name extensions.  When there\n\t\tis not it, all file name is used.  It is the dictionary of\n\t\tthe list that assumed file type a key.\n\n\t\tExample: C++\n>\n\t\tlet g:neocomplcache_filename_include_exts.cpp =\n\t\t\\ ['', 'h', 'hpp', 'hxx']\n<\n\t\tBecause it is complicated, refer to s:source.initialize() in\n\t\tautoload/neocomplcache/sources/filename_complete.vim for the\n\t\tinitial value.\n\n\t\t\t\t*g:neocomplcache_member_prefix_patterns*\ng:neocomplcache_member_prefix_patterns\n\t\tThis variable appoints a prefix pattern to complete a member\n\t\tin buffer_complete.\n\t\tThis is appointed in regular expression every file type.\n\t\tIf filetype key is not set, disable member completion.\n\n\t\tBecause it is complicated, refer in\n\t\tautoload/neocomplcache/sources/buffer_complete.vim for the\n\t\tinitial value.\n\ng:neocomplcache_member_patterns\t\t*g:neocomplcache_member_patterns*\n\t\tThis variable appoints a keyword pattern to complete a member\n\t\tin buffer_complete.\n\t\tThis is appointed in regular expression every file type.\n\t\tIf filetype key is not set, use filetype \"default\" setting.\n\n\t\tBecause it is complicated, refer in\n\t\tautoload/neocomplcache/sources/buffer_complete.vim for the\n\t\tinitial value.\n\n\t\t\t\t\t*g:neocomplcache_delimiter_patterns*\ng:neocomplcache_delimiter_patterns\n\t\tThis variable appoints a delimiter pattern to smart complete a\n\t\tfunction.  This is appointed in regular expression's string\n\t\tlist every file type.\n>\n\t\t\" Examples:\n\t\tif !exists('g:neocomplcache_delimiter_patterns')\n\t\tlet g:neocomplcache_delimiter_patterns= {}\n\t\tendif\n\t\tlet g:neocomplcache_delimiter_patterns.vim = ['#']\n\t\tlet g:neocomplcache_delimiter_patterns.cpp = ['::']\n<\n\t\tBecause it is complicated, refer to\n\t\tneocomplcache#init#_variables() in\n\t\tautoload/neocomplcache/init.vim for the initial value.\n\ng:neocomplcache_omni_functions\t\t*g:neocomplcache_omni_functions*\n\t\tThis dictionary which appoints |omni_complete| call functions.\n\t\tThe key is |&filetype|.  The value is omnifunc String or List\n\t\tof omnifunc String.  If\n\t\tg:neocomplcache_omni_function_list[|&filetype|] is undefined,\n\t\t|omni_complete| calls |omnifunc|.\n\t\tIf the key is \"_\", used for all filetypes.\n\n\t\tDefault value is {}.\n\n\t\t\t\t\t*g:neocomplcache_vim_completefuncs*\ng:neocomplcache_vim_completefuncs\n\t\tThis dictionary which appoints |vim_complete| call function\n\t\twhen completes custom and customlist command.  The key is\n\t\tcommand name.  The value is function name.\n\n\t\tDefault value is {}.\n>\n\t\t\" Examples:\n\t\tif !exists('g:neocomplcache_vim_completefuncs')\n\t\t  let g:neocomplcache_vim_completefuncs = {}\n\t\tendif\n\t\tlet g:neocomplcache_vim_completefuncs.Ref = 'ref#complete'\n<\n\t\t\t\t\t*g:neocomplcache_sources_list*\ng:neocomplcache_sources_list\n\t\tIt is a dictionary to decide use source names.  The key is\n\t\tfiletype and the value is source names list.  If the key is\n\t\t\"_\", the value will be used for default filetypes.  For\n\t\texample, you can disable some sources in C++ filetype.\n\t\tIf the value is \"_\", it will load all sources.\n\t\tDefault value is {}.\n>\n\t\t\" Examples:\n\t\tif !exists('g:neocomplcache_sources_list')\n\t\t  let g:neocomplcache_sources_list = {}\n\t\tendif\n\t\tlet g:neocomplcache_sources_list._ = ['buffer_complete']\n\t\tlet g:neocomplcache_sources_list.cpp =\n\t\t\\ ['buffer_complete', 'include_complete']\n<\n\t\t\t\t\t*b:neocomplcache_sources_list*\nb:neocomplcache_sources_list\n\t\tIt is a list to decide use source names in buffer local.\n>\n\t\t\" Examples:\n\t\t\" In cmdwin, only use vim_complete source.\n\t\tautocmd CmdwinEnter * let b:neocomplcache_sources_list = ['vim_complete']\n<\n\t\t\t\t*g:neocomplcache_disabled_sources_list*\ng:neocomplcache_disabled_sources_list\n\t\tIt is a dictionary to decide disabled source names.  The key is\n\t\tfiletype and the value is source names list.  If the key is\n\t\t\"_\", the value will be used for default filetypes.\n\t\tIf the value is \"_\", it will load all sources.\n\t\tDefault value is {}.\n>\n\t\t\" Examples:\n\t\tif !exists('g:neocomplcache_disabled_sources_list')\n\t\t  let g:neocomplcache_disabled_sources_list = {}\n\t\tendif\n\t\t\" Disable dictionary_complete in python filetype.\n\t\tlet g:neocomplcache_disabled_sources_list.python =\n\t\t\\ ['dictionary_complete']\n<\n\t\t\t\t\t*g:neocomplcache_source_disable*\n\t\tNote: g:neocomplcache_source_disable is deprecated variable.\n\t\tDefault value is {}.\n\n\t\t\t\t*g:neocomplcache_source_completion_length*\ng:neocomplcache_source_completion_length\n\t\tNote: This option is deprecated. You should use\n\t\t|neocomplcache#custom_source()| instead of it.\n>\n\t\tcall neocomplcache#custom_source(\n\t\t\t\t\\ 'buffer_complete', 'min_pattern_length', 3)\n<\n\ng:neocomplcache_source_rank\t\t\t*g:neocomplcache_source_rank*\n\t\tNote: This option is deprecated. You should use\n\t\t|neocomplcache#custom_source()| instead of it.\n>\n\t\t\" Examples:\n\t\tcall neocomplcache#custom_source(\n\t\t\t\t\\ 'buffer_complete', 'rank', 10)\n<\n\t\tThe default rank of each sources:\n\t\tfilename_complete : 3\n\t\tdictionary_complete : 4\n\t\tbuffer_complete : 5\n\t\tsyntax_complete : 4\n\t\tinclude_complete : 8\n\t\tsnippets_complete : 8\n\t\tvim_complete : 100\n\t\tomni_complete : 50\n\t\tother keyword sources : 5\n\t\tother manual sources : 10\n\t\tother manual sources with filetype : 100\n\n\t\t\t\t*g:neocomplcache_force_overwrite_completefunc*\ng:neocomplcache_force_overwrite_completefunc\n\t\tIf this variable is 1, neocomplcache forces overwrite\n\t\t'completefunc' option.  This variable is useful for other\n\t\tplugin overwrite 'completefunc'.  But other plugin's\n\t\t'completefunc' is disabled.\n\n\t\tDefault value is 0.\n\n\t\t\t\t\t*g:neocomplcache_release_cache_time*\ng:neocomplcache_release_cache_time\n\t\tThis variable defines time of automatic released cache by a\n\t\tsecond unit.\n\n\t\tDefault value is 900.\n\ng:neocomplcache_use_vimproc\t\t\t*g:neocomplcache_use_vimproc*\n\t\tThis variable is non 0, neocomplcache uses |vimproc|.\n\t\tNote: If this variable is non 0, neocomplcache will make cache\n\t\tasynchronously.\n\n\t\tDefault value is vimproc auto detection result.\n\n\t\t\t*g:neocomplcache_ignore_composite_filetype_lists*\ng:neocomplcache_ignore_composite_filetype_lists\n\t\tIt is a dictionary to ignore composite file type.\n\t\tThe dictionary's key is composite filetype and value is\n\t\tfiletype.\n>\n\t\t\" Examples:\n\t\tlet g:neocomplcache_ignore_composite_filetype_lists = {\n\t\t\t\\ 'ruby.spec' : 'ruby'\n\t\t\t\\ }\n<\n\t\tIf you open filetype like |ruby.spec|, completion is\n\t\tintended for |ruby| and |spec|.\n\t\tBut if you only want to complete |ruby| filetype,\n\t\tyou can set this variable to ignore |spec|.\n\n\t\tDefault value is {}.\n\n\t\t\t\t\t*g:neocomplcache_wildcard_characters*\ng:neocomplcache_wildcard_characters\n\t\tIt is a dictionary to define wildcard characters.\n\t\tYou can change default wildcard character \"*\" to other\n\t\tcharacters.\n\t\tThe dictionary's key is filetype and the value is a wildcard\n\t\tcharacter.  If the key is \"_\", it is default wildcard\n\t\tcharacter.\n\t\tNote: The wildcard character must be 1 length character.\n>\n\t\t\" Examples:\n\t\tif !exists('g:neocomplcache_wildcard_characters')\n\t\t  let g:neocomplcache_wildcard_characters = {}\n\t\tendif\n\t\tlet g:neocomplcache_wildcard_characters._ = '-'\n<\n\t\tDefault value is { '_' : '*' }.\n\n\t\t\t\t*g:neocomplcache_skip_auto_completion_time*\ng:neocomplcache_skip_auto_completion_time\n\t\tIt is a string for skip auto completion.\n\t\tIf completion time is higher than it, neocomplcache will skip\n\t\tauto completion.\n\t\tIf it is \"\", the skip feature will be disabled.\n\n\t\tDefault value is \"0.3\".\n\t\t{only available when compiled with the |+reltime| feature}\n\n\t\t\t\t*g:neocomplcache_enable_auto_close_preview*\ng:neocomplcache_enable_auto_close_preview\n\t\tIf it is non-zero, neocomplcache will close preview window\n\t\tautomatically.\n\n\t\tDefault value is 1.\n\n------------------------------------------------------------------------------\nFUNCTIONS \t\t\t\t\t*neocomplcache-functions*\n\nneocomplcache#initialize()\t\t\t*neocomplcache#initialize()*\n\t\tInitialize neocomplcache and sources.\n\t\tNote: It enables neocomplcache.\n\t\tNote: You should call it in |VimEnter| autocmd.\n\t\tUser customization for neocomplcache must be set before\n\t\tinitialization of neocomplcache.\n\nneocomplcache#custom_source({source-name}, {option-name}, {value})\n\t\t\t\t\t\t*neocomplcache#custom_source()*\n\t\tSet {source-name} source specialized {option-name}\n\t\tto {value}. You may specify multiple sources with\n\t\tseparating \",\" in {source-name}.\n\t\tIf {source-name} is \"_\", sources default option will be\n\t\tchange.\n\t\t\n\t\tThese options below are available:\n\t\t|neocomplcache-source-attributes|\n\t\tNote: User customization for neocomplcache must be set before\n\t\tinitialization of neocomplcache.\n\t\t\n\t\t\t\t\t*neocomplcache#get_context_filetype()*\nneocomplcache#get_context_filetype()\n\t\tGet current context filetype of the cursor.  This is smarter\n\t\tthan |&filetype| about handling nested filetypes.\n\n\t\tFor example html filetype has javascript inside.  Say, you have\n\t\ta buffer which content is below with filetype is html.\n>\n\t\t<script type=\"text/javascript\">\n\t\t  var x = 1;\n\t\t</script>\n<\n\t\tAt the line 1 and 3, neocomplcache#get_context_filetype() is\n\t\t\"html\" and at the line 2 it's \"javascript\", whilst at any\n\t\tlines &filetype is \"html\".\n\n\t\t\t\t*neocomplcache#disable_default_dictionary()*\nneocomplcache#disable_default_dictionary({variable-name})\n\t\tDisable default {variable-name} dictionary initialization.\n\t\tNote: It must be called in .vimrc.\n>\n\tcall neocomplcache#disable_default_dictionary(\n\t      \\ 'g:neocomplcache_same_filetype_lists')\n<\n------------------------------------------------------------------------------\nKEY MAPPINGS \t\t\t\t\t*neocomplcache-key-mappings*\n\n\t\t\t\t*neocomplcache#start_manual_complete()*\nneocomplcache#start_manual_complete([{sources}])\n\t\tUse this function on inoremap <expr>.  The keymapping call the\n\t\tcompletion of neocomplcache.  When you rearrange the completion\n\t\tof the Vim standard, you use it.\n\t\tIf you give {sources} argument, neocomplcache call {sources}.\n\t\t{sources} is name of source or list of sources name.\n>\n\t\tinoremap <expr><Tab>  neocomplcache#start_manual_complete()\n<\n\t\t\t\t*neocomplcache#manual_filename_complete()*\n\t\t\t\t*neocomplcache#manual_omni_complete()*\n\t\tNote: These functions are obsolete.\n\n\t\t\t\t*neocomplcache#close_popup()*\nneocomplcache#close_popup()\n\t\tInset candidate and close popup menu for neocomplcache.\n>\n\t\tinoremap <expr><C-y>  neocomplcache#close_popup()\n<\n\t\t\t\t*neocomplcache#cancel_popup()*\nneocomplcache#cancel_popup()\n\t\tcancel completion menu for neocomplcache.\n>\n\t\tinoremap <expr><C-e>  neocomplcache#cancel_popup()\n<\n\t\t\t\t*neocomplcache#smart_close_popup()*\nneocomplcache#smart_close_popup()\n\t\tInset candidate and close popup menu for neocomplcache.\n\t\tUnlike|neocomplcache#close_popup()|, this function changes\n\t\tbehavior by|g:neocomplcache_enable_auto_select|smart.\n\t\tNote: This mapping is conflicted with |SuperTab| or |endwise|\n\t\tplugins.\n\n\t\t\t\t*neocomplcache#undo_completion()*\nneocomplcache#undo_completion()\n\t\tUse this function on inoremap <expr>.  Undo inputted\n\t\tcandidate.  Because there is not mechanism to cancel\n\t\tcandidate in Vim, it will be convenient when it inflects.\n>\n\t\tinoremap <expr><C-g>     neocomplcache#undo_completion()\n<\n\t\t\t\t*neocomplcache#complete_common_string()*\nneocomplcache#complete_common_string()\n\t\tUse this function on inoremap <expr>.  Complete common\n\t\tstring in candidates.  It will be convenient when candidates\n\t\thave long common string.\n>\n\t\tinoremap <expr><C-l>     neocomplcache#complete_common_string()\n<\n\t\t\t\t*<Plug>(neocomplcache_start_unite_complete)*\n<Plug>(neocomplcache_start_unite_complete)\n\t\tStart completion with |unite|.\n\t\tNote: Required unite.vim Latest ver.3.0 or above.\n\t\tNote: In unite interface, uses partial match instead of head\n\t\tmatch.\n\n\t\t\t\t*<Plug>(neocomplcache_start_quick_match)*\n<Plug>(neocomplcache_start_unite_quick_match)\n\t\tStart completion with |unite| and start quick match mode.\n\t\tNote: Required unite.vim Latest ver.3.0 or above.\n\n==============================================================================\nEXAMPLES\t\t\t\t\t*neocomplcache-examples*\n>\n\t\"Note: This option must set it in .vimrc(_vimrc).  NOT IN .gvimrc(_gvimrc)!\n\t\" Disable AutoComplPop.\n\tlet g:acp_enableAtStartup = 0\n\t\" Use neocomplcache.\n\tlet g:neocomplcache_enable_at_startup = 1\n\t\" Use smartcase.\n\tlet g:neocomplcache_enable_smart_case = 1\n\t\" Set minimum syntax keyword length.\n\tlet g:neocomplcache_min_syntax_length = 3\n\tlet g:neocomplcache_lock_buffer_name_pattern = '\\*ku\\*'\n\n\t\" Enable heavy features.\n\t\" Use camel case completion.\n\t\"let g:neocomplcache_enable_camel_case_completion = 1\n\t\" Use underbar completion.\n\t\"let g:neocomplcache_enable_underbar_completion = 1\n\n\t\" Define dictionary.\n\tlet g:neocomplcache_dictionary_filetype_lists = {\n\t    \\ 'default' : '',\n\t    \\ 'vimshell' : $HOME.'/.vimshell_hist',\n\t    \\ 'scheme' : $HOME.'/.gosh_completions'\n\t        \\ }\n\n\t\" Define keyword.\n\tif !exists('g:neocomplcache_keyword_patterns')\n\t    let g:neocomplcache_keyword_patterns = {}\n\tendif\n\tlet g:neocomplcache_keyword_patterns['default'] = '\\h\\w*'\n\n\t\" Plugin key-mappings.\n\tinoremap <expr><C-g>     neocomplcache#undo_completion()\n\tinoremap <expr><C-l>     neocomplcache#complete_common_string()\n\n\t\" Recommended key-mappings.\n\t\" <CR>: close popup and save indent.\n\tinoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>\n\tfunction! s:my_cr_function()\n\t  return neocomplcache#smart_close_popup() . \"\\<CR>\"\n\t  \" For no inserting <CR> key.\n\t  \"return pumvisible() ? neocomplcache#close_popup() : \"\\<CR>\"\n\tendfunction\n\t\" <TAB>: completion.\n\tinoremap <expr><TAB>  pumvisible() ? \"\\<C-n>\" : \"\\<TAB>\"\n\t\" <C-h>, <BS>: close popup and delete backword char.\n\tinoremap <expr><C-h> neocomplcache#smart_close_popup().\"\\<C-h>\"\n\tinoremap <expr><BS> neocomplcache#smart_close_popup().\"\\<C-h>\"\n\tinoremap <expr><C-y>  neocomplcache#close_popup()\n\tinoremap <expr><C-e>  neocomplcache#cancel_popup()\n\t\" Close popup by <Space>.\n\t\"inoremap <expr><Space> pumvisible() ? neocomplcache#close_popup() : \"\\<Space>\"\n\n\t\" For cursor moving in insert mode(Not recommended)\n\t\"inoremap <expr><Left>  neocomplcache#close_popup() . \"\\<Left>\"\n\t\"inoremap <expr><Right> neocomplcache#close_popup() . \"\\<Right>\"\n\t\"inoremap <expr><Up>    neocomplcache#close_popup() . \"\\<Up>\"\n\t\"inoremap <expr><Down>  neocomplcache#close_popup() . \"\\<Down>\"\n\t\" Or set this.\n\t\"let g:neocomplcache_enable_cursor_hold_i = 1\n\t\" Or set this.\n\t\"let g:neocomplcache_enable_insert_char_pre = 1\n\n\t\" AutoComplPop like behavior.\n\t\"let g:neocomplcache_enable_auto_select = 1\n\n\t\" Shell like behavior(not recommended).\n\t\"set completeopt+=longest\n\t\"let g:neocomplcache_enable_auto_select = 1\n\t\"let g:neocomplcache_disable_auto_complete = 1\n\t\"inoremap <expr><TAB>  pumvisible() ? \"\\<Down>\" : \"\\<C-x>\\<C-u>\"\n\n\t\" Enable omni completion.\n\tautocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS\n\tautocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags\n\tautocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS\n\tautocmd FileType python setlocal omnifunc=pythoncomplete#Complete\n\tautocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags\n\n\t\" Enable heavy omni completion.\n\tif !exists('g:neocomplcache_omni_patterns')\n\t  let g:neocomplcache_omni_patterns = {}\n\tendif\n\tif !exists('g:neocomplcache_force_omni_patterns')\n\t  let g:neocomplcache_force_omni_patterns = {}\n\tendif\n\tlet g:neocomplcache_omni_patterns.php =\n\t\\ '[^. \\t]->\\%(\\h\\w*\\)\\?\\|\\h\\w*::\\%(\\h\\w*\\)\\?'\n\tlet g:neocomplcache_omni_patterns.c =\n\t\\ '[^.[:digit:] *\\t]\\%(\\.\\|->\\)\\%(\\h\\w*\\)\\?'\n\tlet g:neocomplcache_omni_patterns.cpp =\n\t\\ '[^.[:digit:] *\\t]\\%(\\.\\|->\\)\\%(\\h\\w*\\)\\?\\|\\h\\w*::\\%(\\h\\w*\\)\\?'\n\n\t\" For perlomni.vim setting.\n\t\" https://github.com/c9s/perlomni.vim\n\tlet g:neocomplcache_omni_patterns.perl =\n\t\\ '[^. \\t]->\\%(\\h\\w*\\)\\?\\|\\h\\w*::\\%(\\h\\w*\\)\\?'\n<\n==============================================================================\nSOURCES\t\t\t\t\t\t*neocomplcache-sources*\n\nNeocomplcache reads automatically sources saved in an\nautoload/neocomplcache/sources directory.\n\nbuffer_complete.vim\t\t\t\t*buffer_complete*\n\t\tThis source collects keywords from buffer.\n\nmember_complete.vim\t\t\t\t*member_complete*\n\t\tThis source collects use of member variables from buffer.\n\ntags_complete.vim\t\t\t\t*tags_complete*\n\t\tThis source analyzes a tag file from tagfiles() for completion.\n\t\tWhen a huge tag file (above\n\t\t|g:neocomplcache_tags_caching_limit_file_size|) is set,\n\t\tneocomplcache does not make cache if you do not execute\n\t\t|:NeoComplCacheCachingTags|command.  Because tags_complete is\n\t\ttoo slow if tags_complete read a big tags file.  You should use\n\t\tmore convenient include completion now.\n\nsyntax_complete.vim\t\t\t\t*syntax_complete*\n\t\tThis source analyzes a syntax file like\n\t\tautoload/syntaxcomplete.vim offered by default, and to\n\t\tadd to candidate completion.  The plugin can recognize\n\t\tcandidates a lot more than autoload/syntaxcomplete.vim.\n\ninclude_complete.vim\t\t\t\t*include_complete*\n\t\tThis source will add the file which an opening buffer\n\t\trefers to to candidate.  It is convenient, because you do\n\t\tnot need to prepare a tags file and a dictionary file.\n\t\tBut it is necessary for 'path' and 'include',\n\t\t'includeexpr' to be set adequately.\n\n\t\tNote: If you have vimproc installed, neocomplcache will cache\n\t\tautomatically.  Otherwise it won't; please execute\n\t\t|:NeoComplCacheCachingInclude| manually.\n\nvim_complete.vim\t\t\t\t*vim_complete*\n\t\tThis source analyzes context and start Omni completion of\n\t\tVim script.  This plugin does not work other than editing\n\t\ttime of Vim script.  I created it because neocomplcache\n\t\tcannot call |i_CTRL-X_CTRL-V|.  Local variable and a\n\t\tscript variable, a function and the analysis of the\n\t\tcommand are implemented now.\n\ndictionary_complete.vim\t\t\t\t*dictionary_complete*\n\t\tThis source adds candidates from 'dictionary' or\n\t\t|g:neocomplcache_dictionary_filetype_lists|.\n\nfilename_complete.vim\t\t\t\t*filename_complete*\n\t\tThis source collects filename candidates.\n\nfilename_include.vim\t\t\t\t*filename_include*\n\t\tThis source collects filename candidates.  It is useful\n\t\twhen you input header file name.  It recognizes include\n\t\tpattern and include path like include_complete.\n\nomni_complete.vim\t\t\t\t*omni_complete*\n\t\tThis source calls 'omnifunc' automatically when cursor\n\t\ttext is matched with |g:neocomplcache_omni_patterns|.  If\n\t\t|g:neocomplcache_omni_function_list|is defined,\n\t\tneocomplcache will give priority it.\n\t\tNote: This source is not supported wildcard.\n\n\nsuffix of complete candidates in popup menu declaration.\n(This will be good for user to know where candidate from and what it is.)\n\n    filename_complete          -> [F] {filename}\n    filename_include           -> [FI] {filename}\n    dictionary_complete        -> [D] {words}\n    member_complete            -> [M] member\n    buffer_complete            -> [B] {buffername}\n    syntax_complete            -> [S] {syntax-keyword}\n    include_complete           -> [I]\n    neosnippet                 -> [neosnip]\n    vim_complete               -> [vim] type\n    omni_complete              -> [O]\n    tags_complete              -> [T]\n    other plugin sources       -> [plugin-name-prefix]\n    other completefunc sources -> [plugin-name-prefix]\n    other ftplugin sources     -> [plugin-name-prefix]\n\n------------------------------------------------------------------------------\nUSER SOURCES \t\t\t\t\t*neocomplcache-user-sources*\n\nThis section, introduce non default neocomplcache sources.\n\nneosnippet\t\t\t\t*neocomplcache-sources-neosnippet*\n\t\tThis source is for snippets completion.\n\t\tNote: This source is not in default sources after\n\t\tneocomplcache ver.7.0.\n\t\thttps://github.com/Shougo/neosnippet\n\nneco-ghc\t\t\t\t*neocomplcache-sources-neco-ghc*\n\t\thttps://github.com/ujihisa/neco-ghc\n\t\teagletmt originally implemented and now ujihisa is maintaining\n\t\tthis source.  It completes a source file written in Haskell.\n\t\tIt requires ghc-mod <http://www.mew.org/~kazu/proj/ghc-mod/>.\n\n==============================================================================\nFILTERS\t\t\t\t\t\t*neocomplcache-filters*\n\nTo custom candidates, neocomplcache uses the filters. There are three kinds of\nfilters are available. \"matcher\" is to use filter candidates. \"sorter\" is to\nuse sort candidates. \"converter\" is to use candidates conversion.\n\nNote: \"matcher\" is not implemented. It will implemented in ver.8.1.\n\nDefault sources are below. But you can create original filters(cf:\n|neocomplcache-create-filter|) and set them by\n|neocomplcache#custom_source()|.\n>\n\tcall unite#custom_source('buffer_complete', 'converters', [])\n\n\t\" Change default sorter.\n\tcall unite#custom_source('_', 'sorters',\n\t\\ ['sorter_length'])\n<\n\t\t\t\t\t*neocomplcache-filter-sorter_default*\nDefault sorters: ['sorter_rank'].\n\n\t\t\t\t\t*neocomplcache-filter-converter_default*\nDefault converters: ['converter_remove_next_keyword',\n        \\      'converter_delimiter', 'converter_case', 'converter_abbr'].\n\n\t\t\t\t\t*neocomplcache-filter-sorter_nothing*\nsorter_nothing\tNothing sorter.\n\n\t\t\t\t\t*neocomplcache-filter-sorter_rank*\nsorter_rank\tMatched rank order sorter.  The higher the matched word is\n\t\talready selected or in current buffer\n\n\t\t\t\t\t*neocomplcache-filter-sorter_length*\nsorter_length\tCandidates length order sorter.\n\n\t\t\t\t\t*neocomplcache-filter-converter_nothing*\nconverter_nothing\n\t\tThis converter is dummy.\n\n\t\t\t\t\t*neocomplcache-filter-converter_abbr*\nconverter_abbr\n\t\tThe converter which abbreviates a candidate's abbr.\n\n\t\t\t\t\t*neocomplcache-filter-converter_case*\nconverter_case\n\t\tThe converter which converts a candidate's word in text mode.\n\t\t(cf: |g:neocomplcache_text_mode_filetypes|)\n\n\t\t\t\t*neocomplcache-filter-converter_delimiter*\nconverter_delimiter\n\t\tThe converter which abbreviates a candidate's delimiter.\n\t\t(cf: |g:neocomplcache_delimiter_patterns|)\n\n\t\t\t*neocomplcache-filter-converter_remove_next_keyword*\nconverter_remove_next_keyword\n\t\tThe converter which removes matched next keyword part in a\n\t\tcandidate's word.\n\t\t(cf: |g:neocomplcache_next_keyword_patterns|)\n\n==============================================================================\nCREATE SOURCE\t\t\t\t\t*neocomplcache-create-source*\n\nIn this clause, I comment on a method to make source of neocomplcache.  The\nability of neocomplcache will spread by creating source by yourself.\n\nThe files in autoload/neocomplcache/sources are automatically loaded and it\ncalls neocomplcache#sources#{source_name}#define() whose return value is the\nsource.  Each return value can be a list so you can return an empty list to\navoid adding undesirable sources.  To add your own sources dynamically, you\ncan use |neocomplcache#define_source()|.\n\n------------------------------------------------------------------------------\nSOURCE ATTRIBUTES\t\t\t*neocomplcache-source-attributes*\n\n\t\t\t\t\t*neocomplcache-source-attribute-name*\nname\t\t\tString\t\t(Required)\n\t\t\tThe name of a source.  It must consist of the\n\t\t\tfollowing characters:\n\t\t\t- a-z\n\t\t\t- 0-9\n\t\t\t- _\n\t\t\t- /\n\t\t\t- - (Not head)\n\n\t\t\t\t\t*neocomplcache-source-attribute-kind*\nkind\t\t\tString\t\t\t(Optional)\n\t\t\tSource kind.\n\t\t\tFollowing values are available.\n\t\t\t\"manual\"  : This source decides complete position\n\t\t\t            manually.\n\t\t\t            Note: \"complfunc\" or \"ftplugin\" are old\n\t\t\t\t    values.\n\t\t\t\"keyword\" : This source decides complete position by\n\t\t\t           |g:neocomplcache_keyword_patterns|.\n\t\t\t            Note: \"plugin\" is old value.\n\n\t\t\t\t*neocomplcache-source-attribute-filetypes*\nfiletypes\t\tDictionary\t\t(Optional)\n\t\t\tAvailable filetype dictionary.\n\n\t\t\tFor example:\n>\n\t\t\tlet source = {\n\t\t\t      \\ 'name' : 'test',\n\t\t\t      \\ 'kind' : 'manual',\n\t\t\t      \\ 'filetypes' : { 'vim' : 1, 'html' : 1 },\n\t\t\t      \\}\n<\n\t\t\tThe source is available in vim and html filetypes.\n\n\t\t\tIf you omit it, this source available in all\n\t\t\tfiletypes.\n\n\n\t\t\t\t\t*neocomplcache-source-attribute-rank*\nrank\t\t\tNumber\t\t(Optional)\n\t\t\tSource priority.\n\t\t\tNote: You can set source priority by\n\t\t\t|g:neocomplcache_source_rank|, but it is obsolete way.\n\n\t\t\tIf you omit it, it is set below value.\n\t\t\tIf kind attribute is \"keyword\" : 5\n\t\t\tIf filetype attribute is empty : 10\n\t\t\tElse : 100\n\n\t\t\t*neocomplcache-source-attribute-min_pattern_length*\nmin_pattern_length\n\t\t\tNumber\t\t(Optional)\n\t\t\tRequired pattern length for completion.\n\n\t\t\tIf you omit it, it is set below value.\n\t\t\tIf kind attribute is \"keyword\" :\n\t\t\t    |g:neocomplcache_auto_completion_start_length|\n\t\t\tElse : 0\n\n\t\t\t*neocomplcache-source-attribute-max_candidates*\nmax_candidates\n\t\t\tNumber\t\t(Optional)\n\t\t\tThe maximum number of candidates.\n\n\t\t\tThis attribute is optional; if it is not given,\n\t\t\t0 is used as the default value.  This means\n\t\t\tmaximum number is infinity.\n\n\t\t\t\t\t*neocomplcache-source-attribute-hooks*\nhooks\t\t\tDictionary\t\t(Optional)\n\t\t\tYou may put hook functions in this dictionary in which\n\t\t\tthe key is the position to hook and the value is the\n\t\t\treference to the function to be called.  The following\n\t\t\thook functions are defined:\n\n\t\t\t\t*neocomplcache-source-attribute-hooks-on_init*\n\t\t\ton_init\n\t\t\tCalled when initializing the source.\n\t\t\tThis function takes {context} as its parameters.\n\t\t\t\t*neocomplcache-source-attribute-initialize*\n\t\t\tNote initialize() attribute is obsolete interface for\n\t\t\tinitialization.\n\n\t\t\t\t*neocomplcache-source-attribute-hooks-on_final*\n\t\t\ton_final\n\t\t\tCalled after executing |:NeoComplCacheDisable|.\n\t\t\tThis function takes {context} as its parameters.\n\t\t\t\t*neocomplcache-source-attribute-finalize*\n\t\t\tNote finalize() attribute is obsolete interface for\n\t\t\tfinalization.\n\n\t\t\t*neocomplcache-source-attribute-hooks-on_post_filter*\n\t\t\ton_post_filter\n\t\t\tCalled after the filters to narrow down the\n\t\t\tcandidates.  This is used to set attributes. This\n\t\t\tfilters is to avoid adversely affecting the\n\t\t\tperformance.\n\t\t\tThis function takes {context} as its parameters.\n\n\t\t\t*neocomplcache-source-attribute-get_complete_position*\nget_complete_position\tFunction\t(Optional)\n\t\t\tThis function takes {context} as its\n\t\t\tparameter and returns complete position in current\n\t\t\tline.\n\t\t\tHere, {context} is the context information when the\n\t\t\tsource is called(|neocomplcache-notation-{context}|).\n\t\t\tIf you omit it, neocomplcache will use the position\n\t\t\tusing |g:neocomplcache_keyword_patterns|.\n\t\t\tNote get_keyword_pos() is obsolete interface for\n\t\t\tget complete position.\n\n\t\t\t*neocomplcache-source-attribute-gather_candidates*\ngather_candidates\tFunction\t(Required)\n\t\t\tThis function is called in gathering candidates.  If\n\t\t\tyou enabled fuzzy completion by\n\t\t\t|g:neocomplcache_enable_fuzzy_completion| , this\n\t\t\tfunction is called whenever the input string is\n\t\t\tchanged.  This function takes {context} as its\n\t\t\tparameter and returns a list of {candidate}.\n\t\t\tHere, {context} is the context information when the\n\t\t\tsource is called(|neocomplcache-notation-{context}|).\n\t\t\tNote: get_complete_words() and get_keyword_list() are\n\t\t\tobsolete interface for gather candidates.\n\t\t\tNote: |neocomplcache-filters| feature is disabled for\n\t\t\tcompatibility in neocomplcache ver.8.0. You should use\n\t\t\tnew interface in neocomplcache ver.8.1.\n\n{context}\t\t\t\t*neocomplcache-notation-{context}*\n\t\t\tA dictionary to give context information.\n\t\t\tThe followings are the primary information.\n\t\t\tThe global context information can be acquired\n\t\t\tby |neocomplcache#get_context()|.\n\n\t\t\tinput\t\t\t(String)\n\t\t\t\tThe input string of current line.\n\n\t\t\tcomplete_pos\t\t(Number)\n\t\t\t\tThe complete position of current source.\n\n\t\t\tcomplete_str\t\t(String)\n\t\t\t\tThe complete string of current source.\n\n\t\t\tsource__{name}\t\t(Unknown)\t(Optional)\n\t\t\t\tAdditional source information.\n\t\t\t\tNote: Recommend sources save\n\t\t\t\tvariables instead of s: variables.\n\n------------------------------------------------------------------------------\nCANDIDATE ATTRIBUTES\t\t\t*neocomplcache-candidate-attributes*\n\n\t\t\t\t*neocomplcache-candidate-attribute-name*\nword\t\t\tString\t\t(Required)\n\t\t\tThe completion word of a candidate. It is used for\n\t\t\tmatching inputs.\n\n\t\t\t\t*neocomplcache-candidate-attribute-abbr*\nabbr\t\t\tString\t\t(Optional)\n\t\t\tThe abbreviation of a candidate. It is displayed in\n\t\t\tpopup window. It is omitted by\n\t\t\t|g:neocomplcache_max_keyword_width|.\n\n\t\t\t\t*neocomplcache-candidate-attribute-kind*\nkind\t\t\tString\t\t(Optional)\n\t\t\tThe kind of a candidate. It is displayed in popup\n\t\t\twindow.\n\n\t\t\t\t*neocomplcache-candidate-attribute-menu*\nmenu\t\t\tString\t\t(Optional)\n\t\t\tThe menu information of a candidate. It is displayed\n\t\t\tin popup window.\n\n\t\t\t\t*neocomplcache-candidate-attribute-info*\ninfo\t\t\tString\t\t(Optional)\n\t\t\tThe preview information of a candidate. If\n\t\t\t'completeopt' contains \"preview\", it will be displayed\n\t\t\tin |preview-window|.\n\n\t\t\t\t*neocomplcache-candidate-attribute-rank*\nrank\t\t\tNumber\t\t(Optional)\n\t\t\tThe completion priority.\n\n\nCONTEXT\t\t\t\t\t\t*neocomplcache-context*\n\n==============================================================================\nCREATE FILTER\t\t\t\t\t*neocomplcache-create-filter*\n\nThe files in autoload/neocomplcache/filters are automatically loaded and it\ncalls neocomplcache#filters#{filter_name}#define() whose return value is the\nfilter.  Each return value can be a list so you can return an empty list to\navoid adding undesirable filters.  To add your own filters dynamically, you\ncan use |neocomplcache#define_filter()|.\n\n------------------------------------------------------------------------------\nFILTER ATTRIBUTES\t\t\t*neocomplcache-filter-attributes*\n\n\n\t\t\t\t\t*neocomplcache-filter-attribute-name*\nname\t\t\tString\t\t(Required)\n\t\t\tThe filter name.\n\n\t\t\t\t\t*neocomplcache-filter-attribute-filter*\nfilter\t\t\tFunction\t\t(Required)\n\t\t\tThe filter function.  This function takes {context} as\n\t\t\tits parameter and returns a list of {candidate}.\n\t\t\tThe specification of the parameters and the returned\n\t\t\tvalue is same as\n\t\t\t|neocomplcache-source-attribute-gather_candidates|.\n\n\t\t\t\t\t*neocomplcache-filter-attribute-description*\ndescription\t\tString\t\t(Optional)\n\t\t\tThe filter description string.\n\n==============================================================================\nUNITE SOURCES\t\t\t\t\t*neocomplcache-unite-sources*\n\n\t\t\t\t*neocomplcache-unite-source-neocomplcache*\nneocomplcache\n\t\tNominates neocomplcache completion candidates.  The kind is\n\t\t\"completion\".  This source is used in\n\t\t|<Plug>(neocomplcache_start_unite_complete)|.\n>\n\t\timap <C-k>  <Plug>(neocomplcache_start_unite_complete)\n\t\timap <C-q>  <Plug>(neocomplcache_start_unite_quick_match)\n<\n==============================================================================\nFAQ\t\t\t\t\t\t*neocomplcache-faq*\n\nQ: My customization for neocomplcache is invalid. Why?\n\nA: User customization for neocomplcache must be set before initialization of\nneocomplcache. For example: |neocomplcache#custom_source()|\n\nQ: Is there a way to control the colors used for popup menu using highlight\ngroups?:\n\nA: Like this:\n>\n\thighlight Pmenu ctermbg=8 guibg=#606060\n\thighlight PmenuSel ctermbg=1 guifg=#dddd00 guibg=#1f82cd\n\thighlight PmenuSbar ctermbg=0 guibg=#d6d6d6\n<\n\nQ: Python (or Ruby) interface crashes Vim when I use neocomplcache or not\nresponding when input \".\":\n\nA: This is not neocomplcache's issue.  Please report to the maintainers of the\nomnicomplete (rubycomplete or pythoncomplete) and its Vim interface.  You\nshould disable omni_complete in python or ruby.\n>\n\tif !exists('g:neocomplcache_omni_patterns')\n\t  let g:neocomplcache_omni_patterns = {}\n\tendif\n\tlet g:neocomplcache_omni_patterns.python = ''\n\tlet g:neocomplcache_omni_patterns.ruby = ''\n<\n\nQ: I like moving cursor by cursor-keys.  But neocomplcache popups menus...\n\nA: Please set this in your .vimrc.  Note that this feature requires Vim 7.3.418\nor later.\n>\n\tlet g:neocomplcache_enable_insert_char_pre = 1\n<\n\nQ: Where is snippets set for neocomplcache?\n\nA: https://github.com/Shougo/neosnippet\n\n\nQ: How I can disable python omni complete of neocomplcache?:\n\nA:\n>\n\tif !exists('g:neocomplcache_omni_patterns')\n\t  let g:neocomplcache_omni_patterns = {}\n\tendif\n\tlet g:neocomplcache_omni_patterns.python = ''\n<\n\nQ: Can I enable quick match? :\n\nA: Quick match feature had been removed in latest neocomplcache\nbecause quick match turned into hard to implement.\nBut you can use |unite.vim| instead to use quick match.\n>\n\timap <expr> -  pumvisible() ?\n\t    \\ \"\\<Plug>(neocomplcache_start_unite_quick_match)\" : '-'\n<\n\nQ: How can I change the order of candidates? :\n\nA: Todo.\n\nQ: An input problem occurred in using uim-skk or other IMEs:\n\nA: It may be fixed with setting |g:neocomplcache_enable_prefetch| as 1.\n\n\nQ: include_complete does not work.\n\nA: include_complete depends on |vimproc|.  I recommend you to install it.  Also\nyou can check 'path' option or change |g:neocomplcache_include_paths|.\n\nhttp://github.com/Shougo/vimproc\n\n\nQ: neocomplcache cannot create cache files in \"sudo vim\":\n\nA: Because neocomplcache (and other plugins) creates temporary files in super\nuser permission by sudo command.  You must use sudo.vim or set \"Defaults\nalways_set_home\" in \"/etc/sudoers\", or must use \"sudoedit\" command.\n\n\nUbuntu has a command \"sudoedit\" which can work well with neocomplcache.\nI'm not sure if other distros has this command...\n\nhttp://www.vim.org/scripts/script.php?script_id=729\n\n\nQ: Error occurred in ruby omni complete using |g:neocomplcache_omni_patterns|.\nhttps://github.com/vim-ruby/vim-ruby/issues/95\n\nA: Please set |g:neocomplcache_force_omni_patterns| instead of\n|g:neocomplcache_omni_patterns|.\n\nQ: Does not work with clang_complete.\n\nA: Please try below settings.\n>\n\tif !exists('g:neocomplcache_force_omni_patterns')\n\t  let g:neocomplcache_force_omni_patterns = {}\n\tendif\n\tlet g:neocomplcache_force_overwrite_completefunc = 1\n\tlet g:neocomplcache_force_omni_patterns.c =\n\t      \\ '[^.[:digit:] *\\t]\\%(\\.\\|->\\)'\n\tlet g:neocomplcache_force_omni_patterns.cpp =\n\t      \\ '[^.[:digit:] *\\t]\\%(\\.\\|->\\)\\|\\h\\w*::'\n\tlet g:neocomplcache_force_omni_patterns.objc =\n\t      \\ '[^.[:digit:] *\\t]\\%(\\.\\|->\\)'\n\tlet g:neocomplcache_force_omni_patterns.objcpp =\n\t      \\ '[^.[:digit:] *\\t]\\%(\\.\\|->\\)\\|\\h\\w*::'\n\tlet g:clang_complete_auto = 0\n\tlet g:clang_auto_select = 0\n\t\"let g:clang_use_library = 1\n<\n\nQ: I want to support omni patterns for external plugins.\n\nA: You can add find some already found omni patterns and functions at here.\n\nNote: Some patterns are omitted here, (someone should check out those plugin's\nsource code's complete function, and find out the omni pattern).\n>\n\t\" Go (plugin: gocode)\n\tlet g:neocomplcache_omni_functions.go = 'gocomplete#Complete'\n\t\" Clojure (plugin: vim-clojure)\n\tlet g:neocomplcache_omni_functions.clojure = 'vimclojure#OmniCompletion'\n\t\" SQL\n\tlet g:neocomplcache_omni_functions.sql = 'sqlcomplete#Complete'\n\t\" R (plugin: vim-R-plugin)\n\tlet g:neocomplcache_omni_patterns.r = '[[:alnum:].\\\\]\\+'\n\tlet g:neocomplcache_omni_functions.r = 'rcomplete#CompleteR'\n\t\" XQuery (plugin: XQuery-indentomnicomplete)\n\tlet g:neocomplcache_omni_patterns.xquery = '\\k\\|:\\|\\-\\|&'\n\tlet g:neocomplcache_omni_functions.xquery = 'xquerycomplete#CompleteXQuery'\n<\n\nQ: Does not indent when I input \"else\" in ruby filetype.\n\nA:\n\nYou must install \"vim-ruby\" from github to indent in neocomplcache first.\nhttps://github.com/vim-ruby/vim-ruby\n\nNeocomplcache pops up a completion window automatically, but if the popup\nwindow is already visible, Vim cannot indent text.  So you must choose \"close\npopup window manually by <C-y> or <C-e> mappings\" or \"close popup window by\n<CR> user mappings\".\n\nQ: <CR> mapping conflicts with |SuperTab| or |endwise| plugins.\n\nA: Please try below settings.\n>\n\t\" <CR>: close popup and save indent.\n\tinoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>\n\tfunction! s:my_cr_function()\n\t  return neocomplcache#smart_close_popup() . \"\\<CR>\"\n\t  \" For no inserting <CR> key.\n\t  \"return pumvisible() ? neocomplcache#close_popup() : \"\\<CR>\"\n\tendfunction\n>\nQ: No completion offered from \"vim\" buffers in \"non-vim\" buffers.\n\nA: It is feature. neocomplcache completes from same filetype buffers in\ndefault.  But you can completes from other filetype buffers using\n|g:neocomplcache_same_filetype_lists|.\n\nQ: I want to complete from all buffers.\n\nA: |g:neocomplcache_same_filetype_lists|\n>\n\tlet g:neocomplcache_same_filetype_lists = {}\n\tlet g:neocomplcache_same_filetype_lists._ = '_'\n<\n\nQ: Suggestions are case insensitive in \"gitcommit\" buffers, but not\n\"javascript\".\n\nA: This is g:neocomplcache_text_mode_filetypes feature.\nYou can disable it by following code.\n>\n\tif !exists('g:neocomplcache_text_mode_filetypes')\n\t  let g:neocomplcache_tags_filter_patterns = {}\n\tendif\n\tlet g:neocomplcache_text_mode_filetypes.gitcommit = 0\n<\nQ: Conflicts completefunc with other plugins in neocomplcache.\n\nA: You can disable the error by |g:neocomplcache_force_overwrite_completefunc|\nvariable to 1.\n\nQ: I want to use Ruby omni_complete.\n\nA: Please set |g:neocomplcache_force_omni_patterns|.  But this completion is\nheavy, so disabled by default.\nNote: But you should use |neocomplcache-rsense| instead of rubycomplete.\nhttps://github.com/Shougo/neocomplcache-rsense\n>\n\tautocmd FileType ruby setlocal omnifunc=rubycomplete#Complete\n\tif !exists('g:neocomplcache_force_omni_patterns')\n\t  let g:neocomplcache_force_omni_patterns = {}\n\tendif\n\tlet g:neocomplcache_force_omni_patterns.ruby = '[^. *\\t]\\.\\w*\\|\\h\\w*::'\n<\nQ: I want to use jedi omni_complete.\nhttps://github.com/davidhalter/jedi-vim\n\nA: Please set |g:neocomplcache_force_omni_patterns| as below.\n>\n\tautocmd FileType python setlocal omnifunc=jedi#completions\n\tlet g:jedi#auto_vim_configuration = 0\n\tlet g:neocomplcache_force_omni_patterns.python = '[^. \\t]\\.\\w*'\n<\nQ: Candidates are not found in heavy completion(neco-look, etc).\n\nA: It may be caused by skip completion.\n\n\nQ: I want to disable skip completion.\n\nA:\n>\n\tlet g:neocomplcache_skip_auto_completion_time = ''\n<\nQ: I want to initialize neocomplcache in .vimrc.\n\nA: Please call neocomplcache#initialize() in .vimrc.  But this function slows\nyour Vim initialization.\n>\n\tcall neocomplcache#initialize()\n<\nQ: neocomplcache conflicts when multibyte input in GVim.\n\nA: Because Vim multibyte IME integration is incomplete.\nIf you set |g:neocomplcache_lock_iminsert| is non-zero, it may be fixed.\n\nQ: Freeze for a while and close opened folding when I begin to insert.\nhttps://github.com/Shougo/neocomplcache/issues/368\n\nA: I think you use 'foldmethod' is \"expr\" or \"syntax\". It is too heavy to use\nneocomplcache(or other auto completion). You should change 'foldmethod'\noption.\nNote: In current version, neocomplcache does not restore 'foldmethod'. Because\nit is too heavy.\n\nQ: I want to use Pydiction with neocomplcache.\n\nA: You should set |g:neocomplcache_dictionary_filetype_lists|.\nneocomplcache can load Pydiction dictionary file.\n\nQ: Why does neocomplcache use if_lua besides if_python? Many people may not be\nable to use it because they do not have the root privilege to recompile vim.\n\nA:\nBecause of the following reasons.\n 1. Python interface is not available on every Vim environment. For example,\n Android, iOS, non configured Vim, or etc.\n 2. Incompatibility between Python2 and Python3. I must rewrite for it.\n 3. Loading Python interface is slow (10~20ms), but loading Lua interface is\n absolutely fast (270ns).\n 4. Python2 and Python3 are not loaded at the same time on Unix environment.\n 5. Python itself is too large.\n 6. Python interface is slower than Lua interface (almost twice.)\n 7. Lua interface is stable (no crashes on latest Vim.)\n 8. Using C module (like vimproc, YouCompleteMe) is hard to compile on Windows\n environment.\n 9. Using both Python and C, like YouCompleteMe, is too unstable. Your Vim may\n crashes or causes mysterious errors.\n 10. To build if_lua is easy.\n 11. I think if_lua is the second level language in Vim (The first is Vim\n script.)\n\nQ: I want to disable preview window.\n\nA:\n>\n\tset completeopt-=preview\n<\n\nQ: I want to use \"vim-lua-ftplugin\".\nhttps://github.com/xolox/vim-lua-ftplugin\n\nA: Please set |g:neocomplcache_omni_patterns| as below.\nNote: You can not use \"vim-lua-ftplugin\" on 7.3.885 or below,\nbecause if_lua has double-free problem.\n>\n\tlet g:lua_check_syntax = 0\n\tlet g:lua_complete_omni = 1\n\tlet g:lua_complete_dynamic = 0\n\t\n\tlet g:neocomplcache_omni_functions.lua =\n\t      \\ 'xolox#lua#omnifunc'\n\tlet g:neocomplcache_omni_patterns.lua =\n\t      \\ '\\w\\+[.:]\\|require\\s*(\\?[\"'']\\w*'\n\t\" let g:neocomplcache_force_omni_patterns.lua =\n\t      \" \\ '\\w\\+[.:]\\|require\\s*(\\?[\"'']\\w*'\n<\n\nQ: neocomplcache closes DiffGitCached window from vim-fugitive\nhttps://github.com/Shougo/neocomplcache.vim/issues/424\nA:\n>\n\tlet g:neocomplcache_enable_auto_close_preview = 0\n<\n\nQ: I want to get quiet messages in auto completion.\nhttps://github.com/Shougo/neocomplcache.vim/issues/448\n\nA: Before 7.4 patch 314 it was not possible because of vim's default\nbehavior. If you are using a recent version of vim you can disable the\nmessages through the 'shortmess' option.\n>\n\tif has(\"patch-7.4.314\")\n\t  set shortmess+=c\n\tendif\n<\nFor earlier vim versions you can try to hide them by using the settings below\n>\n\tautocmd VimEnter *\n\t\\ highlight ModeMsg guifg=bg guibg=bg | highlight WarningMsg guifg=bg\n<\n\nQ: neocomplcache will change external completeopt vaule(longest).\nhttps://github.com/Shougo/neocomplcache.vim/issues/453\n\nA: It is feature. Because \"longest\" completeopt conflicts with auto\ncompletion.  To use \"longest\" option, you must disable auto completion.\n\"longest\" is good feature. But it is for manual completion only.\n\nQ: autoclose conflicts with neocomplcache.\nhttps://github.com/Shougo/neocomplcache.vim/issues/350\n\nA: It is autoclose mappings problem. I cannot fix it. You should use\nauto-pairs plugin instead of it.\nhttps://github.com/jiangmiao/auto-pairs\n\n==============================================================================\nvim:tw=78:ts=8:ft=help:norl:noet:fen:noet:\n"
  },
  {
    "path": "plugin/neocomplcache/buffer_complete.vim",
    "content": "\"=============================================================================\n\" FILE: buffer_complete.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 05 Oct 2012.\n\"=============================================================================\n\nif exists('g:loaded_neocomplcache_buffer_complete')\n  finish\nendif\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\n\" Add commands. \"{{{\ncommand! -nargs=? -complete=file -bar\n      \\ NeoComplCacheCachingBuffer\n      \\ call neocomplcache#sources#buffer_complete#caching_buffer(<q-args>)\ncommand! -nargs=? -complete=buffer -bar\n      \\ NeoComplCachePrintSource\n      \\ call neocomplcache#sources#buffer_complete#print_source(<q-args>)\ncommand! -nargs=? -complete=buffer -bar\n      \\ NeoComplCacheOutputKeyword\n      \\ call neocomplcache#sources#buffer_complete#output_keyword(<q-args>)\ncommand! -nargs=? -complete=buffer -bar\n      \\ NeoComplCacheDisableCaching\n      \\ call neocomplcache#sources#buffer_complete#disable_caching(<q-args>)\ncommand! -nargs=? -complete=buffer -bar\n      \\ NeoComplCacheEnableCaching\n      \\ call neocomplcache#sources#buffer_complete#enable_caching(<q-args>)\n\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\nlet g:loaded_neocomplcache_buffer_complete = 1\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "plugin/neocomplcache/dictionary_complete.vim",
    "content": "\"=============================================================================\n\" FILE: dictionary_complete.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 05 Oct 2012.\n\"=============================================================================\n\nif exists('g:loaded_neocomplcache_dictionary_complete')\n  finish\nendif\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\n\" Add commands. \"{{{\ncommand! -nargs=? -complete=customlist,neocomplcache#filetype_complete\n      \\ NeoComplCacheCachingDictionary\n      \\ call neocomplcache#sources#dictionary_complete#recaching(<q-args>)\n\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\nlet g:loaded_neocomplcache_dictionary_complete = 1\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "plugin/neocomplcache/include_complete.vim",
    "content": "\"=============================================================================\n\" FILE: include_complete.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 05 Oct 2012.\n\"=============================================================================\n\nif exists('g:loaded_neocomplcache_include_complete')\n  finish\nendif\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\n\" Add commands. \"{{{\ncommand! -nargs=? -complete=buffer NeoComplCacheCachingInclude\n      \\ call neocomplcache#sources#include_complete#caching_include(<q-args>)\n\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\nlet g:loaded_neocomplcache_include_complete = 1\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "plugin/neocomplcache/syntax_complete.vim",
    "content": "\"=============================================================================\n\" FILE: syntax_complete.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 05 Oct 2012.\n\"=============================================================================\n\nif exists('g:loaded_neocomplcache_syntax_complete')\n  finish\nendif\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\n\" Add commands. \"{{{\ncommand! -nargs=? -complete=customlist,neocomplcache#filetype_complete\n      \\ NeoComplCacheCachingSyntax\n      \\ call neocomplcache#sources#syntax_complete#recaching(<q-args>)\n\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\nlet g:loaded_neocomplcache_syntax_complete = 1\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "plugin/neocomplcache/tags_complete.vim",
    "content": "\"=============================================================================\n\" FILE: tags_complete.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 05 Oct 2012.\n\"=============================================================================\n\nif exists('g:loaded_neocomplcache_tags_complete')\n  finish\nendif\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\n\" Add commands. \"{{{\ncommand! -nargs=0 -bar\n      \\ NeoComplCacheCachingTags\n      \\ call neocomplcache#sources#tags_complete#caching_tags(1)\n\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\nlet g:loaded_neocomplcache_tags_complete = 1\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "plugin/neocomplcache.vim",
    "content": "\"=============================================================================\n\" FILE: neocomplcache.vim\n\" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>\n\" Last Modified: 26 Sep 2013.\n\" License: MIT license  {{{\n\"     Permission is hereby granted, free of charge, to any person obtaining\n\"     a copy of this software and associated documentation files (the\n\"     \"Software\"), to deal in the Software without restriction, including\n\"     without limitation the rights to use, copy, modify, merge, publish,\n\"     distribute, sublicense, and/or sell copies of the Software, and to\n\"     permit persons to whom the Software is furnished to do so, subject to\n\"     the following conditions:\n\"\n\"     The above copyright notice and this permission notice shall be included\n\"     in all copies or substantial portions of the Software.\n\"\n\"     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\" }}}\n\" GetLatestVimScripts: 2620 1 :AutoInstall: neocomplcache\n\"=============================================================================\n\nif exists('g:loaded_neocomplcache')\n  finish\nendif\nlet g:loaded_neocomplcache = 1\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nif v:version < 702\n  echohl Error\n  echomsg 'neocomplcache does not work this version of Vim (' . v:version . ').'\n  echohl None\n  finish\nendif\n\ncommand! -nargs=0 -bar NeoComplCacheEnable\n      \\ call neocomplcache#init#enable()\ncommand! -nargs=0 -bar NeoComplCacheDisable\n      \\ call neocomplcache#init#disable()\ncommand! -nargs=0 -bar NeoComplCacheLock\n      \\ call neocomplcache#commands#_lock()\ncommand! -nargs=0 -bar NeoComplCacheUnlock\n      \\ call neocomplcache#commands#_unlock()\ncommand! -nargs=0 -bar NeoComplCacheToggle\n      \\ call neocomplcache#commands#_toggle_lock()\ncommand! -nargs=1 -bar NeoComplCacheLockSource\n      \\ call neocomplcache#commands#_lock_source(<q-args>)\ncommand! -nargs=1 -bar NeoComplCacheUnlockSource\n      \\ call neocomplcache#commands#_unlock_source(<q-args>)\nif v:version >= 703\n  command! -nargs=1 -bar -complete=filetype NeoComplCacheSetFileType\n        \\ call neocomplcache#commands#_set_file_type(<q-args>)\nelse\n  command! -nargs=1 -bar NeoComplCacheSetFileType\n        \\ call neocomplcache#commands#_set_file_type(<q-args>)\nendif\ncommand! -nargs=0 -bar NeoComplCacheClean\n      \\ call neocomplcache#commands#_clean()\n\n\" Warning if using obsolute mappings. \"{{{\nsilent! inoremap <unique> <Plug>(neocomplcache_snippets_expand)\n      \\ <C-o>:echoerr <SID>print_snippets_complete_error()<CR>\nsilent! snoremap <unique> <Plug>(neocomplcache_snippets_expand)\n      \\ :<C-u>:echoerr <SID>print_snippets_complete_error()<CR>\nsilent! inoremap <unique> <Plug>(neocomplcache_snippets_jump)\n      \\ <C-o>:echoerr <SID>print_snippets_complete_error()<CR>\nsilent! snoremap <unique> <Plug>(neocomplcache_snippets_jump)\n      \\ :<C-u>:echoerr <SID>print_snippets_complete_error()<CR>\nsilent! inoremap <unique> <Plug>(neocomplcache_snippets_force_expand)\n      \\ <C-o>:echoerr <SID>print_snippets_complete_error()<CR>\nsilent! snoremap <unique> <Plug>(neocomplcache_snippets_force_expand)\n      \\ :<C-u>:echoerr <SID>print_snippets_complete_error()<CR>\nsilent! inoremap <unique> <Plug>(neocomplcache_snippets_force_jump)\n      \\ <C-o>:echoerr <SID>print_snippets_complete_error()<CR>\nsilent! snoremap <unique> <Plug>(neocomplcache_snippets_force_jump)\n      \\ :<C-u>:echoerr <SID>print_snippets_complete_error()<CR>\nfunction! s:print_snippets_complete_error()\n  return 'Warning: neocomplcache snippets source was splitted!'\n      \\ .' You should install neosnippet from'\n      \\ .' \"https://github.com/Shougo/neosnippet.vim\"'\nendfunction\"}}}\n\n\" Global options definition. \"{{{\nlet g:neocomplcache_max_list =\n      \\ get(g:, 'neocomplcache_max_list', 100)\nlet g:neocomplcache_max_keyword_width =\n      \\ get(g:, 'neocomplcache_max_keyword_width', 80)\nlet g:neocomplcache_max_menu_width =\n      \\ get(g:, 'neocomplcache_max_menu_width', 15)\nlet g:neocomplcache_auto_completion_start_length =\n      \\ get(g:, 'neocomplcache_auto_completion_start_length', 2)\nlet g:neocomplcache_manual_completion_start_length =\n      \\ get(g:, 'neocomplcache_manual_completion_start_length', 0)\nlet g:neocomplcache_min_keyword_length =\n      \\ get(g:, 'neocomplcache_min_keyword_length', 4)\nlet g:neocomplcache_enable_ignore_case =\n      \\ get(g:, 'neocomplcache_enable_ignore_case', &ignorecase)\nlet g:neocomplcache_enable_smart_case =\n      \\ get(g:, 'neocomplcache_enable_smart_case', &infercase)\nlet g:neocomplcache_disable_auto_complete =\n      \\ get(g:, 'neocomplcache_disable_auto_complete', 0)\nlet g:neocomplcache_enable_wildcard =\n      \\ get(g:, 'neocomplcache_enable_wildcard', 1)\nlet g:neocomplcache_enable_camel_case_completion =\n      \\ get(g:, 'neocomplcache_enable_camel_case_completion', 0)\nlet g:neocomplcache_enable_underbar_completion =\n      \\ get(g:, 'neocomplcache_enable_underbar_completion', 0)\nlet g:neocomplcache_enable_fuzzy_completion =\n      \\ get(g:, 'neocomplcache_enable_fuzzy_completion', 0)\nlet g:neocomplcache_fuzzy_completion_start_length =\n      \\ get(g:, 'neocomplcache_fuzzy_completion_start_length', 3)\nlet g:neocomplcache_enable_caching_message =\n      \\ get(g:, 'neocomplcache_enable_caching_message', 1)\nlet g:neocomplcache_enable_insert_char_pre =\n      \\ get(g:, 'neocomplcache_enable_insert_char_pre', 0)\nlet g:neocomplcache_enable_cursor_hold_i =\n      \\ get(g:, 'neocomplcache_enable_cursor_hold_i', 0)\nlet g:neocomplcache_cursor_hold_i_time =\n      \\ get(g:, 'neocomplcache_cursor_hold_i_time', 300)\nlet g:neocomplcache_enable_auto_select =\n      \\ get(g:, 'neocomplcache_enable_auto_select', 0)\nlet g:neocomplcache_enable_auto_delimiter =\n      \\ get(g:, 'neocomplcache_enable_auto_delimiter', 0)\nlet g:neocomplcache_caching_limit_file_size =\n      \\ get(g:, 'neocomplcache_caching_limit_file_size', 500000)\nlet g:neocomplcache_disable_caching_file_path_pattern =\n      \\ get(g:, 'neocomplcache_disable_caching_file_path_pattern', '')\nlet g:neocomplcache_lock_buffer_name_pattern =\n      \\ get(g:, 'neocomplcache_lock_buffer_name_pattern', '')\nlet g:neocomplcache_ctags_program =\n      \\ get(g:, 'neocomplcache_ctags_program', 'ctags')\nlet g:neocomplcache_force_overwrite_completefunc =\n      \\ get(g:, 'neocomplcache_force_overwrite_completefunc', 0)\nlet g:neocomplcache_enable_prefetch =\n      \\ get(g:, 'neocomplcache_enable_prefetch',\n      \\  !(v:version > 703 || v:version == 703 && has('patch519'))\n      \\ || (has('gui_running') && has('xim'))\n      \\ )\nlet g:neocomplcache_lock_iminsert =\n      \\ get(g:, 'neocomplcache_lock_iminsert', 0)\nlet g:neocomplcache_release_cache_time =\n      \\ get(g:, 'neocomplcache_release_cache_time', 900)\nlet g:neocomplcache_wildcard_characters =\n      \\ get(g:, 'neocomplcache_wildcard_characters', {\n      \\ '_' : '*' })\nlet g:neocomplcache_skip_auto_completion_time =\n      \\ get(g:, 'neocomplcache_skip_auto_completion_time', '0.3')\nlet g:neocomplcache_enable_auto_close_preview =\n      \\ get(g:, 'neocomplcache_enable_auto_close_preview', 1)\n\nlet g:neocomplcache_sources_list =\n      \\ get(g:, 'neocomplcache_sources_list', {})\nlet g:neocomplcache_disabled_sources_list =\n      \\ get(g:, 'neocomplcache_disabled_sources_list', {})\nif exists('g:neocomplcache_source_disable')\n  let g:neocomplcache_disabled_sources_list._ =\n        \\ keys(filter(copy(g:neocomplcache_source_disable), 'v:val'))\nendif\n\nif exists('g:neocomplcache_plugin_completion_length')\n  let g:neocomplcache_source_completion_length =\n        \\ g:neocomplcache_plugin_completion_length\nendif\nlet g:neocomplcache_source_completion_length =\n      \\ get(g:, 'neocomplcache_source_completion_length', {})\nif exists('g:neocomplcache_plugin_rank')\n  let g:neocomplcache_source_rank = g:neocomplcache_plugin_rank\nendif\nlet g:neocomplcache_source_rank =\n      \\ get(g:, 'neocomplcache_source_rank', {})\n\nlet g:neocomplcache_temporary_dir =\n      \\ get(g:, 'neocomplcache_temporary_dir',\n      \\  ($XDG_CACHE_HOME != '' ?\n      \\   $XDG_CACHE_HOME . '/neocomplcache' : expand('~/.cache/neocomplcache')))\nlet g:neocomplcache_enable_debug =\n      \\ get(g:, 'neocomplcache_enable_debug', 0)\nif get(g:, 'neocomplcache_enable_at_startup', 0)\n  augroup neocomplcache\n    \" Enable startup.\n    autocmd CursorHold,CursorMovedI\n          \\ * call neocomplcache#init#lazy()\n  augroup END\nendif\"}}}\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\n\" vim: foldmethod=marker\n"
  },
  {
    "path": "vest/test-neocomplcache.vim",
    "content": "scriptencoding utf-8\n\n\" Saving 'cpoptions' {{{\nlet s:save_cpo = &cpo\nset cpo&vim\n\" }}}\n\nContext types\n  It tests compare functions.\n    ShouldEqual sort([{ 'word' : 'z0' }, { 'word' : 'z10' },\n          \\ { 'word' : 'z2'}, { 'word' : 'z3'} ],\n          \\ 'neocomplcache#compare_human'),\n          \\ [{ 'word' : 'z0' }, { 'word' : 'z2' },\n          \\  { 'word' : 'z3' }, { 'word' : 'z10' }]\n  End\nEnd\n\nFin\n\n\" Restore 'cpoptions' {{{\nlet &cpo = s:save_cpo\n\" }}}\n\n\" vim:foldmethod=marker:fen:\n"
  }
]