diff -r b5f3c688fb68 -r fd505fd00e63 glimpse/plugin/glimpse.vim --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/glimpse/plugin/glimpse.vim Thu Mar 19 16:47:44 2009 +0000 @@ -0,0 +1,149 @@ +" vim: set noet nosta sw=4 ts=4 fdm=marker : +" +" A basic Glimpse interface for Vim +" +" Based on a Vim Tip from Jean-Rene David. +" http://vim.wikia.com/wiki/Use_glimpse_from_within_Vim +" +" Mahlon E. Smith +" $Id$ +" +" Here's a tcsh alias that's nice too! +" alias g 'glimpse -winO -F `pwd` \!:1 | sed -e "s|^`pwd`/||"' +" + +" Loaded check {{{ +if exists( 'g:glimpse_loaded' ) + finish +endif +let g:glimpse_loaded = '$Rev$' + +" }}} +" Hook up the functions to the user supplied key bindings. {{{ +" +if exists( 'g:glimpseKey' ) + execute 'map ' . g:glimpseKey . ' :call Glimpse()' +endif + +if exists( 'g:glimpseindexKey' ) + execute 'map ' . g:glimpseindexKey . ' :call GlimpseIndex()' +endif + +" }}} +" Defaults for misc settings {{{ +" +if !exists( 'g:glimpseWindowResultSize' ) + let g:glimpseWindowResultSize = 15 +endif + +if !exists( 'g:glimpseFlags' ) + let g:glimpseFlags = "-iny" +endif + +if !exists( 'g:glimpseindexFlags' ) + let g:glimpseindexFlags = '-M 10 -B -o' +endif + +if !exists( 'g:glimpseErrorFormat' ) + let g:glimpseErrorFormat = '%f: %l: %m' +endif + + +"}}} +" Commands {{{ +" +command! -nargs=* Glimpse :call Glimpse( ) +command! GlimpseIndex :call GlimpseIndex() + + +"}}} +" Glimpse( search_pattern, file_pattern ) {{{ +" +" Run a glimpse search using a pattern from +search_pattern+ and an optional +" +file_pattern+ to limit the breadth of the search. Places results into the +" quickfix window. +" +function! Glimpse( ... ) + + " parse command line opts + " + let l:search_pattern = expand("") + let l:file_pattern = '' + if exists( 'a:1' ) + let l:search_pattern = a:1 + endif + if exists( 'a:2' ) + let l:file_pattern = a:2 + endif + + " everything is based on the cwd so results are relevant to the + " current project. + " + let l:cwd = getcwd() + + " save the original error format, we want to play nice with others. + " + let l:orig_errorformat = &errorformat + execute 'set errorformat=' . escape( g:glimpseErrorFormat, ' ' ) + + " execute the search. + " + let l:cmd = "glimpse " . g:glimpseFlags . " -F '" . l:cwd . ";" . l:file_pattern . "' '" . l:search_pattern . "'" + let l:result_list = split( system( l:cmd ), "\n" ) + + " no results, escape now + " + if ( empty(l:result_list) ) + let l:no_match_msg = "No matches for '" . l:search_pattern . "'" + if ( l:file_pattern != '' ) + let l:no_match_msg = l:no_match_msg . " in files matching '" . l:file_pattern . "'" + endif + call s:err( l:no_match_msg ) + execute 'set errorformat=' . escape( l:orig_errorformat, ' ' ) + return + endif + + " populate the quickfix window. + " + let l:results = '' + for l:result in l:result_list + " 'pretty up' the glimpse output. + let l:result = substitute( l:result, ('^' . l:cwd . '/'), '', '' ) + let l:result = substitute( l:result, '\(: \d\+:\)\s\+', '\=submatch(1) . " "', '' ) + + let l:results = l:results . l:result . "\n" + endfor + cgetexpr( l:results ) + execute ':copen' . g:glimpseWindowResultSize + + " quick close + nnoremap q :ccl + + " reset error format to the original + execute 'set errorformat=' . escape( l:orig_errorformat, ' ' ) +endfunction + + +" }}} +" GlimpseReindex() {{{ +" +" Update local indexes for the current working directory. +" Results of the index are placed into the location list. (:lopen to view.) +" +function! GlimpseIndex() + let l:cmd = 'glimpseindex ' . g:glimpseindexFlags . ' -f .' + let l:cwd = getcwd() + silent! lgetexpr( system(l:cmd) ) + call s:err( "Updated indexes for '" . l:cwd . "'" ) +endfunction + + +" }}} +" s:err( msg ) {{{ +" +" Notify user in a consistent fashion. +" +function! s:err( msg ) + echohl WarningMsg|echomsg 'glimpse: ' . a:msg|echohl None +endfunction " }}} +