]> git.r.bdr.sh - rbdr/dotfiles/blame - vim/plugin/SearchComplete.vim
Add weechat, ack, git and nethack
[rbdr/dotfiles] / vim / plugin / SearchComplete.vim
CommitLineData
0d23b6e5
BB
1" SearchComplete.vim
2" Author: Chris Russell
3" Version: 1.1
4" License: GPL v2.0
5"
6" Description:
7" This script defineds functions and key mappings for Tab completion in
8" searches.
9"
10" Help:
11" This script catches the <Tab> character when using the '/' search
12" command. Pressing Tab will expand the current partial word to the
13" next matching word starting with the partial word.
14"
15" If you want to match a tab, use the '\t' pattern.
16"
17" Installation:
18" Simply drop this file into your $HOME/.vim/plugin directory.
19"
20" Changelog:
21" 2002-11-08 v1.1
22" Convert to unix eol
23" 2002-11-05 v1.0
24" Initial release
25"
26" TODO:
27"
28
29
30"--------------------------------------------------
31" Avoid multiple sourcing
32"--------------------------------------------------
33if exists( "loaded_search_complete" )
34 finish
35endif
36let loaded_search_complete = 1
37
38
39"--------------------------------------------------
40" Key mappings
41"--------------------------------------------------
42noremap / :call SearchCompleteStart()<CR>/
43
44
45"--------------------------------------------------
46" Set mappings for search complete
47"--------------------------------------------------
48function! SearchCompleteStart()
49 cnoremap <Tab> <C-C>:call SearchComplete()<CR>/<C-R>s
50 cnoremap <silent> <CR> <CR>:call SearchCompleteStop()<CR>
51 cnoremap <silent> <Esc> <C-C>:call SearchCompleteStop()<CR>
52endfunction
53
54"--------------------------------------------------
55" Tab completion in / search
56"--------------------------------------------------
57function! SearchComplete()
58 " get current cursor position
59 let l:loc = col( "." ) - 1
60 " get partial search and delete
61 let l:search = histget( '/', -1 )
62 call histdel( '/', -1 )
63 " check if new search
64 if l:search == @s
65 " get root search string
66 let l:search = b:searchcomplete
67 " increase number of autocompletes
68 let b:searchcompletedepth = b:searchcompletedepth . "\<C-N>"
69 else
70 " one autocomplete
71 let b:searchcompletedepth = "\<C-N>"
72 endif
73 " store origional search parameter
74 let b:searchcomplete = l:search
75 " set paste option to disable indent options
76 let l:paste = &paste
77 setlocal paste
78 " on a temporary line put search string and use autocomplete
79 execute "normal! A\n" . l:search . b:searchcompletedepth
80 " get autocomplete result
81 let @s = getline( line( "." ) )
82 " undo and return to first char
83 execute "normal! u0"
84 " return to cursor position
85 if l:loc > 0
86 execute "normal! ". l:loc . "l"
87 endif
88 " reset paste option
89 let &paste = l:paste
90endfunction
91
92"--------------------------------------------------
93" Remove search complete mappings
94"--------------------------------------------------
95function! SearchCompleteStop()
96 cunmap <Tab>
97 cunmap <CR>
98 cunmap <Esc>
99endfunction
100