[
  {
    "path": "README.md",
    "content": "incsearch-fuzzy.vim\n===================\n\nincremantal fuzzy search extension for [incsearch.vim](https://github.com/haya14busa/incsearch.vim)\n\n![incsearch-fuzzy.gif](https://raw.githubusercontent.com/haya14busa/i/master/incsearch.vim/extensions/incsearch-fuzzy.gif)\n\n### Dependencies\n- https://github.com/haya14busa/incsearch.vim\n\n### Installtaion\n\n[Neobundle](https://github.com/Shougo/neobundle.vim) / [Vundle](https://github.com/gmarik/Vundle.vim) / [vim-plug](https://github.com/junegunn/vim-plug)\n\n```vim\nNeoBundle 'haya14busa/incsearch.vim'\nPlugin 'haya14busa/incsearch.vim'\nPlug 'haya14busa/incsearch.vim'\n\nNeoBundle 'haya14busa/incsearch-fuzzy.vim'\nPlugin 'haya14busa/incsearch-fuzzy.vim'\nPlug 'haya14busa/incsearch-fuzzy.vim'\n```\n\n[pathogen](https://github.com/tpope/vim-pathogen)\n\n```\ngit clone https://github.com/haya14busa/incsearch.vim ~/.vim/bundle/incsearch.vim\ngit clone https://github.com/haya14busa/incsearch-fuzzy.vim ~/.vim/bundle/incsearch-fuzzy.vim\n```\n\n### Usage\n\n#### fuzzy search\n\n**Give it a shot!** :gun: `:call incsearch#call(incsearch#config#fuzzy#make()) `\n\n```vim\nmap z/ <Plug>(incsearch-fuzzy-/)\nmap z? <Plug>(incsearch-fuzzy-?)\nmap zg/ <Plug>(incsearch-fuzzy-stay)\n```\n\n#### fuzzyspell search\n\nIt use `spell` feature in Vim\n\n![incsearch-fuzzyspell.gif](https://raw.githubusercontent.com/haya14busa/i/master/incsearch.vim/extensions/incsearch-fuzzyspell.gif)\n\n```vim\nmap z/ <Plug>(incsearch-fuzzyspell-/)\nmap z? <Plug>(incsearch-fuzzyspell-?)\nmap zg/ <Plug>(incsearch-fuzzyspell-stay)\n```\n\n### API\n\n#### fuzzy\n- `incsearch#config#fuzzy#converter()`: return fuzzy converter function\n- `incsearch#config#fuzzy#make()`: return default config for fuzzy command\n\n#### fuzzyspell\n- `incsearch#config#fuzzyspell#converter()`: return fuzzyspell converter function\n- `incsearch#config#fuzzyspell#make`: return default config for fuzzyspell command\n\n#### Example: Use both fuzzy & fuzzyspell feature\n\n```vim\nfunction! s:config_fuzzyall(...) abort\n  return extend(copy({\n  \\   'converters': [\n  \\     incsearch#config#fuzzy#converter(),\n  \\     incsearch#config#fuzzyspell#converter()\n  \\   ],\n  \\ }), get(a:, 1, {}))\nendfunction\n\nnoremap <silent><expr> z/ incsearch#go(<SID>config_fuzzyall())\nnoremap <silent><expr> z? incsearch#go(<SID>config_fuzzyall({'command': '?'}))\nnoremap <silent><expr> zg? incsearch#go(<SID>config_fuzzyall({'is_stay': 1}))\n```\n"
  },
  {
    "path": "autoload/incsearch/config/fuzzy.vim",
    "content": "\"=============================================================================\n\" FILE: autoload/incsearch/config/fuzzy.vim\n\" AUTHOR: haya14busa\n\" License: MIT license\n\"=============================================================================\nscriptencoding utf-8\nlet s:save_cpo = &cpo\nset cpo&vim\n\nlet s:C = vital#incsearch_fuzzy#import('Data.String.Converter')\n\nfunction! incsearch#config#fuzzy#converter() abort\n  return s:C.fuzzy\nendfunction\n\nfunction! incsearch#config#fuzzy#make(...) abort\n  return incsearch#util#deepextend(deepcopy({\n  \\   'converters': [incsearch#config#fuzzy#converter()]\n  \\ }), get(a:, 1, {}))\nendfunction\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\" __END__\n\" vim: expandtab softtabstop=2 shiftwidth=2 foldmethod=marker\n"
  },
  {
    "path": "autoload/incsearch/config/fuzzyspell.vim",
    "content": "\"=============================================================================\n\" FILE: autoload/incsearch/config/fuzzyspell.vim\n\" AUTHOR: haya14busa\n\" License: MIT license\n\"=============================================================================\nscriptencoding utf-8\nlet s:save_cpo = &cpo\nset cpo&vim\n\nlet s:C = vital#incsearch_fuzzy#import('Data.String.Converter')\n\nfunction! incsearch#config#fuzzyspell#converter() abort\n  return s:C.fuzzyspell\nendfunction\n\nfunction! incsearch#config#fuzzyspell#make(...) abort\n  return incsearch#util#deepextend(deepcopy({\n  \\   'converters': [incsearch#config#fuzzyspell#converter()]\n  \\ }), get(a:, 1, {}))\nendfunction\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\" __END__\n\" vim: expandtab softtabstop=2 shiftwidth=2 foldmethod=marker\n"
  },
  {
    "path": "autoload/incsearch/config/fuzzyword.vim",
    "content": "\"=============================================================================\n\" FILE: autoload/incsearch/config/fuzzy.vim\n\" AUTHOR: haya14busa\n\" License: MIT license\n\"=============================================================================\nscriptencoding utf-8\nlet s:save_cpo = &cpo\nset cpo&vim\n\nlet s:C = vital#incsearch_fuzzy#import('Data.String.Converter')\n\nfunction! incsearch#config#fuzzyword#converter() abort\n  return s:C.fuzzyword\nendfunction\n\nfunction! incsearch#config#fuzzyword#make(...) abort\n  return incsearch#util#deepextend(deepcopy({\n  \\   'converters': [incsearch#config#fuzzyword#converter()]\n  \\ }), get(a:, 1, {}))\nendfunction\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\" __END__\n\" vim: expandtab softtabstop=2 shiftwidth=2 foldmethod=marker\n\n"
  },
  {
    "path": "autoload/vital/_incsearch_fuzzy/Data/String/Converter.vim",
    "content": "\" ___vital___\n\" NOTE: lines between '\" ___vital___' is generated by :Vitalize.\n\" Do not mofidify the code nor insert new lines before '\" ___vital___'\nif v:version > 703 || v:version == 703 && has('patch1170')\n  function! vital#_incsearch_fuzzy#Data#String#Converter#import() abort\n    return map({'smartsign_char': '', 'fuzzyspell': '', 'fuzzyword': '', 'get_smartsign_table': '', 'fuzzy': '', 'smartsign': ''},  'function(\"s:\" . v:key)')\n  endfunction\nelse\n  function! s:_SID() abort\n    return matchstr(expand('<sfile>'), '<SNR>\\zs\\d\\+\\ze__SID$')\n  endfunction\n  execute join(['function! vital#_incsearch_fuzzy#Data#String#Converter#import() abort', printf(\"return map({'smartsign_char': '', 'fuzzyspell': '', 'fuzzyword': '', 'get_smartsign_table': '', 'fuzzy': '', 'smartsign': ''}, \\\"function('<SNR>%s_' . v:key)\\\")\", s:_SID()), 'endfunction'], \"\\n\")\n  delfunction s:_SID\nendif\n\" ___vital___\n\"=============================================================================\n\" FILE: autoload/vital/__latest__/Data/String/Converter.vim\n\" AUTHOR: haya14busa\n\" License: MIT license\n\"=============================================================================\nscriptencoding utf-8\nlet s:save_cpo = &cpo\nset cpo&vim\n\nlet s:TRUE = !0\nlet s:FALSE = 0\nlet s:escaped_backslash = '\\m\\%(^\\|[^\\\\]\\)\\%(\\\\\\\\\\)*'\nlet s:non_escaped_backslash = '\\m\\%(\\%(^\\|[^\\\\]\\)\\%(\\\\\\\\\\)*\\)\\@1<=\\\\'\n\nfunction! s:_throw(message) abort\n  throw printf('vital: Data.String.Converter: %s', a:message)\nendfunction\n\n\" fuzzy --\nfunction! s:fuzzy(pattern) abort\n  if a:pattern is# '' | return '' | endif\n  let pattern = substitute(a:pattern, s:non_escaped_backslash . '[mMvV]', '', 'g')\n  let pattern = substitute(pattern, s:escaped_backslash . '\\([mMvV]\\)', '\\1', 'g')\n  let chars = map(split(pattern, '\\zs'), \"escape(v:val, '\\\\')\")\n  let p =  '\\c\\V' .\n  \\   join(map(chars[0:-2], \"\n  \\       printf('%s\\\\[^%s]\\\\{-}', v:val, v:val)\n  \\   \"), '') . chars[-1]\n  return p\nendfunction\n\nlet s:nonwords = join([\n\\   '[:space:]',\n\\ ], '')\n\n\" fuzzy word --\nfunction! s:fuzzyword(pattern) abort\n  if a:pattern is# '' | return '' | endif\n  let pattern = substitute(a:pattern, s:non_escaped_backslash . '[mMvV]', '', 'g')\n  let pattern = substitute(pattern, s:escaped_backslash . '\\([mMvV]\\)', '\\1', 'g')\n  let chars = map(split(pattern, '\\zs'), \"escape(v:val, '\\\\')\")\n  let p =  '\\c\\V\\<\\=' .\n  \\   join(map(chars[0:-2], \"\n  \\       printf('%s\\\\[^%s%s]\\\\{-}', v:val, s:nonwords, v:val)\n  \\   \"), '') . chars[-1]\n  return p\nendfunction\n\n\" smartsign --\nlet s:sign_table = {}\nlet s:sign_table.us = {\n\\  ',' : '<', '.' : '>', '/' : '?',\n\\  '1' : '!', '2' : '@', '3' : '#', '4' : '$', '5' : '%',\n\\  '6' : '^', '7' : '&', '8' : '*', '9' : '(', '0' : ')', '-' : '_', '=' : '+',\n\\  ';' : ':', '[' : '{', ']' : '}', '`' : '~', \"'\" : \"\\\"\", '\\' : '|',\n\\  }\n\nlet s:sign_table.ja = {\n\\  ',' : '<', '.' : '>', '/' : '?',\n\\  '1' : '!', '2' : '\"', '3' : '#', '4' : '$', '5' : '%',\n\\  '6' : '&', '7' : \"'\", '8' : '(', '9' : ')', '0' : '_', '-' : '=', '^' : '~',\n\\  ';' : '+', ':' : '*', '[' : '{', ']' : '}', '@' : '`', '\\' : '|',\n\\  }\n\n\" characters which should be escaped in rectangle ([]) of regular expressions\nlet s:escape_in_rec = '\\]^-/?'\n\nfunction! s:get_smartsign_table(...) abort\n  let table = get(a:, 1, s:sign_table.us)\n  if type(table) is# type('')\n    if !has_key(s:sign_table, table)\n      call s:_throw(printf('table named %s does not exist', table))\n    else\n      let tmp = s:sign_table[table]\n      unlet table\n      let table = tmp\n    endif\n  endif\n  return table\nendfunction\n\n\" assume '\\V'\nfunction! s:smartsign_char(sign, ...) abort\n  let table = call(function('s:get_smartsign_table'), a:000)\n  return has_key(table, a:sign) ?\n  \\     printf('\\[%s%s]',\n  \\         escape(a:sign, s:escape_in_rec),\n  \\         escape(table[a:sign], s:escape_in_rec))\n  \\   : a:sign\nendfunction\n\nfunction! s:smartsign(pattern, ...) abort\n  let table = call(function('s:get_smartsign_table'), a:000)\n  let signs = '\\m[' . escape(join(keys(table), ''), s:escape_in_rec) . ']'\n  return '\\V' . substitute(a:pattern, signs, '\\=\n  \\                        s:smartsign_char(submatch(0), table)', 'g')\nendfunction\n\n\" fuzzyspell --\nfunction! s:fuzzyspell(pattern) abort\n  let spell_save = &spell\n  let &spell = s:TRUE\n  try\n    return substitute(a:pattern, '\\k\\+', '\\=s:_make_fuzzy_spell(submatch(0))', 'g')\n  finally\n    let &spell = spell_save\n  endtry\nendfunction\n\nfunction! s:_spellsuggest(word, ...) abort\n  let max = get(a:, 1, 25)\n  return [a:word] + spellsuggest(a:word, max)\nendfunction\n\nfunction! s:_make_fuzzy_spell(word) abort\n  return printf('\\m\\(%s\\)', join(s:_spellsuggest(a:word), '\\|'))\nendfunction\n\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\" __END__\n\" vim: expandtab softtabstop=2 shiftwidth=2 foldmethod=marker\n"
  },
  {
    "path": "autoload/vital/_incsearch_fuzzy.vim",
    "content": "let s:_plugin_name = expand('<sfile>:t:r')\n\nfunction! vital#{s:_plugin_name}#new() abort\n  return vital#{s:_plugin_name[1:]}#new()\nendfunction\n"
  },
  {
    "path": "autoload/vital/incsearch_fuzzy.vim",
    "content": "let s:plugin_name = expand('<sfile>:t:r')\nlet s:vital_base_dir = expand('<sfile>:h')\nlet s:project_root = expand('<sfile>:h:h:h')\nlet s:is_vital_vim = s:plugin_name is# 'vital'\n\nlet s:loaded = {}\nlet s:cache_sid = {}\n\n\" function() wrapper\nif v:version > 703 || v:version == 703 && has('patch1170')\n  function! s:_function(fstr) abort\n    return function(a:fstr)\n  endfunction\nelse\n  function! s:_SID() abort\n    return matchstr(expand('<sfile>'), '<SNR>\\zs\\d\\+\\ze__SID$')\n  endfunction\n  let s:_s = '<SNR>' . s:_SID() . '_'\n  function! s:_function(fstr) abort\n    return function(substitute(a:fstr, 's:', s:_s, 'g'))\n  endfunction\nendif\n\nfunction! vital#{s:plugin_name}#new() abort\n  return s:new(s:plugin_name)\nendfunction\n\nfunction! vital#{s:plugin_name}#import(...) abort\n  if !exists('s:V')\n    let s:V = s:new(s:plugin_name)\n  endif\n  return call(s:V.import, a:000, s:V)\nendfunction\n\nlet s:Vital = {}\n\nfunction! s:new(plugin_name) abort\n  let base = deepcopy(s:Vital)\n  let base._plugin_name = a:plugin_name\n  return base\nendfunction\n\nfunction! s:vital_files() abort\n  if !exists('s:vital_files')\n    let s:vital_files = map(\n    \\   s:is_vital_vim ? s:_global_vital_files() : s:_self_vital_files(),\n    \\   'fnamemodify(v:val, \":p:gs?[\\\\\\\\/]?/?\")')\n  endif\n  return copy(s:vital_files)\nendfunction\nlet s:Vital.vital_files = s:_function('s:vital_files')\n\nfunction! s:import(name, ...) abort dict\n  let target = {}\n  let functions = []\n  for a in a:000\n    if type(a) == type({})\n      let target = a\n    elseif type(a) == type([])\n      let functions = a\n    endif\n    unlet a\n  endfor\n  let module = self._import(a:name)\n  if empty(functions)\n    call extend(target, module, 'keep')\n  else\n    for f in functions\n      if has_key(module, f) && !has_key(target, f)\n        let target[f] = module[f]\n      endif\n    endfor\n  endif\n  return target\nendfunction\nlet s:Vital.import = s:_function('s:import')\n\nfunction! s:load(...) abort dict\n  for arg in a:000\n    let [name; as] = type(arg) == type([]) ? arg[: 1] : [arg, arg]\n    let target = split(join(as, ''), '\\W\\+')\n    let dict = self\n    let dict_type = type({})\n    while !empty(target)\n      let ns = remove(target, 0)\n      if !has_key(dict, ns)\n        let dict[ns] = {}\n      endif\n      if type(dict[ns]) == dict_type\n        let dict = dict[ns]\n      else\n        unlet dict\n        break\n      endif\n    endwhile\n    if exists('dict')\n      call extend(dict, self._import(name))\n    endif\n    unlet arg\n  endfor\n  return self\nendfunction\nlet s:Vital.load = s:_function('s:load')\n\nfunction! s:unload() abort dict\n  let s:loaded = {}\n  let s:cache_sid = {}\n  unlet! s:vital_files\nendfunction\nlet s:Vital.unload = s:_function('s:unload')\n\nfunction! s:exists(name) abort dict\n  if a:name !~# '\\v^\\u\\w*%(\\.\\u\\w*)*$'\n    throw 'vital: Invalid module name: ' . a:name\n  endif\n  return s:_module_path(a:name) isnot# ''\nendfunction\nlet s:Vital.exists = s:_function('s:exists')\n\nfunction! s:search(pattern) abort dict\n  let paths = s:_extract_files(a:pattern, self.vital_files())\n  let modules = sort(map(paths, 's:_file2module(v:val)'))\n  return s:_uniq(modules)\nendfunction\nlet s:Vital.search = s:_function('s:search')\n\nfunction! s:plugin_name() abort dict\n  return self._plugin_name\nendfunction\nlet s:Vital.plugin_name = s:_function('s:plugin_name')\n\nfunction! s:_self_vital_files() abort\n  let builtin = printf('%s/__%s__/', s:vital_base_dir, s:plugin_name)\n  let installed = printf('%s/_%s/', s:vital_base_dir, s:plugin_name)\n  let base = builtin . ',' . installed\n  return split(globpath(base, '**/*.vim', 1), \"\\n\")\nendfunction\n\nfunction! s:_global_vital_files() abort\n  let pattern = 'autoload/vital/__*__/**/*.vim'\n  return split(globpath(&runtimepath, pattern, 1), \"\\n\")\nendfunction\n\nfunction! s:_extract_files(pattern, files) abort\n  let tr = {'.': '/', '*': '[^/]*', '**': '.*'}\n  let target = substitute(a:pattern, '\\.\\|\\*\\*\\?', '\\=tr[submatch(0)]', 'g')\n  let regexp = printf('autoload/vital/[^/]\\+/%s.vim$', target)\n  return filter(a:files, 'v:val =~# regexp')\nendfunction\n\nfunction! s:_file2module(file) abort\n  let filename = fnamemodify(a:file, ':p:gs?[\\\\/]?/?')\n  let tail = matchstr(filename, 'autoload/vital/_\\w\\+/\\zs.*\\ze\\.vim$')\n  return join(split(tail, '[\\\\/]\\+'), '.')\nendfunction\n\n\" @param {string} name e.g. Data.List\nfunction! s:_import(name) abort dict\n  if has_key(s:loaded, a:name)\n    return copy(s:loaded[a:name])\n  endif\n  let module = self._get_module(a:name)\n  if has_key(module, '_vital_created')\n    call module._vital_created(module)\n  endif\n  let export_module = filter(copy(module), 'v:key =~# \"^\\\\a\"')\n  \" Cache module before calling module.vital_loaded() to avoid cyclic\n  \" dependences but remove the cache if module._vital_loaded() fails.\n  \" let s:loaded[a:name] = export_module\n  let s:loaded[a:name] = export_module\n  if has_key(module, '_vital_loaded')\n    try\n      call module._vital_loaded(vital#{s:plugin_name}#new())\n    catch\n      unlet s:loaded[a:name]\n      throw 'vital: fail to call ._vital_loaded(): ' . v:exception\n    endtry\n  endif\n  return copy(s:loaded[a:name])\nendfunction\nlet s:Vital._import = s:_function('s:_import')\n\n\" s:_get_module() returns module object wihch has all script local functions.\nfunction! s:_get_module(name) abort dict\n  let funcname = s:_import_func_name(self.plugin_name(), a:name)\n  if s:_exists_autoload_func_with_source(funcname)\n    return call(funcname, [])\n  else\n    return s:_get_builtin_module(a:name)\n  endif\nendfunction\n\nfunction! s:_get_builtin_module(name) abort\n return s:sid2sfuncs(s:_module_sid(a:name))\nendfunction\n\nif s:is_vital_vim\n  \" For vital.vim, we can use s:_get_builtin_module directly\n  let s:Vital._get_module = s:_function('s:_get_builtin_module')\nelse\n  let s:Vital._get_module = s:_function('s:_get_module')\nendif\n\nfunction! s:_import_func_name(plugin_name, module_name) abort\n  return printf('vital#_%s#%s#import', a:plugin_name, s:_dot_to_sharp(a:module_name))\nendfunction\n\nfunction! s:_module_sid(name) abort\n  let path = s:_module_path(a:name)\n  if !filereadable(path)\n    throw 'vital: module not found: ' . a:name\n  endif\n  let vital_dir = s:is_vital_vim ? '__\\w\\+__' : printf('_\\{1,2}%s\\%%(__\\)\\?', s:plugin_name)\n  let base = join([vital_dir, ''], '[/\\\\]\\+')\n  let p = base . substitute('' . a:name, '\\.', '[/\\\\\\\\]\\\\+', 'g')\n  let sid = s:_sid(path, p)\n  if !sid\n    call s:_source(path)\n    let sid = s:_sid(path, p)\n    if !sid\n      throw printf('vital: cannot get <SID> from path: %s', path)\n    endif\n  endif\n  return sid\nendfunction\n\nfunction! s:_module_path(name) abort\n  return get(s:_extract_files(a:name, s:vital_files()), 0, '')\nendfunction\n\nfunction! s:_module_sid_base_dir() abort\n  return s:is_vital_vim ? &rtp : s:project_root\nendfunction\n\nfunction! s:_dot_to_sharp(name) abort\n  return substitute(a:name, '\\.', '#', 'g')\nendfunction\n\n\" It will sources autoload file if a given func is not already defined.\nfunction! s:_exists_autoload_func_with_source(funcname) abort\n  if exists('*' . a:funcname)\n    \" Return true if a given func is already defined\n    return 1\n  endif\n  \" source a file which may include a given func definition and try again.\n  let path = 'autoload/' . substitute(substitute(a:funcname, '#[^#]*$', '.vim', ''), '#', '/', 'g')\n  call s:_runtime(path)\n  return exists('*' . a:funcname)\nendfunction\n\nfunction! s:_runtime(path) abort\n  execute 'runtime' fnameescape(a:path)\nendfunction\n\nfunction! s:_source(path) abort\n  execute 'source' fnameescape(a:path)\nendfunction\n\n\" @vimlint(EVL102, 1, l:_)\n\" @vimlint(EVL102, 1, l:__)\nfunction! s:_sid(path, filter_pattern) abort\n  let unified_path = s:_unify_path(a:path)\n  if has_key(s:cache_sid, unified_path)\n    return s:cache_sid[unified_path]\n  endif\n  for line in filter(split(s:_redir(':scriptnames'), \"\\n\"), 'v:val =~# a:filter_pattern')\n    let [_, sid, path; __] = matchlist(line, '^\\s*\\(\\d\\+\\):\\s\\+\\(.\\+\\)\\s*$')\n    if s:_unify_path(path) is# unified_path\n      let s:cache_sid[unified_path] = sid\n      return s:cache_sid[unified_path]\n    endif\n  endfor\n  return 0\nendfunction\n\nfunction! s:_redir(cmd) abort\n  let [save_verbose, save_verbosefile] = [&verbose, &verbosefile]\n  set verbose=0 verbosefile=\n  redir => res\n    silent! execute a:cmd\n  redir END\n  let [&verbose, &verbosefile] = [save_verbose, save_verbosefile]\n  return res\nendfunction\n\nif filereadable(expand('<sfile>:r') . '.VIM') \" is case-insensitive or not\n  let s:_unify_path_cache = {}\n  \" resolve() is slow, so we cache results.\n  \" Note: On windows, vim can't expand path names from 8.3 formats.\n  \" So if getting full path via <sfile> and $HOME was set as 8.3 format,\n  \" vital load duplicated scripts. Below's :~ avoid this issue.\n  function! s:_unify_path(path) abort\n    if has_key(s:_unify_path_cache, a:path)\n      return s:_unify_path_cache[a:path]\n    endif\n    let value = tolower(fnamemodify(resolve(fnamemodify(\n    \\                   a:path, ':p')), ':~:gs?[\\\\/]?/?'))\n    let s:_unify_path_cache[a:path] = value\n    return value\n  endfunction\nelse\n  function! s:_unify_path(path) abort\n    return resolve(fnamemodify(a:path, ':p:gs?[\\\\/]?/?'))\n  endfunction\nendif\n\n\" copied and modified from Vim.ScriptLocal\nlet s:SNR = join(map(range(len(\"\\<SNR>\")), '\"[\\\\x\" . printf(\"%0x\", char2nr(\"\\<SNR>\"[v:val])) . \"]\"'), '')\nfunction! s:sid2sfuncs(sid) abort\n  let fs = split(s:_redir(printf(':function /^%s%s_', s:SNR, a:sid)), \"\\n\")\n  let r = {}\n  let pattern = printf('\\m^function\\s<SNR>%d_\\zs\\w\\{-}\\ze(', a:sid)\n  for fname in map(fs, 'matchstr(v:val, pattern)')\n    let r[fname] = function(s:_sfuncname(a:sid, fname))\n  endfor\n  return r\nendfunction\n\n\"\" Return funcname of script local functions with SID\nfunction! s:_sfuncname(sid, funcname) abort\n  return printf('<SNR>%s_%s', a:sid, a:funcname)\nendfunction\n\nif exists('*uniq')\n  function! s:_uniq(list) abort\n    return uniq(a:list)\n  endfunction\nelse\n  function! s:_uniq(list) abort\n    let i = len(a:list) - 1\n    while 0 < i\n      if a:list[i] ==# a:list[i - 1]\n        call remove(a:list, i)\n      endif\n      let i -= 1\n    endwhile\n    return a:list\n  endfunction\nendif\n"
  },
  {
    "path": "autoload/vital/incsearch_fuzzy.vital",
    "content": "incsearch_fuzzy\n6e682fce672da9da08aee5db517d227be5ef663f\n\nData.String.Converter\n"
  },
  {
    "path": "autoload/vital.vim",
    "content": "function! vital#of(name) abort\n  let files = globpath(&runtimepath, 'autoload/vital/' . a:name . '.vital', 1)\n  let file = split(files, \"\\n\")\n  if empty(file)\n    throw 'vital: version file not found: ' . a:name\n  endif\n  let ver = readfile(file[0], 'b')\n  if empty(ver)\n    throw 'vital: invalid version file: ' . a:name\n  endif\n  return vital#_{substitute(ver[0], '\\W', '', 'g')}#new()\nendfunction\n"
  },
  {
    "path": "plugin/incsearch/fuzzy.vim",
    "content": "\"=============================================================================\n\" FILE: plugin/incsearch/fuzzy.vim\n\" AUTHOR: haya14busa\n\" License: MIT license\n\"=============================================================================\nscriptencoding utf-8\nif expand('%:p') ==# expand('<sfile>:p')\n  unlet! g:loaded_incsearch_fuzzy\nendif\nif exists('g:loaded_incsearch_fuzzy')\n  finish\nendif\nlet g:loaded_incsearch_fuzzy = 1\nlet s:save_cpo = &cpo\nset cpo&vim\n\nfunction! s:config_fuzzy(...) abort\n  return incsearch#config#fuzzy#make(get(a:, 1, {}))\nendfunction\n\nfunction! s:config_fuzzyword(...) abort\n  return incsearch#config#fuzzyword#make(get(a:, 1, {}))\nendfunction\n\nfunction! s:config_fuzzyspell(...) abort\n  return incsearch#config#fuzzyspell#make(get(a:, 1, {}))\nendfunction\n\nnoremap <silent><expr> <Plug>(incsearch-fuzzy-/) incsearch#go(<SID>config_fuzzy())\nnoremap <silent><expr> <Plug>(incsearch-fuzzy-?) incsearch#go(<SID>config_fuzzy({'command': '?'}))\nnoremap <silent><expr> <Plug>(incsearch-fuzzy-stay) incsearch#go(<SID>config_fuzzy({'is_stay': 1}))\n\nnoremap <silent><expr> <Plug>(incsearch-fuzzyword-/) incsearch#go(<SID>config_fuzzyword())\nnoremap <silent><expr> <Plug>(incsearch-fuzzyword-?) incsearch#go(<SID>config_fuzzyword({'command': '?'}))\nnoremap <silent><expr> <Plug>(incsearch-fuzzyword-stay) incsearch#go(<SID>config_fuzzyword({'is_stay': 1}))\n\nnoremap <silent><expr> <Plug>(incsearch-fuzzyspell-/) incsearch#go(<SID>config_fuzzyspell())\nnoremap <silent><expr> <Plug>(incsearch-fuzzyspell-?) incsearch#go(<SID>config_fuzzyspell({'command': '?'}))\nnoremap <silent><expr> <Plug>(incsearch-fuzzyspell-stay) incsearch#go(<SID>config_fuzzyspell({'is_stay': 1}))\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\" __END__\n\" vim: expandtab softtabstop=2 shiftwidth=2 foldmethod=marker\n"
  }
]