Mercurial > dotfiles
annotate vim/autoload/ctrlpext/autoignore.vim @ 199:4e276e0cdd98
Better auto-ignore for CtrlP.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Mon, 18 Aug 2014 17:12:08 -0700 |
parents | ae53d68033d9 |
children |
rev | line source |
---|---|
193
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
1 " ============================================================================= |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
2 " File: autoload/ctrlpext/autoignore.vim |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
3 " Description: Auto-ignore Extension |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
4 " Author: Ludovic Chabant <github.com/ludovicchabant> |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
5 " ============================================================================= |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
6 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
7 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
8 " Global Settings {{{ |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
9 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
10 if !exists('g:ctrlp_autoignore_debug') |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
11 let g:ctrlp_autoignore_debug = 0 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
12 endif |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
13 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
14 if !exists('g:ctrlp_autoignore_trace') |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
15 let g:ctrlp_autoignore_trace = 0 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
16 endif |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
17 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
18 if exists('g:ctrlp_autoignore_loaded') && g:ctrlp_autoignore_loaded |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
19 \ && !g:ctrlp_autoignore_debug |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
20 finish |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
21 endif |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
22 let g:ctrlp_autoignore_loaded = 1 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
23 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
24 " }}} |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
25 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
26 " Autoload functions {{{ |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
27 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
28 " Call this in your `vimrc` to enable auto-ignore. |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
29 function! ctrlpext#autoignore#init() abort |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
30 if !exists('g:ctrlp_custom_ignore') |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
31 let g:ctrlp_custom_ignore = {} |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
32 endif |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
33 let g:ctrlp_custom_ignore['func'] = 'ctrlpext#autoignore#ignore' |
199
4e276e0cdd98
Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents:
193
diff
changeset
|
34 let g:ctrlp_custom_ignore['func-init'] = 'ctrlpext#autoignore#ignore_init' |
193
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
35 endfunction |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
36 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
37 " List patterns for a given project's root. |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
38 function! ctrlpext#autoignore#get_patterns(root_dir) abort |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
39 let l:patterns = s:get_project_patterns(a:root_dir) |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
40 for pat in l:patterns |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
41 let l:prefix = pat['type'] == '' ? '(all)' : pat['type'] |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
42 echom l:prefix . ':' . pat['pat'] |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
43 endfor |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
44 endfunction |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
45 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
46 " }}} |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
47 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
48 " Internals {{{ |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
49 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
50 function! s:trace(message) abort |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
51 if g:ctrlp_autoignore_trace |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
52 echom "ctrlp_autoignore: " . a:message |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
53 endif |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
54 endfunction |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
55 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
56 let s:proj_cache = {} |
199
4e276e0cdd98
Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents:
193
diff
changeset
|
57 let s:active_patterns = [] |
193
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
58 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
59 function! s:load_project_patterns(root_dir) abort |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
60 let l:ign_path = a:root_dir . '/.ctrlpignore' |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
61 if !filereadable(l:ign_path) |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
62 call s:trace("No pattern file at: " . l:ign_path) |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
63 return [] |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
64 endif |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
65 let l:patterns = [] |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
66 let l:lines = readfile(l:ign_path) |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
67 for line in l:lines |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
68 if match(line, '\v^\s*$') >= 0 || match(line, '\v^\s*#') >= 0 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
69 continue |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
70 endif |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
71 let l:matches = matchlist(line, '\v^((dir|file|link)\:)?(.*)') |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
72 let l:mtype = l:matches[2] |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
73 let l:mpat = l:matches[3] |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
74 call add(l:patterns, {'type': l:mtype, 'pat': l:mpat}) |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
75 endfor |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
76 call s:trace("Loaded " . len(l:patterns) . " patterns from: " . l:ign_path) |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
77 return l:patterns |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
78 endfunction |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
79 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
80 function! s:get_project_patterns(root_dir) abort |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
81 let l:patterns = get(s:proj_cache, a:root_dir) |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
82 if type(l:patterns) == type([]) |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
83 return l:patterns |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
84 endif |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
85 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
86 call s:trace("Loading patterns for project: " . a:root_dir) |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
87 let l:loaded = s:load_project_patterns(a:root_dir) |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
88 let s:proj_cache[a:root_dir] = l:loaded |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
89 return l:loaded |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
90 endfunction |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
91 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
92 " The custom ignore function that CtrlP will be using in addition to |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
93 " normal pattern-based matching. |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
94 function! ctrlpext#autoignore#ignore(item, type) abort |
199
4e276e0cdd98
Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents:
193
diff
changeset
|
95 for pat in s:active_patterns |
193
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
96 if pat['type'] == '' || pat['type'] == a:type |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
97 if match(a:item, pat['pat']) >= 0 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
98 return 1 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
99 endif |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
100 endif |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
101 endfor |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
102 return 0 |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
103 endfunction |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
104 |
199
4e276e0cdd98
Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents:
193
diff
changeset
|
105 function! ctrlpext#autoignore#ignore_init() abort |
4e276e0cdd98
Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents:
193
diff
changeset
|
106 let l:root = getcwd() |
4e276e0cdd98
Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents:
193
diff
changeset
|
107 let s:active_patterns = s:get_project_patterns(l:root) |
4e276e0cdd98
Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents:
193
diff
changeset
|
108 endfunction |
4e276e0cdd98
Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents:
193
diff
changeset
|
109 |
193
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
110 " }}} |
ae53d68033d9
Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
111 |