Skip to content

Commit ef9e072

Browse files
committed
Tag and Quickfix extensions
* New extensions for searching tag and quickfix. * Option to update the results lazily. Close kien#37.
1 parent dee2f5a commit ef9e072

File tree

8 files changed

+332
-133
lines changed

8 files changed

+332
-133
lines changed

autoload/ctrlp.vim

Lines changed: 134 additions & 92 deletions
Large diffs are not rendered by default.

autoload/ctrlp/mrufiles.vim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77
" Static variables {{{
88
fu! ctrlp#mrufiles#opts()
99
let opts = {
10-
\ 'g:ctrlp_mruf_max': ['s:max', 150],
10+
\ 'g:ctrlp_mruf_max': ['s:max', 250],
1111
\ 'g:ctrlp_mruf_include': ['s:include', ''],
1212
\ 'g:ctrlp_mruf_exclude': ['s:exclude', ''],
1313
\ 'g:ctrlp_mruf_case_sensitive': ['s:csen', 1],
1414
\ }
1515
for [ke, va] in items(opts)
16-
exe 'let' va[0] '=' string(exists(ke) ? eval(ke) : va[1]) '| unl!' ke
16+
exe 'let' va[0] '=' string(exists(ke) ? eval(ke) : va[1])
1717
endfo
1818
endf
1919
cal ctrlp#mrufiles#opts()

autoload/ctrlp/quickfix.vim

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
" =============================================================================
2+
" File: autoload/ctrlp/quickfix.vim
3+
" Description: Quickfix extension
4+
" Author: Kien Nguyen <github.com/kien>
5+
" =============================================================================
6+
7+
" Init {{{
8+
if exists('g:loaded_ctrlp_quickfix') && g:loaded_ctrlp_quickfix
9+
fini
10+
en
11+
let g:loaded_ctrlp_quickfix = 1
12+
13+
let s:var_qf = ['ctrlp#quickfix#init()', 'ctrlp#quickfix#accept', 'quickfix',
14+
\ 'qfx', [1]]
15+
16+
let g:ctrlp_ext_vars = exists('g:ctrlp_ext_vars') && !empty(g:ctrlp_ext_vars)
17+
\ ? add(g:ctrlp_ext_vars, s:var_qf) : [s:var_qf]
18+
19+
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
20+
21+
fu! s:lineout(dict)
22+
retu printf('%s|%d:%d| %s', bufname(a:dict['bufnr']), a:dict['lnum'],
23+
\ a:dict['col'], matchstr(a:dict['text'], '\s*\zs.*\S'))
24+
endf
25+
"}}}
26+
" Public {{{
27+
fu! ctrlp#quickfix#init()
28+
let g:ctrlp_nolimit = 1
29+
sy match CtrlPqfLineCol '|\zs\d\+:\d\+\ze|'
30+
hi def link CtrlPqfLineCol Search
31+
retu map(getqflist(), 's:lineout(v:val)')
32+
endf
33+
34+
fu! ctrlp#quickfix#accept(mode, str)
35+
let items = matchlist(a:str, '^\([^|]\+\ze\)|\(\d\+\):\(\d\+\)|')
36+
let [md, filpath] = [a:mode, fnamemodify(items[1], ':p')]
37+
if empty(filpath) | retu | en
38+
cal ctrlp#exit()
39+
let cmd = md == 't' ? 'tabe' : md == 'h' ? 'new' : md == 'v' ? 'vne'
40+
\ : ctrlp#normcmd('e')
41+
let cmd = cmd == 'e' && &modified ? 'hid e' : cmd
42+
try
43+
exe cmd.' '.ctrlp#fnesc(filpath)
44+
cat
45+
cal ctrlp#msg("Invalid command or argument.")
46+
fina
47+
cal cursor(items[2], items[3]) | sil! norm! zOzz
48+
endt
49+
endf
50+
51+
fu! ctrlp#quickfix#id()
52+
retu s:id
53+
endf
54+
"}}}
55+
56+
" vim:fen:fdl=0:ts=2:sw=2:sts=2

autoload/ctrlp/tag.vim

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
" =============================================================================
2+
" File: autoload/ctrlp/tag.vim
3+
" Description: Tag file extension
4+
" Author: Kien Nguyen <github.com/kien>
5+
" =============================================================================
6+
7+
" Init {{{
8+
if exists('g:loaded_ctrlp_tag') && g:loaded_ctrlp_tag
9+
fini
10+
en
11+
let [g:loaded_ctrlp_tag, g:ctrlp_newtag] = [1, 0]
12+
13+
let s:tag_var = ['ctrlp#tag#init()', 'ctrlp#tag#accept', 'tags', 'tag']
14+
15+
let g:ctrlp_ext_vars = exists('g:ctrlp_ext_vars') && !empty(g:ctrlp_ext_vars)
16+
\ ? add(g:ctrlp_ext_vars, s:tag_var) : [s:tag_var]
17+
18+
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
19+
"}}}
20+
" Public {{{
21+
fu! ctrlp#tag#init()
22+
if exists('s:cwd') && s:cwd == getcwd()
23+
let newtags = 0
24+
el
25+
let s:cwd = getcwd()
26+
let newtags = 1
27+
en
28+
if ( newtags && !exists('g:ctrlp_alltags['''.s:cwd.''']') ) || g:ctrlp_newtag
29+
let alltags = map(taglist('.*'), 'v:val["name"]." ".v:val["filename"]')
30+
cal extend(g:ctrlp_alltags, { s:cwd : alltags })
31+
let g:ctrlp_newtag = 0
32+
en
33+
sy match CtrlPTagFilename '\zs\t.*\ze$'
34+
hi link CtrlPTagFilename Comment
35+
retu g:ctrlp_alltags[s:cwd]
36+
endf
37+
38+
fu! ctrlp#tag#accept(mode, str)
39+
cal ctrlp#exit()
40+
let md = a:mode
41+
let cmd = md == 't' ? 'tabnew' : md == 'h' ? 'new' : md == 'v' ? 'vne'
42+
\ : ctrlp#normcmd('ene')
43+
let cmd = cmd == 'ene' && &modified ? 'hid ene' : cmd
44+
try
45+
exe cmd
46+
cal ctrlp#setdir(s:cwd)
47+
exe 'ta' split(a:str, '\t[^\t]\+$')[0]
48+
cat
49+
cal ctrlp#msg("Tag not found.")
50+
endt
51+
endf
52+
53+
fu! ctrlp#tag#id()
54+
retu s:id
55+
endf
56+
"}}}
57+
58+
" vim:fen:fdl=0:ts=2:sw=2:sts=2

autoload/ctrlp/utils.vim

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,10 @@ fu! ctrlp#utils#cachedir()
2626
retu s:cache_dir
2727
endf
2828

29-
fu! ctrlp#utils#cachefile()
30-
let cache_file = substitute(getcwd(), '\([\/]\|^\a\zs:\)', '%', 'g').'.txt'
31-
retu s:cache_dir.s:lash.cache_file
29+
fu! ctrlp#utils#cachefile(...)
30+
let tail = exists('a:1') ? '.'.a:1 : ''
31+
let cache_file = substitute(getcwd(), '\([\/]\|^\a\zs:\)', '%', 'g').tail.'.txt'
32+
retu exists('a:1') ? cache_file : s:cache_dir.s:lash.cache_file
3233
endf
3334

3435
fu! ctrlp#utils#readfile(file)

0 commit comments

Comments
 (0)