You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.6 KiB
47 lines
1.6 KiB
let s:script_dir = expand('<sfile>: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(<q-args>) . '"')
|
|
|