Added SearchComplete
This commit is contained in:
parent
4e4ba098d6
commit
9b88b794a1
100
vim/bundle/SearchComplete/plugin/SearchComplete.vim
Normal file
100
vim/bundle/SearchComplete/plugin/SearchComplete.vim
Normal file
|
@ -0,0 +1,100 @@
|
|||
" SearchComplete.vim
|
||||
" Author: Chris Russell
|
||||
" Version: 1.1
|
||||
" License: GPL v2.0
|
||||
"
|
||||
" Description:
|
||||
" This script defineds functions and key mappings for Tab completion in
|
||||
" searches.
|
||||
"
|
||||
" Help:
|
||||
" This script catches the <Tab> character when using the '/' search
|
||||
" command. Pressing Tab will expand the current partial word to the
|
||||
" next matching word starting with the partial word.
|
||||
"
|
||||
" If you want to match a tab, use the '\t' pattern.
|
||||
"
|
||||
" Installation:
|
||||
" Simply drop this file into your $HOME/.vim/plugin directory.
|
||||
"
|
||||
" Changelog:
|
||||
" 2002-11-08 v1.1
|
||||
" Convert to unix eol
|
||||
" 2002-11-05 v1.0
|
||||
" Initial release
|
||||
"
|
||||
" TODO:
|
||||
"
|
||||
|
||||
|
||||
"--------------------------------------------------
|
||||
" Avoid multiple sourcing
|
||||
"--------------------------------------------------
|
||||
if exists( "loaded_search_complete" )
|
||||
finish
|
||||
endif
|
||||
let loaded_search_complete = 1
|
||||
|
||||
|
||||
"--------------------------------------------------
|
||||
" Key mappings
|
||||
"--------------------------------------------------
|
||||
noremap / :call SearchCompleteStart()<CR>/
|
||||
|
||||
|
||||
"--------------------------------------------------
|
||||
" Set mappings for search complete
|
||||
"--------------------------------------------------
|
||||
function! SearchCompleteStart()
|
||||
cnoremap <Tab> <C-C>:call SearchComplete()<CR>/<C-R>s
|
||||
cnoremap <silent> <CR> <CR>:call SearchCompleteStop()<CR>
|
||||
cnoremap <silent> <Esc> <C-C>:call SearchCompleteStop()<CR>
|
||||
endfunction
|
||||
|
||||
"--------------------------------------------------
|
||||
" Tab completion in / search
|
||||
"--------------------------------------------------
|
||||
function! SearchComplete()
|
||||
" get current cursor position
|
||||
let l:loc = col( "." ) - 1
|
||||
" get partial search and delete
|
||||
let l:search = histget( '/', -1 )
|
||||
call histdel( '/', -1 )
|
||||
" check if new search
|
||||
if l:search == @s
|
||||
" get root search string
|
||||
let l:search = b:searchcomplete
|
||||
" increase number of autocompletes
|
||||
let b:searchcompletedepth = b:searchcompletedepth . "\<C-N>"
|
||||
else
|
||||
" one autocomplete
|
||||
let b:searchcompletedepth = "\<C-N>"
|
||||
endif
|
||||
" store origional search parameter
|
||||
let b:searchcomplete = l:search
|
||||
" set paste option to disable indent options
|
||||
let l:paste = &paste
|
||||
setlocal paste
|
||||
" on a temporary line put search string and use autocomplete
|
||||
execute "normal! A\n" . l:search . b:searchcompletedepth
|
||||
" get autocomplete result
|
||||
let @s = getline( line( "." ) )
|
||||
" undo and return to first char
|
||||
execute "normal! u0"
|
||||
" return to cursor position
|
||||
if l:loc > 0
|
||||
execute "normal! ". l:loc . "l"
|
||||
endif
|
||||
" reset paste option
|
||||
let &paste = l:paste
|
||||
endfunction
|
||||
|
||||
"--------------------------------------------------
|
||||
" Remove search complete mappings
|
||||
"--------------------------------------------------
|
||||
function! SearchCompleteStop()
|
||||
cunmap <Tab>
|
||||
cunmap <CR>
|
||||
cunmap <Esc>
|
||||
endfunction
|
||||
|
Loading…
Reference in New Issue
Block a user