utils 0.0.57 → 0.0.58
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/bin/on_change +31 -0
- data/bin/probe +7 -3
- data/lib/utils/config/vim/autoload/ctrlp/bookmarkdir.vim +139 -0
- data/lib/utils/config/vim/autoload/ctrlp/buffertag.vim +238 -0
- data/lib/utils/config/vim/autoload/ctrlp/changes.vim +96 -0
- data/lib/utils/config/vim/autoload/ctrlp/dir.vim +90 -0
- data/lib/utils/config/vim/autoload/ctrlp/line.vim +63 -0
- data/lib/utils/config/vim/autoload/ctrlp/mixed.vim +83 -0
- data/lib/utils/config/vim/autoload/ctrlp/mrufiles.vim +119 -0
- data/lib/utils/config/vim/autoload/ctrlp/quickfix.vim +62 -0
- data/lib/utils/config/vim/autoload/ctrlp/rtscript.vim +49 -0
- data/lib/utils/config/vim/autoload/ctrlp/tag.vim +112 -0
- data/lib/utils/config/vim/autoload/ctrlp/undo.vim +154 -0
- data/lib/utils/config/vim/autoload/ctrlp/utils.vim +72 -0
- data/lib/utils/config/vim/autoload/ctrlp.vim +1772 -0
- data/lib/utils/config/vim/autoload/rails.vim +89 -92
- data/lib/utils/config/vim/doc/Decho.txt +372 -0
- data/lib/utils/config/vim/doc/ctrlp.txt +1113 -0
- data/lib/utils/config/vim/doc/rails.txt +1022 -0
- data/lib/utils/config/vim/plugin/Decho.vim +14 -14
- data/lib/utils/config/vim/plugin/cecutil.vim +96 -70
- data/lib/utils/config/vim/plugin/ctrlp.vim +61 -0
- data/lib/utils/config/vim/plugin/rails.vim +2 -5
- data/lib/utils/config/vim/syntax/ruby.vim +1 -1
- data/lib/utils/config/vimrc +14 -15
- data/lib/utils/version.rb +1 -1
- data/utils.gemspec +7 -7
- metadata +24 -5
@@ -0,0 +1,83 @@
|
|
1
|
+
" =============================================================================
|
2
|
+
" File: autoload/ctrlp/mixed.vim
|
3
|
+
" Description: Mixing Files + MRU + Buffers
|
4
|
+
" Author: Kien Nguyen <github.com/kien>
|
5
|
+
" =============================================================================
|
6
|
+
|
7
|
+
" Init {{{1
|
8
|
+
if exists('g:loaded_ctrlp_mixed') && g:loaded_ctrlp_mixed
|
9
|
+
fini
|
10
|
+
en
|
11
|
+
let [g:loaded_ctrlp_mixed, g:ctrlp_newmix] = [1, 0]
|
12
|
+
|
13
|
+
cal add(g:ctrlp_ext_vars, {
|
14
|
+
\ 'init': 'ctrlp#mixed#init(s:compare_lim)',
|
15
|
+
\ 'accept': 'ctrlp#acceptfile',
|
16
|
+
\ 'lname': 'fil + mru + buf',
|
17
|
+
\ 'sname': 'mix',
|
18
|
+
\ 'type': 'path',
|
19
|
+
\ 'opmul': 1,
|
20
|
+
\ 'specinput': 1,
|
21
|
+
\ })
|
22
|
+
|
23
|
+
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
24
|
+
" Utilities {{{1
|
25
|
+
fu! s:newcache(cwd)
|
26
|
+
if g:ctrlp_newmix || !has_key(g:ctrlp_allmixes, 'data') | retu 1 | en
|
27
|
+
retu g:ctrlp_allmixes['cwd'] != a:cwd
|
28
|
+
\ || g:ctrlp_allmixes['filtime'] < getftime(ctrlp#utils#cachefile())
|
29
|
+
\ || g:ctrlp_allmixes['mrutime'] < getftime(ctrlp#mrufiles#cachefile())
|
30
|
+
\ || g:ctrlp_allmixes['bufs'] < len(ctrlp#mrufiles#bufs())
|
31
|
+
endf
|
32
|
+
|
33
|
+
fu! s:getnewmix(cwd, clim)
|
34
|
+
if g:ctrlp_newmix
|
35
|
+
cal ctrlp#mrufiles#refresh('raw')
|
36
|
+
let g:ctrlp_newcache = 1
|
37
|
+
en
|
38
|
+
let g:ctrlp_lines = copy(ctrlp#files())
|
39
|
+
cal ctrlp#progress('Mixing...')
|
40
|
+
let mrufs = copy(ctrlp#mrufiles#list('raw'))
|
41
|
+
if exists('+ssl') && &ssl
|
42
|
+
cal map(mrufs, 'tr(v:val, "\\", "/")')
|
43
|
+
en
|
44
|
+
let bufs = map(ctrlp#buffers('id'), 'fnamemodify(bufname(v:val), ":p")')
|
45
|
+
let mrufs = bufs + filter(mrufs, 'index(bufs, v:val) < 0')
|
46
|
+
if len(mrufs) > len(g:ctrlp_lines)
|
47
|
+
cal filter(mrufs, 'stridx(v:val, a:cwd)')
|
48
|
+
el
|
49
|
+
let cwd_mrufs = filter(copy(mrufs), '!stridx(v:val, a:cwd)')
|
50
|
+
let cwd_mrufs = ctrlp#rmbasedir(cwd_mrufs)
|
51
|
+
for each in cwd_mrufs
|
52
|
+
let id = index(g:ctrlp_lines, each)
|
53
|
+
if id >= 0 | cal remove(g:ctrlp_lines, id) | en
|
54
|
+
endfo
|
55
|
+
en
|
56
|
+
cal map(mrufs, 'fnamemodify(v:val, ":.")')
|
57
|
+
let g:ctrlp_lines = len(mrufs) > len(g:ctrlp_lines)
|
58
|
+
\ ? g:ctrlp_lines + mrufs : mrufs + g:ctrlp_lines
|
59
|
+
if len(g:ctrlp_lines) <= a:clim
|
60
|
+
cal sort(g:ctrlp_lines, 'ctrlp#complen')
|
61
|
+
en
|
62
|
+
let g:ctrlp_allmixes = { 'filtime': getftime(ctrlp#utils#cachefile()),
|
63
|
+
\ 'mrutime': getftime(ctrlp#mrufiles#cachefile()), 'cwd': a:cwd,
|
64
|
+
\ 'bufs': len(ctrlp#mrufiles#bufs()), 'data': g:ctrlp_lines }
|
65
|
+
endf
|
66
|
+
" Public {{{1
|
67
|
+
fu! ctrlp#mixed#init(clim)
|
68
|
+
let cwd = getcwd()
|
69
|
+
if s:newcache(cwd)
|
70
|
+
cal s:getnewmix(cwd, a:clim)
|
71
|
+
el
|
72
|
+
let g:ctrlp_lines = g:ctrlp_allmixes['data']
|
73
|
+
en
|
74
|
+
let g:ctrlp_newmix = 0
|
75
|
+
retu g:ctrlp_lines
|
76
|
+
endf
|
77
|
+
|
78
|
+
fu! ctrlp#mixed#id()
|
79
|
+
retu s:id
|
80
|
+
endf
|
81
|
+
"}}}
|
82
|
+
|
83
|
+
" vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
|
@@ -0,0 +1,119 @@
|
|
1
|
+
" =============================================================================
|
2
|
+
" File: autoload/ctrlp/mrufiles.vim
|
3
|
+
" Description: Most Recently Used Files extension
|
4
|
+
" Author: Kien Nguyen <github.com/kien>
|
5
|
+
" =============================================================================
|
6
|
+
|
7
|
+
" Static variables {{{1
|
8
|
+
let [s:mrbs, s:mrufs] = [[], []]
|
9
|
+
|
10
|
+
fu! ctrlp#mrufiles#opts()
|
11
|
+
let [pref, opts] = ['g:ctrlp_mruf_', {
|
12
|
+
\ 'max': ['s:max', 250],
|
13
|
+
\ 'include': ['s:in', ''],
|
14
|
+
\ 'exclude': ['s:ex', ''],
|
15
|
+
\ 'case_sensitive': ['s:cseno', 1],
|
16
|
+
\ 'relative': ['s:re', 0],
|
17
|
+
\ }]
|
18
|
+
for [ke, va] in items(opts)
|
19
|
+
let [{va[0]}, {pref.ke}] = [pref.ke, exists(pref.ke) ? {pref.ke} : va[1]]
|
20
|
+
endfo
|
21
|
+
endf
|
22
|
+
cal ctrlp#mrufiles#opts()
|
23
|
+
" Utilities {{{1
|
24
|
+
fu! s:excl(fn)
|
25
|
+
retu !empty({s:ex}) && a:fn =~# {s:ex}
|
26
|
+
endf
|
27
|
+
|
28
|
+
fu! s:mergelists()
|
29
|
+
let diskmrufs = ctrlp#utils#readfile(ctrlp#mrufiles#cachefile())
|
30
|
+
cal filter(diskmrufs, 'index(s:mrufs, v:val) < 0')
|
31
|
+
let mrufs = s:mrufs + diskmrufs
|
32
|
+
retu s:chop(mrufs)
|
33
|
+
endf
|
34
|
+
|
35
|
+
fu! s:chop(mrufs)
|
36
|
+
if len(a:mrufs) > {s:max} | cal remove(a:mrufs, {s:max}, -1) | en
|
37
|
+
retu a:mrufs
|
38
|
+
endf
|
39
|
+
|
40
|
+
fu! s:reformat(mrufs)
|
41
|
+
if {s:re}
|
42
|
+
let cwd = exists('+ssl') ? tr(getcwd(), '/', '\') : getcwd()
|
43
|
+
cal filter(a:mrufs, '!stridx(v:val, cwd)')
|
44
|
+
en
|
45
|
+
retu map(a:mrufs, 'fnamemodify(v:val, ":.")')
|
46
|
+
endf
|
47
|
+
|
48
|
+
fu! s:record(bufnr)
|
49
|
+
if s:locked | retu | en
|
50
|
+
let bufnr = a:bufnr + 0
|
51
|
+
if bufnr <= 0 | retu | en
|
52
|
+
let bufname = bufname(bufnr)
|
53
|
+
if empty(bufname) | retu | en
|
54
|
+
let fn = fnamemodify(bufname, ':p')
|
55
|
+
let fn = exists('+ssl') ? tr(fn, '/', '\') : fn
|
56
|
+
cal filter(s:mrbs, 'v:val != bufnr')
|
57
|
+
cal insert(s:mrbs, bufnr)
|
58
|
+
if ( !empty({s:in}) && fn !~# {s:in} ) || ( !empty({s:ex}) && fn =~# {s:ex} )
|
59
|
+
\ || !empty(&bt) || !filereadable(fn) | retu
|
60
|
+
en
|
61
|
+
cal filter(s:mrufs, 'v:val !='.( {s:cseno} ? '#' : '?' ).' fn')
|
62
|
+
cal insert(s:mrufs, fn)
|
63
|
+
endf
|
64
|
+
|
65
|
+
fu! s:savetofile(mrufs)
|
66
|
+
cal ctrlp#utils#writecache(a:mrufs, s:cadir, s:cafile)
|
67
|
+
endf
|
68
|
+
" Public {{{1
|
69
|
+
fu! ctrlp#mrufiles#refresh(...)
|
70
|
+
let s:mrufs = s:mergelists()
|
71
|
+
cal filter(s:mrufs, '!empty(ctrlp#utils#glob(v:val, 1)) && !s:excl(v:val)')
|
72
|
+
if exists('+ssl')
|
73
|
+
cal map(s:mrufs, 'tr(v:val, "/", "\\")')
|
74
|
+
cal filter(s:mrufs, 'count(s:mrufs, v:val) == 1')
|
75
|
+
en
|
76
|
+
cal s:savetofile(s:mrufs)
|
77
|
+
retu a:0 && a:1 == 'raw' ? [] : s:reformat(copy(s:mrufs))
|
78
|
+
endf
|
79
|
+
|
80
|
+
fu! ctrlp#mrufiles#remove(files)
|
81
|
+
let s:mrufs = []
|
82
|
+
if a:files != []
|
83
|
+
let s:mrufs = s:mergelists()
|
84
|
+
cal filter(s:mrufs, 'index(a:files, v:val, 0, '.(!{s:cseno}).') < 0')
|
85
|
+
en
|
86
|
+
cal s:savetofile(s:mrufs)
|
87
|
+
retu s:reformat(copy(s:mrufs))
|
88
|
+
endf
|
89
|
+
|
90
|
+
fu! ctrlp#mrufiles#list(...)
|
91
|
+
retu a:0 ? a:1 == 'raw' ? s:mergelists() : 0 : s:reformat(s:mergelists())
|
92
|
+
endf
|
93
|
+
|
94
|
+
fu! ctrlp#mrufiles#bufs()
|
95
|
+
retu s:mrbs
|
96
|
+
endf
|
97
|
+
|
98
|
+
fu! ctrlp#mrufiles#cachefile()
|
99
|
+
if !exists('s:cadir') || !exists('s:cafile')
|
100
|
+
let s:cadir = ctrlp#utils#cachedir().ctrlp#utils#lash().'mru'
|
101
|
+
let s:cafile = s:cadir.ctrlp#utils#lash().'cache.txt'
|
102
|
+
en
|
103
|
+
retu s:cafile
|
104
|
+
endf
|
105
|
+
|
106
|
+
fu! ctrlp#mrufiles#init()
|
107
|
+
if !has('autocmd') | retu | en
|
108
|
+
let s:locked = 0
|
109
|
+
aug CtrlPMRUF
|
110
|
+
au!
|
111
|
+
au BufAdd,BufEnter,BufLeave,BufUnload * cal s:record(expand('<abuf>', 1))
|
112
|
+
au QuickFixCmdPre *vimgrep* let s:locked = 1
|
113
|
+
au QuickFixCmdPost *vimgrep* let s:locked = 0
|
114
|
+
au VimLeavePre * cal s:savetofile(s:mergelists())
|
115
|
+
aug END
|
116
|
+
endf
|
117
|
+
"}}}
|
118
|
+
|
119
|
+
" vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
|
@@ -0,0 +1,62 @@
|
|
1
|
+
" =============================================================================
|
2
|
+
" File: autoload/ctrlp/quickfix.vim
|
3
|
+
" Description: Quickfix extension
|
4
|
+
" Author: Kien Nguyen <github.com/kien>
|
5
|
+
" =============================================================================
|
6
|
+
|
7
|
+
" Init {{{1
|
8
|
+
if exists('g:loaded_ctrlp_quickfix') && g:loaded_ctrlp_quickfix
|
9
|
+
fini
|
10
|
+
en
|
11
|
+
let g:loaded_ctrlp_quickfix = 1
|
12
|
+
|
13
|
+
cal add(g:ctrlp_ext_vars, {
|
14
|
+
\ 'init': 'ctrlp#quickfix#init()',
|
15
|
+
\ 'accept': 'ctrlp#quickfix#accept',
|
16
|
+
\ 'lname': 'quickfix',
|
17
|
+
\ 'sname': 'qfx',
|
18
|
+
\ 'type': 'line',
|
19
|
+
\ 'sort': 0,
|
20
|
+
\ 'nolim': 1,
|
21
|
+
\ })
|
22
|
+
|
23
|
+
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
24
|
+
|
25
|
+
fu! s:lineout(dict)
|
26
|
+
retu printf('%s|%d:%d| %s', bufname(a:dict['bufnr']), a:dict['lnum'],
|
27
|
+
\ a:dict['col'], matchstr(a:dict['text'], '\s*\zs.*\S'))
|
28
|
+
endf
|
29
|
+
" Utilities {{{1
|
30
|
+
fu! s:syntax()
|
31
|
+
if !ctrlp#nosy()
|
32
|
+
cal ctrlp#hicheck('CtrlPqfLineCol', 'Search')
|
33
|
+
sy match CtrlPqfLineCol '|\zs\d\+:\d\+\ze|'
|
34
|
+
en
|
35
|
+
endf
|
36
|
+
" Public {{{1
|
37
|
+
fu! ctrlp#quickfix#init()
|
38
|
+
cal s:syntax()
|
39
|
+
retu map(getqflist(), 's:lineout(v:val)')
|
40
|
+
endf
|
41
|
+
|
42
|
+
fu! ctrlp#quickfix#accept(mode, str)
|
43
|
+
let items = matchlist(a:str, '^\([^|]\+\ze\)|\(\d\+\):\(\d\+\)|')
|
44
|
+
if items == [] | retu | en
|
45
|
+
let [md, filpath] = [a:mode, fnamemodify(items[1], ':p')]
|
46
|
+
if empty(filpath) | retu | en
|
47
|
+
cal ctrlp#exit()
|
48
|
+
let cmd = md == 't' ? 'tabe' : md == 'h' ? 'new' : md == 'v' ? 'vne'
|
49
|
+
\ : ctrlp#normcmd('e')
|
50
|
+
let cmd = cmd == 'e' && &modified ? 'hid e' : cmd
|
51
|
+
exe cmd ctrlp#fnesc(filpath)
|
52
|
+
cal cursor(items[2], items[3])
|
53
|
+
sil! norm! zvzz
|
54
|
+
cal ctrlp#setlcdir()
|
55
|
+
endf
|
56
|
+
|
57
|
+
fu! ctrlp#quickfix#id()
|
58
|
+
retu s:id
|
59
|
+
endf
|
60
|
+
"}}}
|
61
|
+
|
62
|
+
" vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
|
@@ -0,0 +1,49 @@
|
|
1
|
+
" =============================================================================
|
2
|
+
" File: autoload/ctrlp/rtscript.vim
|
3
|
+
" Description: Runtime scripts extension
|
4
|
+
" Author: Kien Nguyen <github.com/kien>
|
5
|
+
" =============================================================================
|
6
|
+
|
7
|
+
" Init {{{1
|
8
|
+
if exists('g:loaded_ctrlp_rtscript') && g:loaded_ctrlp_rtscript
|
9
|
+
fini
|
10
|
+
en
|
11
|
+
let [g:loaded_ctrlp_rtscript, g:ctrlp_newrts] = [1, 0]
|
12
|
+
|
13
|
+
cal add(g:ctrlp_ext_vars, {
|
14
|
+
\ 'init': 'ctrlp#rtscript#init()',
|
15
|
+
\ 'accept': 'ctrlp#acceptfile',
|
16
|
+
\ 'lname': 'runtime scripts',
|
17
|
+
\ 'sname': 'rts',
|
18
|
+
\ 'type': 'path',
|
19
|
+
\ 'opmul': 1,
|
20
|
+
\ })
|
21
|
+
|
22
|
+
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
23
|
+
" Public {{{1
|
24
|
+
fu! ctrlp#rtscript#init()
|
25
|
+
if g:ctrlp_newrts
|
26
|
+
\ || !( exists('g:ctrlp_rtscache') && g:ctrlp_rtscache[0] == &rtp )
|
27
|
+
sil! cal ctrlp#progress('Indexing...')
|
28
|
+
let entries = split(globpath(&rtp, '**/*.*'), "\n")
|
29
|
+
cal filter(entries, 'count(entries, v:val) == 1')
|
30
|
+
let [entries, echoed] = [ctrlp#dirnfile(entries)[1], 1]
|
31
|
+
el
|
32
|
+
let [entries, results] = g:ctrlp_rtscache[2:3]
|
33
|
+
en
|
34
|
+
let cwd = getcwd()
|
35
|
+
if g:ctrlp_newrts
|
36
|
+
\ || !( exists('g:ctrlp_rtscache') && g:ctrlp_rtscache[:1] == [&rtp, cwd] )
|
37
|
+
if !exists('echoed') | sil! cal ctrlp#progress('Processing...') | en
|
38
|
+
let results = map(copy(entries), 'fnamemodify(v:val, '':.'')')
|
39
|
+
en
|
40
|
+
let [g:ctrlp_rtscache, g:ctrlp_newrts] = [[&rtp, cwd, entries, results], 0]
|
41
|
+
retu results
|
42
|
+
endf
|
43
|
+
|
44
|
+
fu! ctrlp#rtscript#id()
|
45
|
+
retu s:id
|
46
|
+
endf
|
47
|
+
"}}}
|
48
|
+
|
49
|
+
" vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
|
@@ -0,0 +1,112 @@
|
|
1
|
+
" =============================================================================
|
2
|
+
" File: autoload/ctrlp/tag.vim
|
3
|
+
" Description: Tag file extension
|
4
|
+
" Author: Kien Nguyen <github.com/kien>
|
5
|
+
" =============================================================================
|
6
|
+
|
7
|
+
" Init {{{1
|
8
|
+
if exists('g:loaded_ctrlp_tag') && g:loaded_ctrlp_tag
|
9
|
+
fini
|
10
|
+
en
|
11
|
+
let g:loaded_ctrlp_tag = 1
|
12
|
+
|
13
|
+
cal add(g:ctrlp_ext_vars, {
|
14
|
+
\ 'init': 'ctrlp#tag#init()',
|
15
|
+
\ 'accept': 'ctrlp#tag#accept',
|
16
|
+
\ 'lname': 'tags',
|
17
|
+
\ 'sname': 'tag',
|
18
|
+
\ 'enter': 'ctrlp#tag#enter()',
|
19
|
+
\ 'type': 'tabs',
|
20
|
+
\ })
|
21
|
+
|
22
|
+
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
23
|
+
" Utilities {{{1
|
24
|
+
fu! s:findcount(str)
|
25
|
+
let [tg, fname] = split(a:str, '\t\+\ze[^\t]\+$')
|
26
|
+
let [fname, tgs] = [expand(fname, 1), taglist('^'.tg.'$')]
|
27
|
+
if empty(tgs) | retu [1, 1] | en
|
28
|
+
let [fnd, ct, pos] = [0, 0, 0]
|
29
|
+
for each in tgs
|
30
|
+
let ct += 1
|
31
|
+
let fulname = fnamemodify(each["filename"], ':p')
|
32
|
+
if stridx(fulname, fname) >= 0
|
33
|
+
\ && strlen(fname) + stridx(fulname, fname) == strlen(fulname)
|
34
|
+
let fnd += 1
|
35
|
+
let pos = ct
|
36
|
+
en
|
37
|
+
if fnd > 1 | brea | en
|
38
|
+
endfo
|
39
|
+
retu [fnd, pos]
|
40
|
+
endf
|
41
|
+
|
42
|
+
fu! s:filter(tags)
|
43
|
+
let [nr, alltags] = [0, a:tags]
|
44
|
+
wh 0 < 1
|
45
|
+
if alltags[nr] =~ '^!' && alltags[nr] !~ '^!_TAG_'
|
46
|
+
let nr += 1
|
47
|
+
con
|
48
|
+
en
|
49
|
+
if alltags[nr] =~ '^!_TAG_' && len(alltags) > nr
|
50
|
+
cal remove(alltags, nr)
|
51
|
+
el
|
52
|
+
brea
|
53
|
+
en
|
54
|
+
endw
|
55
|
+
retu alltags
|
56
|
+
endf
|
57
|
+
|
58
|
+
fu! s:syntax()
|
59
|
+
if !ctrlp#nosy()
|
60
|
+
cal ctrlp#hicheck('CtrlPTabExtra', 'Comment')
|
61
|
+
sy match CtrlPTabExtra '\zs\t.*\ze$'
|
62
|
+
en
|
63
|
+
endf
|
64
|
+
" Public {{{1
|
65
|
+
fu! ctrlp#tag#init()
|
66
|
+
if empty(s:tagfiles) | retu [] | en
|
67
|
+
let g:ctrlp_alltags = []
|
68
|
+
let tagfiles = sort(filter(s:tagfiles, 'count(s:tagfiles, v:val) == 1'))
|
69
|
+
for each in tagfiles
|
70
|
+
let alltags = s:filter(ctrlp#utils#readfile(each))
|
71
|
+
cal extend(g:ctrlp_alltags, alltags)
|
72
|
+
endfo
|
73
|
+
cal s:syntax()
|
74
|
+
retu g:ctrlp_alltags
|
75
|
+
endf
|
76
|
+
|
77
|
+
fu! ctrlp#tag#accept(mode, str)
|
78
|
+
cal ctrlp#exit()
|
79
|
+
let str = matchstr(a:str, '^[^\t]\+\t\+[^\t]\+\ze\t')
|
80
|
+
let [tg, fnd] = [split(str, '^[^\t]\+\zs\t')[0], s:findcount(str)]
|
81
|
+
let cmds = {
|
82
|
+
\ 't': ['tab sp', 'tab stj'],
|
83
|
+
\ 'h': ['sp', 'stj'],
|
84
|
+
\ 'v': ['vs', 'vert stj'],
|
85
|
+
\ 'e': ['', 'tj'],
|
86
|
+
\ }
|
87
|
+
let cmd = fnd[0] == 1 ? cmds[a:mode][0] : cmds[a:mode][1]
|
88
|
+
let cmd = cmd == 'tj' && &modified ? 'hid '.cmd : cmd
|
89
|
+
let cmd = cmd =~ '^tab' ? tabpagenr('$').cmd : cmd
|
90
|
+
if fnd[0] == 1
|
91
|
+
if cmd != ''
|
92
|
+
exe cmd
|
93
|
+
en
|
94
|
+
exe fnd[1].'ta' tg
|
95
|
+
el
|
96
|
+
exe cmd tg
|
97
|
+
en
|
98
|
+
cal ctrlp#setlcdir()
|
99
|
+
endf
|
100
|
+
|
101
|
+
fu! ctrlp#tag#id()
|
102
|
+
retu s:id
|
103
|
+
endf
|
104
|
+
|
105
|
+
fu! ctrlp#tag#enter()
|
106
|
+
let tfs = tagfiles()
|
107
|
+
let s:tagfiles = tfs != [] ? filter(map(tfs, 'fnamemodify(v:val, ":p")'),
|
108
|
+
\ 'filereadable(v:val)') : []
|
109
|
+
endf
|
110
|
+
"}}}
|
111
|
+
|
112
|
+
" vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
|
@@ -0,0 +1,154 @@
|
|
1
|
+
" =============================================================================
|
2
|
+
" File: autoload/ctrlp/undo.vim
|
3
|
+
" Description: Undo extension
|
4
|
+
" Author: Kien Nguyen <github.com/kien>
|
5
|
+
" =============================================================================
|
6
|
+
|
7
|
+
" Init {{{1
|
8
|
+
if ( exists('g:loaded_ctrlp_undo') && g:loaded_ctrlp_undo )
|
9
|
+
fini
|
10
|
+
en
|
11
|
+
let g:loaded_ctrlp_undo = 1
|
12
|
+
|
13
|
+
cal add(g:ctrlp_ext_vars, {
|
14
|
+
\ 'init': 'ctrlp#undo#init()',
|
15
|
+
\ 'accept': 'ctrlp#undo#accept',
|
16
|
+
\ 'lname': 'undo',
|
17
|
+
\ 'sname': 'udo',
|
18
|
+
\ 'enter': 'ctrlp#undo#enter()',
|
19
|
+
\ 'exit': 'ctrlp#undo#exit()',
|
20
|
+
\ 'type': 'line',
|
21
|
+
\ 'sort': 0,
|
22
|
+
\ 'nolim': 1,
|
23
|
+
\ })
|
24
|
+
|
25
|
+
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
26
|
+
|
27
|
+
let s:text = map(['second', 'seconds', 'minutes', 'hours', 'days', 'weeks',
|
28
|
+
\ 'months', 'years'], '" ".v:val." ago"')
|
29
|
+
" Utilities {{{1
|
30
|
+
fu! s:getundo()
|
31
|
+
if exists('*undotree')
|
32
|
+
\ && ( v:version > 703 || ( v:version == 703 && has('patch005') ) )
|
33
|
+
retu [1, undotree()]
|
34
|
+
el
|
35
|
+
redi => result
|
36
|
+
sil! undol
|
37
|
+
redi END
|
38
|
+
retu [0, split(result, "\n")[1:]]
|
39
|
+
en
|
40
|
+
endf
|
41
|
+
|
42
|
+
fu! s:flatten(tree, cur)
|
43
|
+
let flatdict = {}
|
44
|
+
for each in a:tree
|
45
|
+
let saved = has_key(each, 'save') ? 'saved' : ''
|
46
|
+
let current = each['seq'] == a:cur ? 'current' : ''
|
47
|
+
cal extend(flatdict, { each['seq'] : [each['time'], saved, current] })
|
48
|
+
if has_key(each, 'alt')
|
49
|
+
cal extend(flatdict, s:flatten(each['alt'], a:cur))
|
50
|
+
en
|
51
|
+
endfo
|
52
|
+
retu flatdict
|
53
|
+
endf
|
54
|
+
|
55
|
+
fu! s:elapsed(nr)
|
56
|
+
let [text, time] = [s:text, localtime() - a:nr]
|
57
|
+
let mins = time / 60
|
58
|
+
let hrs = time / 3600
|
59
|
+
let days = time / 86400
|
60
|
+
let wks = time / 604800
|
61
|
+
let mons = time / 2592000
|
62
|
+
let yrs = time / 31536000
|
63
|
+
if yrs > 1
|
64
|
+
retu yrs.text[7]
|
65
|
+
elsei mons > 1
|
66
|
+
retu mons.text[6]
|
67
|
+
elsei wks > 1
|
68
|
+
retu wks.text[5]
|
69
|
+
elsei days > 1
|
70
|
+
retu days.text[4]
|
71
|
+
elsei hrs > 1
|
72
|
+
retu hrs.text[3]
|
73
|
+
elsei mins > 1
|
74
|
+
retu mins.text[2]
|
75
|
+
elsei time == 1
|
76
|
+
retu time.text[0]
|
77
|
+
elsei time < 120
|
78
|
+
retu time.text[1]
|
79
|
+
en
|
80
|
+
endf
|
81
|
+
|
82
|
+
fu! s:syntax()
|
83
|
+
if ctrlp#nosy() | retu | en
|
84
|
+
for [ke, va] in items({'T': 'Directory', 'Br': 'Comment', 'Nr': 'String',
|
85
|
+
\ 'Sv': 'Comment', 'Po': 'Title'})
|
86
|
+
cal ctrlp#hicheck('CtrlPUndo'.ke, va)
|
87
|
+
endfo
|
88
|
+
sy match CtrlPUndoT '\v\d+ \zs[^ ]+\ze|\d+:\d+:\d+'
|
89
|
+
sy match CtrlPUndoBr '\[\|\]'
|
90
|
+
sy match CtrlPUndoNr '\[\d\+\]' contains=CtrlPUndoBr
|
91
|
+
sy match CtrlPUndoSv 'saved'
|
92
|
+
sy match CtrlPUndoPo 'current'
|
93
|
+
endf
|
94
|
+
|
95
|
+
fu! s:dict2list(dict)
|
96
|
+
for ke in keys(a:dict)
|
97
|
+
let a:dict[ke][0] = s:elapsed(a:dict[ke][0])
|
98
|
+
endfo
|
99
|
+
retu map(keys(a:dict), 'eval(''[v:val, a:dict[v:val]]'')')
|
100
|
+
endf
|
101
|
+
|
102
|
+
fu! s:compval(...)
|
103
|
+
retu a:2[0] - a:1[0]
|
104
|
+
endf
|
105
|
+
|
106
|
+
fu! s:format(...)
|
107
|
+
let saved = !empty(a:1[1][1]) ? ' '.a:1[1][1] : ''
|
108
|
+
let current = !empty(a:1[1][2]) ? ' '.a:1[1][2] : ''
|
109
|
+
retu a:1[1][0].' ['.a:1[0].']'.saved.current
|
110
|
+
endf
|
111
|
+
|
112
|
+
fu! s:formatul(...)
|
113
|
+
let parts = matchlist(a:1,
|
114
|
+
\ '\v^\s+(\d+)\s+\d+\s+([^ ]+\s?[^ ]+|\d+\s\w+\s\w+)(\s*\d*)$')
|
115
|
+
retu parts == [] ? '----'
|
116
|
+
\ : parts[2].' ['.parts[1].']'.( parts[3] != '' ? ' saved' : '' )
|
117
|
+
endf
|
118
|
+
" Public {{{1
|
119
|
+
fu! ctrlp#undo#init()
|
120
|
+
let entries = s:undos[0] ? s:undos[1]['entries'] : s:undos[1]
|
121
|
+
if empty(entries) | retu [] | en
|
122
|
+
if !exists('s:lines')
|
123
|
+
if s:undos[0]
|
124
|
+
let entries = s:dict2list(s:flatten(entries, s:undos[1]['seq_cur']))
|
125
|
+
let s:lines = map(sort(entries, 's:compval'), 's:format(v:val)')
|
126
|
+
el
|
127
|
+
let s:lines = map(reverse(entries), 's:formatul(v:val)')
|
128
|
+
en
|
129
|
+
en
|
130
|
+
cal s:syntax()
|
131
|
+
retu s:lines
|
132
|
+
endf
|
133
|
+
|
134
|
+
fu! ctrlp#undo#accept(mode, str)
|
135
|
+
let undon = matchstr(a:str, '\[\zs\d\+\ze\]')
|
136
|
+
if empty(undon) | retu | en
|
137
|
+
cal ctrlp#exit()
|
138
|
+
exe 'u' undon
|
139
|
+
endf
|
140
|
+
|
141
|
+
fu! ctrlp#undo#id()
|
142
|
+
retu s:id
|
143
|
+
endf
|
144
|
+
|
145
|
+
fu! ctrlp#undo#enter()
|
146
|
+
let s:undos = s:getundo()
|
147
|
+
endf
|
148
|
+
|
149
|
+
fu! ctrlp#undo#exit()
|
150
|
+
unl! s:lines
|
151
|
+
endf
|
152
|
+
"}}}
|
153
|
+
|
154
|
+
" vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
|
@@ -0,0 +1,72 @@
|
|
1
|
+
" =============================================================================
|
2
|
+
" File: autoload/ctrlp/utils.vim
|
3
|
+
" Description: Utilities
|
4
|
+
" Author: Kien Nguyen <github.com/kien>
|
5
|
+
" =============================================================================
|
6
|
+
|
7
|
+
" Static variables {{{1
|
8
|
+
fu! ctrlp#utils#lash()
|
9
|
+
retu &ssl || !exists('+ssl') ? '/' : '\'
|
10
|
+
endf
|
11
|
+
let s:lash = ctrlp#utils#lash()
|
12
|
+
|
13
|
+
fu! s:lash(...)
|
14
|
+
retu match(a:0 ? a:1 : getcwd(), '[\/]$') < 0 ? s:lash : ''
|
15
|
+
endf
|
16
|
+
|
17
|
+
fu! ctrlp#utils#opts()
|
18
|
+
let usrhome = $HOME.s:lash($HOME)
|
19
|
+
let cahome = exists('$XDG_CACHE_HOME') ? $XDG_CACHE_HOME : usrhome.'.cache'
|
20
|
+
let s:cache_dir = isdirectory(usrhome.'.ctrlp_cache')
|
21
|
+
\ ? usrhome.'.ctrlp_cache' : cahome.s:lash(cahome).'ctrlp'
|
22
|
+
if exists('g:ctrlp_cache_dir')
|
23
|
+
let s:cache_dir = expand(g:ctrlp_cache_dir, 1)
|
24
|
+
if isdirectory(s:cache_dir.s:lash(s:cache_dir).'.ctrlp_cache')
|
25
|
+
let s:cache_dir = s:cache_dir.s:lash(s:cache_dir).'.ctrlp_cache'
|
26
|
+
en
|
27
|
+
en
|
28
|
+
endf
|
29
|
+
cal ctrlp#utils#opts()
|
30
|
+
" Files and Directories {{{1
|
31
|
+
fu! ctrlp#utils#cachedir()
|
32
|
+
retu s:cache_dir
|
33
|
+
endf
|
34
|
+
|
35
|
+
fu! ctrlp#utils#cachefile(...)
|
36
|
+
let [tail, dir] = [a:0 == 1 ? '.'.a:1 : '', a:0 == 2 ? a:1 : getcwd()]
|
37
|
+
let cache_file = substitute(dir, '\([\/]\|^\a\zs:\)', '%', 'g').tail.'.txt'
|
38
|
+
retu a:0 == 1 ? cache_file : s:cache_dir.s:lash(s:cache_dir).cache_file
|
39
|
+
endf
|
40
|
+
|
41
|
+
fu! ctrlp#utils#readfile(file)
|
42
|
+
if filereadable(a:file)
|
43
|
+
let data = readfile(a:file)
|
44
|
+
if empty(data) || type(data) != 3
|
45
|
+
unl data
|
46
|
+
let data = []
|
47
|
+
en
|
48
|
+
retu data
|
49
|
+
en
|
50
|
+
retu []
|
51
|
+
endf
|
52
|
+
|
53
|
+
fu! ctrlp#utils#mkdir(dir)
|
54
|
+
if exists('*mkdir') && !isdirectory(a:dir)
|
55
|
+
sil! cal mkdir(a:dir, 'p')
|
56
|
+
en
|
57
|
+
retu a:dir
|
58
|
+
endf
|
59
|
+
|
60
|
+
fu! ctrlp#utils#writecache(lines, ...)
|
61
|
+
if isdirectory(ctrlp#utils#mkdir(a:0 ? a:1 : s:cache_dir))
|
62
|
+
sil! cal writefile(a:lines, a:0 >= 2 ? a:2 : ctrlp#utils#cachefile())
|
63
|
+
en
|
64
|
+
endf
|
65
|
+
|
66
|
+
fu! ctrlp#utils#glob(...)
|
67
|
+
let cond = v:version > 702 || ( v:version == 702 && has('patch051') )
|
68
|
+
retu call('glob', cond ? a:000 : [a:1])
|
69
|
+
endf
|
70
|
+
"}}}
|
71
|
+
|
72
|
+
" vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
|