let s:script_dir = expand(':p:h:h') let s:script_db = s:script_dir . '/scripts.db' let s:init_sql = 'create virtual table plugins using fts4 (plugin, file, type, content);' let s:content_sql = 'insert into plugins values("%s", "%s", "%s", "%s")' function! scripts#query(sql) let sql = 'sqlite3 ' . s:script_db . " '" . a:sql . "'" return system(sql) endfunc function! scripts#escape(value) return substitute(substitute(a:value, '"', '""', 'g'), "'", "'\"'\"'", 'g') endfunc function! scripts#init() if filereadable(s:script_db) call delete(s:script_db) endif call scripts#query(s:init_sql) redir => scripts silent scriptnames redir END for s in split(scripts, "\n") if s == "" continue endif let file = matchstr(s, '^\s*\d\+:\s*\zs\(.*\)') let content = readfile(file) let plugin = '' if file =~ '/\.\?\(ex\|gvim\|vim\)rc$' let type = 'vimrc' let plugin = matchstr(file, '/\zs.\+\ze/\.\?\(ex\|gvim\|vim\)rc$') elseif file =~ '/autoload/' let type = 'autoload' elseif file =~ '/after/' let type = matchstr(file, '/\zsafter/.\+\ze/[^/]\+$') else let type = matchstr(file, '.*/\zs.\+\ze/[^/]\+$') endif if plugin == '' let plugin = matchstr(file, '.*/\zs.\+\ze/' . type) endif echo scripts#query(printf(s:content_sql, scripts#escape(plugin), scripts#escape(file), scripts#escape(type), scripts#escape(join(content, "\n")))) endfor endfunction command! ScriptMatch echo scripts#query('select file from plugins where content match "' . scripts#escape() . '"')