Created
May 2, 2015 21:32
-
-
Save scrooloose/0cdccd1171891caf0e24 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"Chuck this in [a vim runtime]/nerdtree_plugin/gitignore_filter.vim | |
if exists("loaded_nerdtree_gitignore_filter") | |
finish | |
endif | |
let loaded_nerdtree_gitignore_filter = 1 | |
call NERDTreeAddPathFilter('NERDTreeGitIgnoreFilter') | |
function NERDTreeGitIgnoreFilter(params) | |
let fname = a:params['nerdtree'].root.path.str() . '/.gitignore' | |
if !filereadable(fname) | |
return | |
endif | |
return a:params['path'].str() =~ g:GitIgnoreRegex(fname) | |
endfunction | |
"convert the gitignore file into a regex that we can match filenames against | |
function g:GitIgnoreRegex(fname) | |
"the regex is expensive to build so we cache it | |
if exists('b:NERDTreeGitIgnoreRegex') | |
return b:NERDTreeGitIgnoreRegex | |
endif | |
let lines = readfile(a:fname) | |
let regexes = [] | |
for l in lines | |
if l =~ '^#' || l =~ '^\s*$' | |
continue | |
endif | |
let regex = l | |
let regex = substitute(regex, '\.', '\\.', 'g') | |
let regex = substitute(regex, '*', '.*', 'g') | |
let regex = substitute(regex, '?', '.', 'g') | |
let regex = escape(regex, '/~') | |
call add(regexes, regex) | |
endfor | |
let b:NERDTreeGitIgnoreRegex = '\(' . join(regexes, '\|') . '\)$' | |
return b:NERDTreeGitIgnoreRegex | |
endfunction |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Super useful, thanks!