1
0
mirror of https://github.com/gryf/.vim.git synced 2025-12-18 03:50:30 +01:00

Plugins update

This commit is contained in:
2012-03-12 17:00:46 +01:00
parent c2500d764e
commit 7cbe6dca6d
37 changed files with 977 additions and 589 deletions

22
.vimrc
View File

@@ -197,6 +197,9 @@ let g:ctrlp_custom_ignore = {
let g:ctrlp_map = '<c-f>' let g:ctrlp_map = '<c-f>'
map <Leader>b :CtrlPBuffer<CR> map <Leader>b :CtrlPBuffer<CR>
"}}} "}}}
"NERDCommenter {{{2
let g:NERDSpaceDelims=1
"}}}
"}}} "}}}
"KEYS: User defined keyboard shortcuts {{{ "KEYS: User defined keyboard shortcuts {{{
@@ -396,13 +399,20 @@ endfunction
"}}} "}}}
" GUI: detect graphics mode, set colorscheme {{{ " GUI: detect graphics mode, set colorscheme {{{
if has('gui_running') if has('gui_running')
"set guifont=Consolas\ 12 "I like this font, but it looks like crap on linux " I like this font, but it looks like crap on linux
"set guifont=DejaVu\ Sans\ Mono\ 12 "at least, some ttf font that looks good "set guifont=Consolas\ 12
set guifont=Fixed\ 14 "I like this font better. " at least, some ttf font that looks good
"set guifont=DejaVu\ Sans\ Mono\ 12
" Unfortunately there is a problem with TTF fonts in my gvim instance.
" After editing a while there are some leaving trash appearing on the
" buffer. Refreshing the screen helps, but is kinda annoying. It is
" probably my X11 setup, because on other similar workstations and setup I
" didn't noticed such behavior. Fallback to fixed-misc for a while.
set guifont=Fixed\ 14
set mouse=a "Enable mouse support set mouse=a "Enable mouse support
"No toolbar, menu, scrollbars, draw simple text tabs. This would keep " No toolbar, menu, scrollbars, draw simple text tabs. This would keep
"window in one place, and also this will conserve space. Tabs are huge " window in one place, and also this will conserve space. Tabs are huge
"under GTK. " under GTK.
set guioptions=agit set guioptions=agit
"add menuitem OpenInWebBrowser "add menuitem OpenInWebBrowser
nmenu 666 PopUp.&Open\ in\ browser :call OpenInWebBrowser()<cr> nmenu 666 PopUp.&Open\ in\ browser :call OpenInWebBrowser()<cr>

View File

@@ -7,7 +7,7 @@ ScriptID SourceID Filename
3304 17406 gundo.vim 3304 17406 gundo.vim
2727 11120 jsbeautify.vim 2727 11120 jsbeautify.vim
2289 8922 loremipsum 2289 8922 loremipsum
2666 16840 Mark 2666 17554 Mark
1218 14455 nerdcommenter 1218 14455 nerdcommenter
2262 8944 occur.vim 2262 8944 occur.vim
2136 8206 repeat.vim 2136 8206 repeat.vim
@@ -21,19 +21,8 @@ ScriptID SourceID Filename
2321 9055 zoom.vim 2321 9055 zoom.vim
52 14880 calendar.vim 52 14880 calendar.vim
3736 17319 ctrlp.vim 3736 17319 ctrlp.vim
### colors ### ftplugin
2855 12456 github.vim 3818 16921 MatchTag
1143 11833 inkpot.vim
2555 17225 jellybeans.vim
2536 16615 lucius.vim
3299 16882 sorcerer.vim
1165 3741 tolerable.vim
3309 15759 vydark
2589 15760 vylight
415 15531 zenburn
#3597 1 ColorV
# ftplugin
3818 1 MatchTag
910 14691 pydoc.vim 910 14691 pydoc.vim
2441 14403 pyflakes.vim 2441 14403 pyflakes.vim
30 9196 python_fn.vim 30 9196 python_fn.vim

View File

@@ -2,7 +2,7 @@
" File: autoload/ctrlp.vim " File: autoload/ctrlp.vim
" Description: Fuzzy file, buffer, mru and tag finder. " Description: Fuzzy file, buffer, mru and tag finder.
" Author: Kien Nguyen <github.com/kien> " Author: Kien Nguyen <github.com/kien>
" Version: 1.7.1 " Version: 1.7.2
" ============================================================================= " =============================================================================
" Static variables {{{1 " Static variables {{{1
@@ -42,6 +42,15 @@ fu! s:opts()
for [ke, va] in items(opts) for [ke, va] in items(opts)
exe 'let' va[0] '=' string(exists(ke) ? eval(ke) : va[1]) exe 'let' va[0] '=' string(exists(ke) ? eval(ke) : va[1])
endfo endfo
let new_opts = {
\ 'g:ctrlp_open_multiple_files': 's:opmul',
\ 'g:ctrlp_regexp': 's:regexp',
\ 'g:ctrlp_reuse_window': 's:nosplit',
\ 'g:ctrlp_switch_buffer': 's:jmptobuf',
\ }
for [key, val] in items(new_opts)
exe 'let' val '=' string(eval(exists(key) ? key : val))
endfo
if !exists('g:ctrlp_newcache') | let g:ctrlp_newcache = 0 | en if !exists('g:ctrlp_newcache') | let g:ctrlp_newcache = 0 | en
let s:maxdepth = min([s:maxdepth, 100]) let s:maxdepth = min([s:maxdepth, 100])
let s:mxheight = max([s:mxheight, 1]) let s:mxheight = max([s:mxheight, 1])
@@ -49,9 +58,9 @@ fu! s:opts()
let s:igntype = empty(s:usrign) ? -1 : type(s:usrign) let s:igntype = empty(s:usrign) ? -1 : type(s:usrign)
" Extensions " Extensions
let g:ctrlp_builtins = 2 let g:ctrlp_builtins = 2
if !empty(s:extensions) | for each in s:extensions for each in s:extensions
exe 'ru autoload/ctrlp/'.each.'.vim' exe 'ru autoload/ctrlp/'.each.'.vim'
endfo | en endfo
" Keymaps " Keymaps
let [s:lcmap, s:prtmaps] = ['nn <buffer> <silent>', { let [s:lcmap, s:prtmaps] = ['nn <buffer> <silent>', {
\ 'PrtBS()': ['<bs>', '<c-]>'], \ 'PrtBS()': ['<bs>', '<c-]>'],
@@ -60,10 +69,10 @@ fu! s:opts()
\ 'PrtClear()': ['<c-u>'], \ 'PrtClear()': ['<c-u>'],
\ 'PrtSelectMove("j")': ['<c-j>', '<down>'], \ 'PrtSelectMove("j")': ['<c-j>', '<down>'],
\ 'PrtSelectMove("k")': ['<c-k>', '<up>'], \ 'PrtSelectMove("k")': ['<c-k>', '<up>'],
\ 'PrtSelectMove("t")': ['<home>'], \ 'PrtSelectMove("t")': ['<Home>', '<kHome>'],
\ 'PrtSelectMove("b")': ['<end>'], \ 'PrtSelectMove("b")': ['<End>', '<kEnd>'],
\ 'PrtSelectMove("u")': ['<PageUp>'], \ 'PrtSelectMove("u")': ['<PageUp>', '<kPageUp>'],
\ 'PrtSelectMove("d")': ['<PageDown>'], \ 'PrtSelectMove("d")': ['<PageDown>', '<kPageDown>'],
\ 'PrtHistory(-1)': ['<c-n>'], \ 'PrtHistory(-1)': ['<c-n>'],
\ 'PrtHistory(1)': ['<c-p>'], \ 'PrtHistory(1)': ['<c-p>'],
\ 'AcceptSelection("e")': ['<cr>', '<2-LeftMouse>'], \ 'AcceptSelection("e")': ['<cr>', '<2-LeftMouse>'],
@@ -97,26 +106,11 @@ fu! s:opts()
if type(s:urprtmaps) == 4 if type(s:urprtmaps) == 4
cal extend(s:prtmaps, s:urprtmaps) cal extend(s:prtmaps, s:urprtmaps)
en en
let s:prtunmaps = [
\ 'PrtBS()',
\ 'PrtDelete()',
\ 'PrtDeleteWord()',
\ 'PrtClear()',
\ 'PrtCurStart()',
\ 'PrtCurEnd()',
\ 'PrtCurLeft()',
\ 'PrtCurRight()',
\ 'PrtHistory(-1)',
\ 'PrtHistory(1)',
\ 'PrtInsert("w")',
\ 'PrtInsert("s")',
\ 'PrtInsert("v")',
\ 'PrtInsert("+")',
\ ]
" Global options " Global options
let s:glbs = { 'magic': 1, 'to': 1, 'tm': 0, 'sb': 1, 'hls': 0, 'im': 0, let s:glbs = { 'magic': 1, 'to': 1, 'tm': 0, 'sb': 1, 'hls': 0, 'im': 0,
\ 'report': 9999, 'sc': 0, 'ss': 0, 'siso': 0, 'mfd': 200, 'mouse': 'n', \ 'report': 9999, 'sc': 0, 'ss': 0, 'siso': 0, 'mfd': 200, 'mouse': 'n',
\ 'gcr': 'a:blinkon0', 'ic': 1, 'scs': 1, 'lmap': '' } \ 'gcr': 'a:blinkon0', 'ic': 1, 'scs': 1, 'lmap': '', 'mousef': 0,
\ 'imd': 1 }
if s:lazy if s:lazy
cal extend(s:glbs, { 'ut': ( s:lazy > 1 ? s:lazy : 250 ) }) cal extend(s:glbs, { 'ut': ( s:lazy > 1 ? s:lazy : 250 ) })
en en
@@ -136,6 +130,33 @@ let s:fpats = {
\ '^\S\\?$': '\\?', \ '^\S\\?$': '\\?',
\ } \ }
" Mappings
let s:prtunmaps = [
\ 'PrtBS()',
\ 'PrtDelete()',
\ 'PrtDeleteWord()',
\ 'PrtClear()',
\ 'PrtCurStart()',
\ 'PrtCurEnd()',
\ 'PrtCurLeft()',
\ 'PrtCurRight()',
\ 'PrtHistory(-1)',
\ 'PrtHistory(1)',
\ 'PrtInsert("w")',
\ 'PrtInsert("s")',
\ 'PrtInsert("v")',
\ 'PrtInsert("+")',
\ ]
" Keypad
let s:kprange = {
\ 'Plus': '+',
\ 'Minus': '-',
\ 'Divide': '/',
\ 'Multiply': '*',
\ 'Point': '.',
\ }
" Highlight groups " Highlight groups
let s:hlgrps = { let s:hlgrps = {
\ 'NoEntries': 'Error', \ 'NoEntries': 'Error',
@@ -149,21 +170,18 @@ let s:hlgrps = {
\ } \ }
" * Open & Close {{{1 " * Open & Close {{{1
fu! s:Open() fu! s:Open()
if exists('g:ctrlp_log') && g:ctrlp_log cal s:log(1)
let cadir = ctrlp#utils#cachedir()
sil! exe 'redi! >' cadir.s:lash(cadir).'ctrlp.log'
en
cal s:getenv() cal s:getenv()
sil! exe 'noa keepa' ( s:mwbottom ? 'bo' : 'to' ) '1new ControlP' sil! exe 'noa keepa' ( s:mwbottom ? 'bo' : 'to' ) '1new ControlP'
let [s:bufnr, s:prompt] = [bufnr('%'), ['', '', '']] let [s:bufnr, s:prompt, s:winw] = [bufnr('%'), ['', '', ''], winwidth(0)]
abc <buffer> abc <buffer>
if !exists('s:hstry') if !exists('s:hstry')
let hst = filereadable(s:gethistloc()[1]) ? s:gethistdata() : [''] let hst = filereadable(s:gethistloc()[1]) ? s:gethistdata() : ['']
let s:hstry = empty(hst) || !s:maxhst ? [''] : hst let s:hstry = empty(hst) || !s:maxhst ? [''] : hst
en en
for [ke, va] in items(s:glbs) for [ke, va] in items(s:glbs) | if exists('+'.ke)
sil! exe 'let s:glb_'.ke.' = &'.ke.' | let &'.ke.' = '.string(va) sil! exe 'let s:glb_'.ke.' = &'.ke.' | let &'.ke.' = '.string(va)
endfo en | endfo
if s:opmul != '0' && has('signs') if s:opmul != '0' && has('signs')
sign define ctrlpmark text=+> texthl=Search sign define ctrlpmark text=+> texthl=Search
en en
@@ -174,21 +192,19 @@ fu! s:Close()
try | noa bun! try | noa bun!
cat | noa clo! | endt cat | noa clo! | endt
cal s:unmarksigns() cal s:unmarksigns()
for key in keys(s:glbs) for key in keys(s:glbs) | if exists('+'.key)
sil! exe 'let &'.key.' = s:glb_'.key sil! exe 'let &'.key.' = s:glb_'.key
endfo en | endfo
if exists('s:glb_acd') | let &acd = s:glb_acd | en if exists('s:glb_acd') | let &acd = s:glb_acd | en
let [g:ctrlp_lines, g:ctrlp_allfiles] = [[], []] let [g:ctrlp_lines, g:ctrlp_allfiles] = [[], []]
if s:winres[1] >= &lines && s:winres[2] == winnr('$') if s:winres[1] >= &lines && s:winres[2] == winnr('$')
exe s:winres[0] exe s:winres[0]
en en
unl! s:focus s:hisidx s:hstgot s:marked s:statypes s:cline s:init s:savestr unl! s:focus s:hisidx s:hstgot s:marked s:statypes s:cline s:init s:savestr
\ s:winh g:ctrlp_nolimit \ g:ctrlp_nolimit
cal ctrlp#recordhist() cal ctrlp#recordhist()
cal s:onexit() cal s:onexit()
if exists('g:ctrlp_log') && g:ctrlp_log cal s:log(0)
sil! redi END
en
ec ec
endf endf
" * Clear caches {{{1 " * Clear caches {{{1
@@ -210,10 +226,9 @@ fu! ctrlp#reset()
cal s:opts() cal s:opts()
cal ctrlp#utils#opts() cal ctrlp#utils#opts()
cal ctrlp#mrufiles#opts() cal ctrlp#mrufiles#opts()
unl! s:cline
endf endf
" * Files() {{{1 " * Files {{{1
fu! s:Files() fu! ctrlp#files()
let [cwd, cafile, g:ctrlp_allfiles] = [getcwd(), ctrlp#utils#cachefile(), []] let [cwd, cafile, g:ctrlp_allfiles] = [getcwd(), ctrlp#utils#cachefile(), []]
if g:ctrlp_newcache || !filereadable(cafile) || !s:caching if g:ctrlp_newcache || !filereadable(cafile) || !s:caching
let lscmd = s:lsCmd() let lscmd = s:lsCmd()
@@ -292,23 +307,17 @@ fu! s:lsCmd()
retu cmd['types'][key][1] retu cmd['types'][key][1]
en en
endf endf
fu! s:Buffers() "{{{1 " Buffers {{{1
let allbufs = [] fu! ctrlp#buffers()
for each in range(1, bufnr('$')) retu map(filter(range(1, bufnr('$')), 'empty(getbufvar(v:val, "&bt"))'
if getbufvar(each, '&bl') && each != s:crbufnr \ .' && getbufvar(v:val, "&bl") && strlen(bufname(v:val))'),
let bufname = bufname(each) \ 'fnamemodify(bufname(v:val), ":.")')
if strlen(bufname) && getbufvar(each, '&ma') && bufname != 'ControlP'
cal add(allbufs, fnamemodify(bufname, ':.'))
en
en
endfo
retu allbufs
endf endf
" * MatchedItems() {{{1 " * MatchedItems() {{{1
fu! s:MatchIt(items, pat, limit, mfunc) fu! s:MatchIt(items, pat, limit, mfunc, ipt)
let newitems = [] let [newitems, crfile] = [[], exists('s:crfilerel') ? s:crfilerel : '']
for item in a:items for item in a:items
try | if call(a:mfunc, [item, a:pat]) >= 0 try | if !( a:ipt && item == crfile ) && call(a:mfunc, [item, a:pat]) >= 0
cal add(newitems, item) cal add(newitems, item)
en | cat | brea | endt en | cat | brea | endt
if a:limit > 0 && len(newitems) >= a:limit | brea | en if a:limit > 0 && len(newitems) >= a:limit | brea | en
@@ -316,16 +325,15 @@ fu! s:MatchIt(items, pat, limit, mfunc)
retu newitems retu newitems
endf endf
fu! s:MatchedItems(items, pat, limit) fu! s:MatchedItems(items, pat, limit, ipt)
let [items, pat, limit] = [a:items, a:pat, a:limit] let [type, mfunc] = [s:type(1), 'match']
let [type, ipt, mfunc] = [s:type(1), s:ispathitem(), 'match'] if s:byfname && a:ipt
if s:byfname && ipt
let mfunc = 's:matchfname' let mfunc = 's:matchfname'
elsei s:itemtype > 2 elsei s:itemtype > 2
let types = { 'tabs': 's:matchtabs', 'tabe': 's:matchtabe' } let types = { 'tabs': 's:matchtabs', 'tabe': 's:matchtabe' }
if has_key(types, type) | let mfunc = types[type] | en if has_key(types, type) | let mfunc = types[type] | en
en en
let newitems = s:MatchIt(items, pat, limit, mfunc) let newitems = s:MatchIt(a:items, a:pat, a:limit, mfunc, a:ipt)
let s:matches = len(newitems) let s:matches = len(newitems)
retu newitems retu newitems
endf endf
@@ -358,31 +366,31 @@ fu! s:SplitPattern(str) "{{{1
retu escape(pat, '~') retu escape(pat, '~')
endf endf
" * BuildPrompt() {{{1 " * BuildPrompt() {{{1
fu! s:Render(lines, pat) fu! s:Render(lines, pat, ipt)
let lines = a:lines let [&ma, lines, s:height] = [1, a:lines, min([len(a:lines), s:winh])]
" Setup the match window " Setup the match window
let s:height = min([len(lines), s:winh])
sil! exe '%d _ | res' s:height sil! exe '%d _ | res' s:height
" Print the new items " Print the new items
if empty(lines) if empty(lines)
setl nocul let s:matched = []
cal setline(1, ' == NO ENTRIES ==') cal setline(1, ' == NO ENTRIES ==')
setl noma nocul
cal s:unmarksigns() cal s:unmarksigns()
if s:dohighlight() | cal clearmatches() | en if s:dohighlight() | cal clearmatches() | en
retu retu
en en
setl cul
" Sort if not MRU " Sort if not MRU
if ( s:itemtype != 2 && !exists('g:ctrlp_nolimit') ) if ( s:itemtype != 2 && !exists('g:ctrlp_nolimit') )
\ || !empty(join(s:prompt, '')) \ || s:prompt != ['', '', '']
let s:compat = a:pat let s:compat = a:pat
cal sort(lines, 's:mixedsort') cal sort(lines, 's:mixedsort')
unl s:compat unl s:compat
en en
if s:mwreverse | cal reverse(lines) | en if s:mwreverse | cal reverse(lines) | en
let s:matched = copy(lines) let s:matched = copy(lines)
cal map(lines, '"> ".v:val') cal map(lines, 's:formatline(v:val, a:ipt)')
cal setline(1, lines) cal setline(1, lines)
setl noma cul
exe 'keepj norm!' ( s:mwreverse ? 'G' : 'gg' ).'1|' exe 'keepj norm!' ( s:mwreverse ? 'G' : 'gg' ).'1|'
cal s:unmarksigns() cal s:unmarksigns()
cal s:remarksigns() cal s:remarksigns()
@@ -391,7 +399,7 @@ fu! s:Render(lines, pat)
en en
" Highlighting " Highlighting
if s:dohighlight() if s:dohighlight()
cal s:highlight(a:pat, s:mathi[1] == '' ? 'Identifier' : s:mathi[1]) cal s:highlight(a:pat, s:mathi[1], a:ipt)
en en
endf endf
@@ -401,13 +409,11 @@ fu! s:Update(str)
" Get the new string sans tail " Get the new string sans tail
let str = s:sanstail(a:str) let str = s:sanstail(a:str)
" Stop if the string's unchanged " Stop if the string's unchanged
if str == oldstr && !empty(str) && !exists('s:force') if str == oldstr && !empty(str) && !exists('s:force') | retu | en
retu let [pat, ipt] = [s:SplitPattern(str), s:ispathitem()]
en
let pat = s:SplitPattern(str)
let lines = exists('g:ctrlp_nolimit') && empty(str) ? copy(g:ctrlp_lines) let lines = exists('g:ctrlp_nolimit') && empty(str) ? copy(g:ctrlp_lines)
\ : s:MatchedItems(g:ctrlp_lines, pat, s:winh) \ : s:MatchedItems(g:ctrlp_lines, pat, s:winh, ipt)
cal s:Render(lines, pat) cal s:Render(lines, pat, ipt)
endf endf
fu! s:ForceUpdate() fu! s:ForceUpdate()
@@ -459,8 +465,7 @@ endf
fu! s:PrtBS() fu! s:PrtBS()
unl! s:hstgot unl! s:hstgot
let [prt, s:matches] = [s:prompt, 1] let [s:prompt[0], s:matches] = [substitute(s:prompt[0], '.$', '', ''), 1]
let prt[0] = substitute(prt[0], '.$', '', '')
cal s:BuildPrompt(1) cal s:BuildPrompt(1)
endf endf
@@ -485,7 +490,6 @@ endf
fu! s:PrtInsert(type) fu! s:PrtInsert(type)
unl! s:hstgot unl! s:hstgot
" Insert current word, search register, last visual and clipboard
let s:prompt[0] .= a:type == 'w' ? s:crword let s:prompt[0] .= a:type == 'w' ? s:crword
\ : a:type == 's' ? getreg('/') \ : a:type == 's' ? getreg('/')
\ : a:type == 'v' ? s:crvisual \ : a:type == 'v' ? s:crvisual
@@ -507,20 +511,18 @@ fu! s:PrtExpandDir()
endf endf
" Movement {{{2 " Movement {{{2
fu! s:PrtCurLeft() fu! s:PrtCurLeft()
if !empty(s:prompt[0]) let prt = s:prompt
let prt = s:prompt if !empty(prt[0])
let prt[2] = prt[1] . prt[2] let s:prompt = [substitute(prt[0], '.$', '', ''), matchstr(prt[0], '.$'),
let prt[1] = matchstr(prt[0], '.$') \ prt[1] . prt[2]]
let prt[0] = substitute(prt[0], '.$', '', '')
en en
cal s:BuildPrompt(0) cal s:BuildPrompt(0)
endf endf
fu! s:PrtCurRight() fu! s:PrtCurRight()
let prt = s:prompt let prt = s:prompt
let prt[0] .= prt[1] let s:prompt = [prt[0] . prt[1], matchstr(prt[2], '^.'),
let prt[1] = matchstr(prt[2], '^.') \ substitute(prt[2], '^.', '', '')]
let prt[2] = substitute(prt[2], '^.', '', '')
cal s:BuildPrompt(0) cal s:BuildPrompt(0)
endf endf
@@ -577,7 +579,7 @@ fu! s:PrtClearCache()
if s:itemtype == 2 if s:itemtype == 2
let g:ctrlp_lines = ctrlp#mrufiles#list(-1, 1) let g:ctrlp_lines = ctrlp#mrufiles#list(-1, 1)
el el
cal s:SetLines(s:itemtype) cal ctrlp#setlines(s:itemtype)
en en
let s:force = 1 let s:force = 1
cal s:BuildPrompt(1) cal s:BuildPrompt(1)
@@ -585,12 +587,16 @@ fu! s:PrtClearCache()
endf endf
fu! s:PrtDeleteMRU() fu! s:PrtDeleteMRU()
if s:itemtype == 2 if s:itemtype != 2 | retu | en
let s:force = 1 let [s:force, ags] = [1, [-1, 2]]
let g:ctrlp_lines = ctrlp#mrufiles#list(-1, 2) if exists('s:marked')
cal s:BuildPrompt(1) let ags = [-1, 2, values(s:marked)]
unl s:force cal s:unmarksigns()
unl s:marked
en en
let g:ctrlp_lines = call('ctrlp#mrufiles#list', ags)
cal s:BuildPrompt(1)
unl s:force
endf endf
fu! s:PrtExit() fu! s:PrtExit()
@@ -616,11 +622,18 @@ endf
fu! s:MapKeys(...) fu! s:MapKeys(...)
" Normal keys " Normal keys
let pfunc = a:0 && !a:1 ? 'PrtSelectJump' : 'PrtAdd' let pfunc = a:0 && !a:1 ? 'PrtSelectJump' : 'PrtAdd'
let dojmp = s:byfname && pfunc == 'PrtSelectJump' ? ', 1' : '' let dojmp = s:byfname && a:0 && !a:1 ? ', 1' : ''
let pcmd = "nn \<buffer> \<silent> \<k%s> :\<c-u>cal \<SID>%s(\"%s\"%s)\<cr>"
let cmd = substitute(pcmd, 'k%s', 'char-%d', '')
for each in range(32, 126) for each in range(32, 126)
let cmd = "nn \<buffer> \<silent> \<char-%d> :\<c-u>cal \<SID>%s(\"%s\"%s)\<cr>"
exe printf(cmd, each, pfunc, escape(nr2char(each), '"|\'), dojmp) exe printf(cmd, each, pfunc, escape(nr2char(each), '"|\'), dojmp)
endfo endfo
for each in range(0, 9)
exe printf(pcmd, each, pfunc, each, dojmp)
endfo
for [ke, va] in items(s:kprange)
exe printf(pcmd, ke, pfunc, va, dojmp)
endfo
" Special keys " Special keys
if a:0 < 2 if a:0 < 2
cal call('s:MapSpecs', a:0 && !a:1 ? [1] : []) cal call('s:MapSpecs', a:0 && !a:1 ? [1] : [])
@@ -675,9 +688,9 @@ fu! s:ToggleType(dir)
if s:byfname && !s:ispathitem() | let s:byfname = 0 | en if s:byfname && !s:ispathitem() | let s:byfname = 0 | en
unl! g:ctrlp_nolimit unl! g:ctrlp_nolimit
if has('syntax') && exists('g:syntax_on') if has('syntax') && exists('g:syntax_on')
cal s:syntax() cal ctrlp#syntax()
en en
cal s:SetLines(s:itemtype) cal ctrlp#setlines(s:itemtype)
cal s:PrtSwitcher() cal s:PrtSwitcher()
endf endf
@@ -687,7 +700,7 @@ fu! s:PrtSwitcher()
unl s:force unl s:force
endf endf
fu! s:SetWD(...) "{{{1 fu! s:SetWD(...) "{{{1
let pathmode = s:pathmode let [pathmode, s:crfilerel] = [s:wpmode, fnamemodify(s:crfile, ':.')]
if a:0 && strlen(a:1) | if type(a:1) if a:0 && strlen(a:1) | if type(a:1)
cal ctrlp#setdir(a:1) | retu cal ctrlp#setdir(a:1) | retu
el el
@@ -699,7 +712,7 @@ fu! s:SetWD(...) "{{{1
cal ctrlp#setdir(s:crfpath) cal ctrlp#setdir(s:crfpath)
en en
if pathmode == 1 | retu | en if pathmode == 1 | retu | en
let markers = ['root.dir','.git/','.hg/','_darcs/','.bzr/'] let markers = ['root.dir', '.git/', '.hg/', '.svn/', '.bzr/', '_darcs/']
if type(s:rmarkers) == 3 && !empty(s:rmarkers) if type(s:rmarkers) == 3 && !empty(s:rmarkers)
cal extend(markers, s:rmarkers, 0) cal extend(markers, s:rmarkers, 0)
en en
@@ -710,8 +723,8 @@ fu! s:SetWD(...) "{{{1
unl! s:foundroot unl! s:foundroot
endf endf
" * AcceptSelection() {{{1 " * AcceptSelection() {{{1
fu! ctrlp#acceptfile(mode, matchstr, ...) fu! ctrlp#acceptfile(mode, line, ...)
let [md, filpath] = [a:mode, fnamemodify(a:matchstr, ':p')] let [md, filpath] = [a:mode, fnamemodify(a:line, ':p')]
cal s:PrtExit() cal s:PrtExit()
let [bufnr, tail] = [bufnr('^'.filpath.'$'), s:tail()] let [bufnr, tail] = [bufnr('^'.filpath.'$'), s:tail()]
let j2l = a:0 ? a:1 : str2nr(matchstr(tail, '^ +\D*\zs\d\+\ze\D*')) let j2l = a:0 ? a:1 : str2nr(matchstr(tail, '^ +\D*\zs\d\+\ze\D*'))
@@ -752,12 +765,12 @@ fu! s:SpecInputs(str)
let [str, type] = [a:str, s:type()] let [str, type] = [a:str, s:type()]
if str == '..' && type =~ '\v^(0|dir)$' if str == '..' && type =~ '\v^(0|dir)$'
cal s:parentdir(getcwd()) cal s:parentdir(getcwd())
cal s:SetLines(s:itemtype) cal ctrlp#setlines(s:itemtype)
cal s:PrtClear() cal s:PrtClear()
retu 1 retu 1
elsei str =~ '^[\/]$' && type =~ '\v^(0|dir)$' elsei str =~ '^[\/]$' && type =~ '\v^(0|dir)$'
cal s:SetWD(2, 0) cal s:SetWD(2, 0)
cal s:SetLines(s:itemtype) cal ctrlp#setlines(s:itemtype)
cal s:PrtClear() cal s:PrtClear()
retu 1 retu 1
elsei str == '?' elsei str == '?'
@@ -773,17 +786,16 @@ fu! s:AcceptSelection(mode)
let str = join(s:prompt, '') let str = join(s:prompt, '')
if a:mode == 'e' | if s:SpecInputs(str) | retu | en | en if a:mode == 'e' | if s:SpecInputs(str) | retu | en | en
" Get the selected line " Get the selected line
let line = getline('.') let line = !empty(s:matched) ? s:matched[line('.') - 1] : ''
if a:mode != 'e' && s:itemtype < 3 && line == ' == NO ENTRIES ==' if a:mode != 'e' && s:itemtype < 3 && line == ''
\ && str !~ '\v^(\.\.|/|\\|\?)$' \ && str !~ '\v^(\.\.|/|\\|\?)$'
cal s:CreateNewFile(a:mode) | retu cal s:CreateNewFile(a:mode) | retu
en en
let matchstr = matchstr(line, '^> \zs.\+\ze\t*$') if empty(line) | retu | en
if empty(matchstr) | retu | en
" Do something with it " Do something with it
let actfunc = s:itemtype < 3 ? 'ctrlp#acceptfile' let actfunc = s:itemtype < 3 ? 'ctrlp#acceptfile'
\ : g:ctrlp_ext_vars[s:itemtype - ( g:ctrlp_builtins + 1 )]['accept'] \ : g:ctrlp_ext_vars[s:itemtype - ( g:ctrlp_builtins + 1 )]['accept']
cal call(actfunc, [a:mode, matchstr]) cal call(actfunc, [a:mode, line])
endf endf
fu! s:CreateNewFile(...) "{{{1 fu! s:CreateNewFile(...) "{{{1
let [md, str] = ['', join(s:prompt, '')] let [md, str] = ['', join(s:prompt, '')]
@@ -807,7 +819,7 @@ fu! s:CreateNewFile(...) "{{{1
en en
if !exists('optyp') | retu | en if !exists('optyp') | retu | en
let [filpath, tail] = [fnamemodify(optyp, ':p'), s:tail()] let [filpath, tail] = [fnamemodify(optyp, ':p'), s:tail()]
cal s:insertcache(str) if !stridx(filpath, getcwd()) | cal s:insertcache(str) | en
cal s:PrtExit() cal s:PrtExit()
let cmd = md == 'r' ? ctrlp#normcmd('e') : let cmd = md == 'r' ? ctrlp#normcmd('e') :
\ s:newfop =~ '1\|t' || ( a:0 && a:1 == 't' ) || md == 't' ? 'tabe' : \ s:newfop =~ '1\|t' || ( a:0 && a:1 == 't' ) || md == 't' ? 'tabe' :
@@ -822,9 +834,9 @@ fu! s:MarkToOpen()
\ || ( s:itemtype > g:ctrlp_builtins && s:type() !~ 'rts' ) \ || ( s:itemtype > g:ctrlp_builtins && s:type() !~ 'rts' )
retu retu
en en
let matchstr = matchstr(getline('.'), '^> \zs.\+\ze\t*$') let line = !empty(s:matched) ? s:matched[line('.') - 1] : ''
if empty(matchstr) | retu | en if empty(line) | retu | en
let filpath = fnamemodify(matchstr, ':p') let filpath = fnamemodify(line, ':p')
if exists('s:marked') && s:dictindex(s:marked, filpath) > 0 if exists('s:marked') && s:dictindex(s:marked, filpath) > 0
" Unmark and remove the file from s:marked " Unmark and remove the file from s:marked
let key = s:dictindex(s:marked, filpath) let key = s:dictindex(s:marked, filpath)
@@ -861,8 +873,8 @@ fu! s:OpenMulti()
cal s:sanstail(join(s:prompt, '')) cal s:sanstail(join(s:prompt, ''))
cal s:PrtExit() cal s:PrtExit()
" Move the cursor to a reusable window " Move the cursor to a reusable window
let tail = s:tail() let [tail, fnesc] = [s:tail(), exists('*fnameescape') && v:version > 701]
let emptytail = empty(tail) let [emptytail, nwpt] = [empty(tail), exists('g:ctrlp_open_multiple_files')]
let useb = bufnr('^'.mkd[0].'$') > 0 && emptytail let useb = bufnr('^'.mkd[0].'$') > 0 && emptytail
let fst = call('ctrlp#normcmd', useb ? ['b', 'bo vert sb'] : ['e']) let fst = call('ctrlp#normcmd', useb ? ['b', 'bo vert sb'] : ['e'])
" Check if it's a replaceable buffer " Check if it's a replaceable buffer
@@ -875,12 +887,19 @@ fu! s:OpenMulti()
for va in mkd for va in mkd
let bufnr = bufnr('^'.va.'$') let bufnr = bufnr('^'.va.'$')
let useb = bufnr > 0 && emptytail let useb = bufnr > 0 && emptytail
let snd = md != '' && has_key(cmds, md) let snd = md != '' && has_key(cmds, md) ?
\ ? ( useb ? cmds[md][0] : cmds[md][1] ) : ( useb ? 'vert sb' : 'vne' ) \ ( useb ? cmds[md][0] : cmds[md][1] ) : ( useb ? 'vert sb' : 'vne' )
let fid = useb ? bufnr : va let cmd = ic == 1 && ( ucr == 'r' || repabl ) ? fst : snd
cal s:openfile(ic == 1 && ( ucr == 'r' || repabl ) ? fst : snd, fid, tail) let conds = [( nr != '' && nr > 1 && nr < ic ) || ( nr == '' && ic > 1 ),
if ( nr != '' && nr > 1 && nr < ic ) || ( nr == '' && ic > 1 ) \ nr != '' && nr < ic]
sil! hid clo! | el | let ic += 1 if conds[nwpt]
if bufnr <= 0 | if fnesc
cal s:openfile('bad', fnamemodify(va, ':.'), '')
el
cal s:openfile(cmd, va, tail) | sil! hid clo!
en | en
el
cal s:openfile(cmd, useb ? bufnr : va, tail) | let ic += 1
en en
endfo endfo
let &swb = swb let &swb = swb
@@ -919,6 +938,13 @@ fu! s:comparent(s1, s2)
retu 0 retu 0
endf endf
fu! s:compfnlen(s1, s2)
" By filename length
let len1 = strlen(split(a:s1, s:lash)[-1])
let len2 = strlen(split(a:s2, s:lash)[-1])
retu len1 == len2 ? 0 : len1 > len2 ? 1 : -1
endf
fu! s:matchlens(str, pat, ...) fu! s:matchlens(str, pat, ...)
if empty(a:pat) || index(['^', '$'], a:pat) >= 0 | retu {} | en if empty(a:pat) || index(['^', '$'], a:pat) >= 0 | retu {} | en
let st = a:0 ? a:1 : 0 let st = a:0 ? a:1 : 0
@@ -940,11 +966,12 @@ endf
fu! s:mixedsort(s1, s2) fu! s:mixedsort(s1, s2)
let [cml, cln] = [s:compmatlen(a:s1, a:s2), ctrlp#complen(a:s1, a:s2)] let [cml, cln] = [s:compmatlen(a:s1, a:s2), ctrlp#complen(a:s1, a:s2)]
if s:itemtype < 3 && s:height < 51 if s:itemtype < 3 && s:height < 51
let par = s:comparent(a:s1, a:s2) let [par, cfn] = [s:comparent(a:s1, a:s2), s:compfnlen(a:s1, a:s2)]
if s:height < 21 if s:height < 21
retu 6 * cml + 3 * par + 2 * s:comptime(a:s1, a:s2) + cln let ctm = s:comptime(a:s1, a:s2)
retu 12 * cml + 6 * par + 3 * cfn + 2 * ctm + cln
en en
retu 3 * cml + 2 * par + cln retu 6 * cml + 3 * par + 2 * cfn + cln
en en
retu 2 * cml + cln retu 2 * cml + cln
endf endf
@@ -973,7 +1000,7 @@ fu! ctrlp#statusline()
let focus = s:Focus() ? 'prt' : 'win' let focus = s:Focus() ? 'prt' : 'win'
let byfname = s:byfname ? 'file' : 'path' let byfname = s:byfname ? 'file' : 'path'
let marked = s:opmul != '0' ? let marked = s:opmul != '0' ?
\ exists('s:marked') ? ' <'.s:dismrk().'>' : ' <+>' : '' \ exists('s:marked') ? ' <'.s:dismrk().'>' : ' <->' : ''
if has_key(s:status, 'main') if has_key(s:status, 'main')
let args = [focus, byfname, s:regexp, prv, item, nxt, marked] let args = [focus, byfname, s:regexp, prv, item, nxt, marked]
let &l:stl = call(s:status['main'], args) let &l:stl = call(s:status['main'], args)
@@ -989,7 +1016,7 @@ fu! ctrlp#statusline()
endf endf
fu! s:dismrk() fu! s:dismrk()
retu has('signs') ? '+'.len(s:marked) : retu has('signs') ? len(s:marked) :
\ '%<'.join(values(map(copy(s:marked), 'split(v:val, "[\\/]")[-1]')), ', ') \ '%<'.join(values(map(copy(s:marked), 'split(v:val, "[\\/]")[-1]')), ', ')
endf endf
@@ -997,9 +1024,14 @@ fu! ctrlp#progress(enum)
if has('macunix') || has('mac') | sl 1m | en if has('macunix') || has('mac') | sl 1m | en
let &l:stl = has_key(s:status, 'prog') ? call(s:status['prog'], [a:enum]) let &l:stl = has_key(s:status, 'prog') ? call(s:status['prog'], [a:enum])
\ : '%#CtrlPStats# '.a:enum.' %* %=%<%#CtrlPMode2# '.getcwd().' %*' \ : '%#CtrlPStats# '.a:enum.' %* %=%<%#CtrlPMode2# '.getcwd().' %*'
redr redraws
endf endf
" Paths {{{2 " Paths {{{2
fu! s:formatline(str, ipt)
let cond = a:ipt && ( s:winw - 4 ) < s:strwidth(a:str)
retu '> '.( cond ? pathshorten(a:str) : a:str )
endf
fu! s:dircompl(be, sd) fu! s:dircompl(be, sd)
if a:sd == '' | retu [] | en if a:sd == '' | retu [] | en
let [be, sd] = a:be == '' ? [getcwd(), a:sd] : [a:be, a:be.s:lash(a:be).a:sd] let [be, sd] = a:be == '' ? [getcwd(), a:sd] : [a:be, a:be.s:lash(a:be).a:sd]
@@ -1124,9 +1156,16 @@ endf
fu! ctrlp#setdir(path, ...) fu! ctrlp#setdir(path, ...)
let cmd = a:0 ? a:1 : 'lc!' let cmd = a:0 ? a:1 : 'lc!'
sil! exe cmd ctrlp#fnesc(a:path) sil! exe cmd ctrlp#fnesc(a:path)
let s:crfilerel = fnamemodify(s:crfile, ':.')
endf
fu! ctrlp#setlcdir()
if exists('*haslocaldir')
cal ctrlp#setdir(getcwd(), haslocaldir() ? 'lc!' : 'cd!')
en
endf endf
" Highlighting {{{2 " Highlighting {{{2
fu! s:syntax() fu! ctrlp#syntax()
for [ke, va] in items(s:hlgrps) | if !hlexists('CtrlP'.ke) for [ke, va] in items(s:hlgrps) | if !hlexists('CtrlP'.ke)
exe 'hi link CtrlP'.ke va exe 'hi link CtrlP'.ke va
en | endfo en | endfo
@@ -1140,9 +1179,9 @@ fu! s:syntax()
en en
endf endf
fu! s:highlight(pat, grp) fu! s:highlight(pat, grp, ipt)
cal clearmatches() cal clearmatches()
if !empty(a:pat) && s:ispathitem() if !empty(a:pat) && a:ipt
let pat = s:regexp ? substitute(a:pat, '\\\@<!\^', '^> \\zs', 'g') : a:pat let pat = s:regexp ? substitute(a:pat, '\\\@<!\^', '^> \\zs', 'g') : a:pat
if s:byfname if s:byfname
" Match only filename " Match only filename
@@ -1157,7 +1196,7 @@ fu! s:highlight(pat, grp)
endf endf
fu! s:dohighlight() fu! s:dohighlight()
retu len(s:mathi) > 1 && s:mathi[0] && exists('*clearmatches') retu s:mathi[0] && exists('*clearmatches')
endf endf
" Prompt history {{{2 " Prompt history {{{2
fu! s:gethistloc() fu! s:gethistloc()
@@ -1218,37 +1257,21 @@ fu! s:buftab(bufnr, md)
let buflist = tabpagebuflist(tabnr) let buflist = tabpagebuflist(tabnr)
if index(buflist, a:bufnr) >= 0 if index(buflist, a:bufnr) >= 0
for winnr in range(1, tabpagewinnr(tabnr, '$')) for winnr in range(1, tabpagewinnr(tabnr, '$'))
if buflist[winnr - 1] == a:bufnr if buflist[winnr - 1] == a:bufnr | retu [tabnr, winnr] | en
retu [tabnr, winnr]
en
endfo endfo
en en
endfo endfo
retu [0, 0] retu [0, 0]
endf endf
fu! s:normbuf()
let winnrs = []
for each in range(1, winnr('$'))
let bufnr = winbufnr(each)
if getbufvar(bufnr, '&bl') && empty(getbufvar(bufnr, '&bt'))
\ && getbufvar(bufnr, '&ma')
cal add(winnrs, each)
en
endfo
retu winnrs
endf
fu! ctrlp#normcmd(cmd, ...) fu! ctrlp#normcmd(cmd, ...)
if s:nosplit() if s:nosplit() | retu a:cmd | en
retu a:cmd let norwins = filter(range(1, winnr('$')),
en \ 'empty(getbufvar(winbufnr(v:val), "&bt"))')
let norwins = s:normbuf()
for each in norwins for each in norwins
let bufnr = winbufnr(each) let bufnr = winbufnr(each)
if empty(bufname(bufnr)) && empty(getbufvar(bufnr, '&ft')) if empty(bufname(bufnr)) && empty(getbufvar(bufnr, '&ft'))
let fstemp = each let fstemp = each | brea
brea
en en
endfo endfo
let norwin = empty(norwins) ? 0 : norwins[0] let norwin = empty(norwins) ? 0 : norwins[0]
@@ -1262,7 +1285,7 @@ fu! ctrlp#normcmd(cmd, ...)
endf endf
fu! s:nosplit() fu! s:nosplit()
retu !empty(s:nosplit) && match([bufname('%'), &l:ft], s:nosplit) >= 0 retu !empty(s:nosplit) && match([bufname('%'), &l:ft, &l:bt], s:nosplit) >= 0
endf endf
fu! s:setupblank() fu! s:setupblank()
@@ -1274,8 +1297,7 @@ fu! s:setupblank()
endf endf
fu! s:leavepre() fu! s:leavepre()
if s:clrex && ( !has('clientserver') || if s:clrex && !( has('clientserver') && len(split(serverlist(), "\n")) > 1 )
\ ( has('clientserver') && len(split(serverlist(), "\n")) == 1 ) )
cal ctrlp#clra() cal ctrlp#clra()
en en
endf endf
@@ -1320,18 +1342,37 @@ fu! s:argmaps(md, ...)
retu a:md retu a:md
endf endf
" Misc {{{2 " Misc {{{2
fu! s:log(m)
if exists('g:ctrlp_log') && g:ctrlp_log | if a:m
let cadir = ctrlp#utils#cachedir()
sil! exe 'redi! >' cadir.s:lash(cadir).'ctrlp.log'
el
sil! redi END
en | en
endf
fu! s:strwidth(str)
retu exists('*strdisplaywidth') ? strdisplaywidth(a:str) : strlen(a:str)
endf
fu! s:getenv() fu! s:getenv()
let s:winh = min([s:mxheight, &lines])
let [s:cwd, s:winres] = [getcwd(), [winrestcmd(), &lines, winnr('$')]] let [s:cwd, s:winres] = [getcwd(), [winrestcmd(), &lines, winnr('$')]]
let [s:crfile, s:crfpath] = [expand('%:p', 1), expand('%:p:h', 1)] let [s:crfile, s:crfpath] = [expand('%:p', 1), expand('%:p:h', 1)]
let [s:crword, s:crline] = [expand('<cword>'), getline('.')] let [s:crword, s:crline] = [expand('<cword>'), getline('.')]
let [s:tagfiles, s:crcursor] = [s:tagfiles(), getpos('.')] let [s:winh, s:crcursor] = [min([s:mxheight, &lines]), getpos('.')]
let [s:crbufnr, s:crvisual] = [bufnr('%'), s:lastvisual()] let [s:crbufnr, s:crvisual] = [bufnr('%'), s:lastvisual()]
if exists('g:ctrlp_extensions') && index(g:ctrlp_extensions, 'undo') >= 0
\ && v:version > 702 && has('patch005') && exists('*undotree')
let s:undotree = undotree()
en
let s:currwin = s:mwbottom ? winnr() : winnr() + has('autocmd') let s:currwin = s:mwbottom ? winnr() : winnr() + has('autocmd')
let s:wpmode = exists('b:ctrlp_working_path_mode')
\ ? b:ctrlp_working_path_mode : s:pathmode
if exists('g:ctrlp_extensions')
if index(g:ctrlp_extensions, 'undo') >= 0 && exists('*undotree')
\ && ( v:version > 703 || ( v:version == 703 && has('patch005') ) )
let s:undotree = undotree()
en
if index(g:ctrlp_extensions, 'tag') >= 0
let s:tagfiles = s:tagfiles()
en
en
endf endf
fu! s:lastvisual() fu! s:lastvisual()
@@ -1373,8 +1414,8 @@ fu! s:openfile(cmd, fid, tail, ...)
if !empty(a:tail) || j2l if !empty(a:tail) || j2l
sil! norm! zvzz sil! norm! zvzz
en en
if exists('*haslocaldir') if cmd != 'bad'
cal ctrlp#setdir(getcwd(), haslocaldir() ? 'lc!' : 'cd!') cal ctrlp#setlcdir()
en en
endf endf
@@ -1452,20 +1493,6 @@ fu! s:onexit()
en en
endf endf
fu! ctrlp#allbufs()
let bufs = []
for each in range(1, bufnr('$'))
if getbufvar(each, '&bl')
let bufname = bufname(each)
if strlen(bufname) && bufname != 'ControlP'
cal add(bufs, fnamemodify(bufname, ':p'))
en
en
endfo
cal filter(bufs, 'filereadable(v:val)')
retu bufs
endf
fu! ctrlp#exit() fu! ctrlp#exit()
cal s:PrtExit() cal s:PrtExit()
endf endf
@@ -1473,17 +1500,13 @@ endf
fu! ctrlp#prtclear() fu! ctrlp#prtclear()
cal s:PrtClear() cal s:PrtClear()
endf endf
fu! ctrlp#setlines(type)
cal s:SetLines(a:type)
endf
"}}}1 "}}}1
" * Initialization {{{1 " * Initialization {{{1
fu! s:SetLines(type) fu! ctrlp#setlines(type)
let s:itemtype = a:type let s:itemtype = a:type
let types = [ let types = [
\ 's:Files()', \ 'ctrlp#files()',
\ 's:Buffers()', \ 'ctrlp#buffers()',
\ 'ctrlp#mrufiles#list(-1)', \ 'ctrlp#mrufiles#list(-1)',
\ ] \ ]
if exists('g:ctrlp_ext_vars') if exists('g:ctrlp_ext_vars')
@@ -1499,9 +1522,9 @@ fu! ctrlp#init(type, ...)
cal s:SetWD(a:0 ? a:1 : '') cal s:SetWD(a:0 ? a:1 : '')
cal s:MapKeys() cal s:MapKeys()
if has('syntax') && exists('g:syntax_on') if has('syntax') && exists('g:syntax_on')
cal s:syntax() cal ctrlp#syntax()
en en
cal s:SetLines(a:type) cal ctrlp#setlines(a:type)
cal s:BuildPrompt(1) cal s:BuildPrompt(1)
endf endf
if has('autocmd') "{{{1 if has('autocmd') "{{{1

View File

@@ -198,17 +198,20 @@ fu! s:parseline(line)
endf endf
" Public {{{1 " Public {{{1
fu! ctrlp#buffertag#init(fname) fu! ctrlp#buffertag#init(fname)
let fname = exists('s:bufname') ? s:bufname : a:fname let bufs = exists('s:btmode') && s:btmode
let bufs = exists('s:btmode') && s:btmode ? ctrlp#allbufs() : [fname] \ ? filter(ctrlp#buffers(), 'filereadable(v:val)')
\ : [exists('s:bufname') ? s:bufname : a:fname]
let lines = [] let lines = []
for each in bufs for each in bufs
let tftype = get(split(getbufvar(each, '&ft'), '\.'), 0, '') let tftype = get(split(getbufvar(each, '&ft'), '\.'), 0, '')
cal extend(lines, s:process(each, tftype)) cal extend(lines, s:process(each, tftype))
endfo endfo
if !hlexists('CtrlPTabExtra') if has('syntax') && exists('g:syntax_on')
hi link CtrlPTabExtra Comment if !hlexists('CtrlPTabExtra')
hi link CtrlPTabExtra Comment
en
sy match CtrlPTabExtra '\zs\t.*\ze$'
en en
sy match CtrlPTabExtra '\zs\t.*\ze$'
retu lines retu lines
endf endf

View File

@@ -0,0 +1,106 @@
" =============================================================================
" File: autoload/ctrlp/changes.vim
" Description: Change list extension - Jump to a recent change in any buffer
" Author: Kien Nguyen <github.com/kien>
" =============================================================================
" User Configuration {{{1
" Enable:
" let g:ctrlp_extensions += ['changes']
" Create Some Commands:
" " Single buffer
" com! -n=? -com=buffer CtrlPChange
" \ cal ctrlp#init(ctrlp#changes#cmd(0, <q-args>))
" " All listed buffers
" com! CtrlPChangeAll cal ctrlp#init(ctrlp#changes#cmd(1))
"}}}
" Init {{{1
if exists('g:loaded_ctrlp_changes') && g:loaded_ctrlp_changes
fini
en
let g:loaded_ctrlp_changes = 1
let s:changes_var = {
\ 'init': 'ctrlp#changes#init(s:bufnr, s:crfile)',
\ 'accept': 'ctrlp#changes#accept',
\ 'lname': 'changes',
\ 'sname': 'chs',
\ 'exit': 'ctrlp#changes#exit()',
\ 'type': 'tabe',
\ }
let g:ctrlp_ext_vars = exists('g:ctrlp_ext_vars') && !empty(g:ctrlp_ext_vars)
\ ? add(g:ctrlp_ext_vars, s:changes_var) : [s:changes_var]
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
" Utilities {{{1
fu! s:changelist(bufnr)
sil! exe 'noa hid b' a:bufnr
redi => result
sil! changes
redi END
retu map(split(result, "\n")[1:], 'tr(v:val, " ", " ")')
endf
fu! s:process(clines, ...)
let [clines, evas] = [[], []]
for each in a:clines
let parts = matchlist(each, '\v^.\s*\d+\s+(\d+)\s+(\d+)\s(.*)$')
if !empty(parts)
if parts[3] == '' | let parts[3] = ' ' | en
cal add(clines, parts[3].' |'.a:1.':'.a:2.'|'.parts[1].':'.parts[2].'|')
en
endfo
retu reverse(filter(clines, 'count(clines, v:val) == 1'))
endf
" Public {{{1
fu! ctrlp#changes#init(original_bufnr, fname)
let fname = exists('s:bufname') ? s:bufname : a:fname
let bufs = exists('s:clmode') && s:clmode
\ ? filter(ctrlp#buffers(), 'filereadable(v:val)') : [fname]
let [swb, &swb] = [&swb, '']
let lines = []
for each in bufs
let [bufnr, fnamet] = [bufnr('^'.each.'$'), fnamemodify(each, ':t')]
if bufnr > 0
cal extend(lines, s:process(s:changelist(bufnr), bufnr, fnamet))
en
endfo
sil! exe 'noa hid b' a:original_bufnr
let &swb = swb
let g:ctrlp_nolimit = 1
if has('syntax') && exists('g:syntax_on')
cal ctrlp#syntax()
if !hlexists('CtrlPTabExtra')
hi link CtrlPTabExtra Comment
en
sy match CtrlPTabExtra '\zs\t.*\ze$'
en
retu lines
endf
fu! ctrlp#changes#accept(mode, str)
let info = matchlist(a:str, '\t|\(\d\+\):[^|]\+|\(\d\+\):\(\d\+\)|$')
let bufnr = str2nr(get(info, 1))
if bufnr
cal ctrlp#acceptfile(a:mode, fnamemodify(bufname(bufnr), ':p'))
cal cursor(get(info, 2), get(info, 3))
sil! norm! zvzz
en
endf
fu! ctrlp#changes#cmd(mode, ...)
let s:clmode = a:mode
if a:0 && !empty(a:1)
let s:bufname = fnamemodify(a:1, ':p')
en
retu s:id
endf
fu! ctrlp#changes#exit()
unl! s:clmode s:bufname
endf
"}}}
" vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2

View File

@@ -31,30 +31,31 @@ let g:ctrlp_ext_vars = exists('g:ctrlp_ext_vars') && !empty(g:ctrlp_ext_vars)
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars) let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
" Public {{{1 " Public {{{1
fu! ctrlp#line#init() fu! ctrlp#line#init()
let [bufs, lines] = [ctrlp#allbufs(), []] let [bufs, lines] = [filter(ctrlp#buffers(), 'filereadable(v:val)'), []]
for each in bufs for each in bufs
let from_file = readfile(each) let [fnamet, from_file] = [fnamemodify(each, ':t'), readfile(each)]
cal map(from_file, 'tr(v:val, '' '', '' '')') cal map(from_file, 'tr(v:val, '' '', '' '')')
let [id, len_ff, bufnr] = [1, len(from_file), bufnr('^'.each.'$')] let [id, len_ff, bufnr] = [1, len(from_file), bufnr('^'.each.'$')]
wh id <= len_ff wh id <= len_ff
let from_file[id-1] .= ' #:'.bufnr.':'.id let from_file[id-1] .= ' |'.fnamet.'|'.bufnr.':'.id.'|'
let id += 1 let id += 1
endw endw
cal filter(from_file, 'v:val !~ ''^\s*\t#:\d\+:\d\+$''') cal filter(from_file, 'v:val !~ ''^\s*\t|[^|]\+|\d\+:\d\+|$''')
cal extend(lines, from_file) cal extend(lines, from_file)
endfo endfo
if !hlexists('CtrlPTabExtra') if has('syntax') && exists('g:syntax_on')
hi link CtrlPTabExtra Comment if !hlexists('CtrlPTabExtra')
hi link CtrlPTabExtra Comment
en
sy match CtrlPTabExtra '\zs\t.*\ze$'
en en
sy match CtrlPTabExtra '\zs\t.*\ze$'
retu lines retu lines
endf endf
fu! ctrlp#line#accept(mode, str) fu! ctrlp#line#accept(mode, str)
let info = get(split(a:str, '\t#:\ze\d\+:\d\+$'), 1, 0) let info = matchlist(a:str, '\t|[^|]\+|\(\d\+\):\(\d\+\)|$')
let bufnr = str2nr(get(split(info, ':'), 0, 0)) let [bufnr, linenr] = [str2nr(get(info, 1)), get(info, 2)]
let linenr = get(split(info, ':'), 1, 0) if bufnr > 0
if bufnr
cal ctrlp#acceptfile(a:mode, fnamemodify(bufname(bufnr), ':p'), linenr) cal ctrlp#acceptfile(a:mode, fnamemodify(bufname(bufnr), ':p'), linenr)
en en
endf endf

View File

@@ -36,8 +36,13 @@ fu! ctrlp#mrufiles#list(bufnr, ...) "{{{1
let s:cafile = s:cadir.ctrlp#utils#lash().'cache.txt' let s:cafile = s:cadir.ctrlp#utils#lash().'cache.txt'
en en
if a:0 && a:1 == 2 if a:0 && a:1 == 2
cal ctrlp#utils#writecache([], s:cadir, s:cafile) let mrufs = []
retu [] if a:0 == 2
let mrufs = ctrlp#utils#readfile(s:cafile)
cal filter(mrufs, 'index(a:2, v:val) < 0')
en
cal ctrlp#utils#writecache(mrufs, s:cadir, s:cafile)
retu map(mrufs, 'fnamemodify(v:val, '':.'')')
en en
" Get the list " Get the list
let mrufs = ctrlp#utils#readfile(s:cafile) let mrufs = ctrlp#utils#readfile(s:cafile)
@@ -52,15 +57,11 @@ fu! ctrlp#mrufiles#list(bufnr, ...) "{{{1
en en
" Return the list with the active buffer removed " Return the list with the active buffer removed
if bufnr == -1 if bufnr == -1
let crf = fnamemodify(bufname(winbufnr(winnr('#'))), ':p')
let crf = exists('+ssl') ? tr(crf, '/', '\') : crf
let mrufs = empty(crf) ? mrufs : filter(mrufs, 'v:val !='.s:csen.' crf')
if s:re if s:re
let cwd = exists('+ssl') ? tr(getcwd(), '/', '\') : getcwd() let cwd = exists('+ssl') ? tr(getcwd(), '/', '\') : getcwd()
cal filter(mrufs, '!stridx(v:val, cwd)') cal filter(mrufs, '!stridx(v:val, cwd)')
en en
cal map(mrufs, 'fnamemodify(v:val, '':.'')') retu map(mrufs, 'fnamemodify(v:val, '':.'')')
retu mrufs
en en
" Remove old entry " Remove old entry
cal filter(mrufs, 'v:val !='.s:csen.' fn') cal filter(mrufs, 'v:val !='.s:csen.' fn')

View File

@@ -30,10 +30,12 @@ endf
" Public {{{1 " Public {{{1
fu! ctrlp#quickfix#init() fu! ctrlp#quickfix#init()
let g:ctrlp_nolimit = 1 let g:ctrlp_nolimit = 1
if !hlexists('CtrlPqfLineCol') if has('syntax') && exists('g:syntax_on')
hi link CtrlPqfLineCol Search if !hlexists('CtrlPqfLineCol')
hi link CtrlPqfLineCol Search
en
sy match CtrlPqfLineCol '|\zs\d\+:\d\+\ze|'
en en
sy match CtrlPqfLineCol '|\zs\d\+:\d\+\ze|'
retu map(getqflist(), 's:lineout(v:val)') retu map(getqflist(), 's:lineout(v:val)')
endf endf
@@ -48,6 +50,7 @@ fu! ctrlp#quickfix#accept(mode, str)
exe cmd ctrlp#fnesc(filpath) exe cmd ctrlp#fnesc(filpath)
cal cursor(items[2], items[3]) cal cursor(items[2], items[3])
sil! norm! zvzz sil! norm! zvzz
cal ctrlp#setlcdir()
endf endf
fu! ctrlp#quickfix#id() fu! ctrlp#quickfix#id()

View File

@@ -23,14 +23,6 @@ let g:ctrlp_ext_vars = exists('g:ctrlp_ext_vars') && !empty(g:ctrlp_ext_vars)
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars) let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
" Utilities {{{1 " Utilities {{{1
fu! s:nodup(items)
let dict = {}
for each in a:items
cal extend(dict, { each : 0 })
endfo
retu keys(dict)
endf
fu! s:findcount(str) fu! s:findcount(str)
let [tg, fname] = split(a:str, '\t\+\ze[^\t]\+$') let [tg, fname] = split(a:str, '\t\+\ze[^\t]\+$')
let [fname, tgs] = [expand(fname, 1), taglist('^'.tg.'$')] let [fname, tgs] = [expand(fname, 1), taglist('^'.tg.'$')]
@@ -67,30 +59,32 @@ endf
" Public {{{1 " Public {{{1
fu! ctrlp#tag#init(tagfiles) fu! ctrlp#tag#init(tagfiles)
if empty(a:tagfiles) | retu [] | en if empty(a:tagfiles) | retu [] | en
let [tagfiles, g:ctrlp_alltags] = [sort(s:nodup(a:tagfiles)), []] let g:ctrlp_alltags = []
let tagfiles = sort(filter(a:tagfiles, 'count(a:tagfiles, v:val) == 1'))
for each in tagfiles for each in tagfiles
let alltags = s:filter(ctrlp#utils#readfile(each)) let alltags = s:filter(ctrlp#utils#readfile(each))
cal extend(g:ctrlp_alltags, alltags) cal extend(g:ctrlp_alltags, alltags)
endfo endfo
if !hlexists('CtrlPTabExtra') if has('syntax') && exists('g:syntax_on')
hi link CtrlPTabExtra Comment if !hlexists('CtrlPTabExtra')
hi link CtrlPTabExtra Comment
en
sy match CtrlPTabExtra '\zs\t.*\ze$'
en en
sy match CtrlPTabExtra '\zs\t.*\ze$'
retu g:ctrlp_alltags retu g:ctrlp_alltags
endf endf
fu! ctrlp#tag#accept(mode, str) fu! ctrlp#tag#accept(mode, str)
cal ctrlp#exit() cal ctrlp#exit()
let str = matchstr(a:str, '^[^\t]\+\t\+[^\t]\+\ze\t') let str = matchstr(a:str, '^[^\t]\+\t\+[^\t]\+\ze\t')
let [md, tg] = [a:mode, split(str, '^[^\t]\+\zs\t')[0]] let [tg, fnd] = [split(str, '^[^\t]\+\zs\t')[0], s:findcount(str)]
let fnd = s:findcount(str)
let cmds = { let cmds = {
\ 't': ['tab sp', 'tab stj'], \ 't': ['tab sp', 'tab stj'],
\ 'h': ['sp', 'stj'], \ 'h': ['sp', 'stj'],
\ 'v': ['vs', 'vert stj'], \ 'v': ['vs', 'vert stj'],
\ 'e': ['', 'tj'], \ 'e': ['', 'tj'],
\ } \ }
let cmd = fnd[0] == 1 ? cmds[md][0] : cmds[md][1] let cmd = fnd[0] == 1 ? cmds[a:mode][0] : cmds[a:mode][1]
let cmd = cmd == 'tj' && &modified ? 'hid '.cmd : cmd let cmd = cmd == 'tj' && &modified ? 'hid '.cmd : cmd
let cmd = cmd =~ '^tab' ? tabpagenr('$').cmd : cmd let cmd = cmd =~ '^tab' ? tabpagenr('$').cmd : cmd
if fnd[0] == 1 if fnd[0] == 1
@@ -101,6 +95,7 @@ fu! ctrlp#tag#accept(mode, str)
el el
exe cmd tg exe cmd tg
en en
cal ctrlp#setlcdir()
endf endf
fu! ctrlp#tag#id() fu! ctrlp#tag#id()

View File

@@ -13,7 +13,7 @@
" Init {{{1 " Init {{{1
if ( exists('g:loaded_ctrlp_undo') && g:loaded_ctrlp_undo ) if ( exists('g:loaded_ctrlp_undo') && g:loaded_ctrlp_undo )
\ || !( v:version > 702 && has('patch005') ) \ || !( v:version > 703 || ( v:version == 703 && has('patch005') ) )
fini fini
en en
let g:loaded_ctrlp_undo = 1 let g:loaded_ctrlp_undo = 1
@@ -102,7 +102,9 @@ endf
fu! ctrlp#undo#init(undo) fu! ctrlp#undo#init(undo)
let entries = a:undo['entries'] let entries = a:undo['entries']
if empty(entries) | retu [] | en if empty(entries) | retu [] | en
cal s:syntax() if has('syntax') && exists('g:syntax_on')
cal s:syntax()
en
let g:ctrlp_nolimit = 1 let g:ctrlp_nolimit = 1
let entries = sort(s:dict2list(s:flatten(entries)), 's:compval') let entries = sort(s:dict2list(s:flatten(entries)), 's:compval')
retu map(entries, 'v:val[1]." [".v:val[0]."]"') retu map(entries, 'v:val[1]." [".v:val[0]."]"')

View File

@@ -1,4 +1,4 @@
*ctrlp.txt* Fuzzy file, buffer, mru and tag finder. v1.7.1 *ctrlp.txt* Fuzzy file, buffer, mru and tag finder. v1.7.2
*CtrlP* *ControlP* *'ctrlp'* *'ctrl-p'* *CtrlP* *ControlP* *'ctrlp'* *'ctrl-p'*
=============================================================================== ===============================================================================
# # # #
@@ -21,7 +21,7 @@ CONTENTS *ctrlp-contents*
6. Extensions...................................|ctrlp-extensions| 6. Extensions...................................|ctrlp-extensions|
=============================================================================== ===============================================================================
1. Intro *ctrlp-intro* INTRO *ctrlp-intro*
Full path fuzzy file, buffer, mru and tag finder with an intuitive interface. Full path fuzzy file, buffer, mru and tag finder with an intuitive interface.
Written in pure Vimscript for MacVim and Vim version 7.0+. Has full support for Written in pure Vimscript for MacVim and Vim version 7.0+. Has full support for
@@ -31,7 +31,7 @@ finder, and more.
To enable optional extensions (tag, dir, rtscript...), see |ctrlp-extensions|. To enable optional extensions (tag, dir, rtscript...), see |ctrlp-extensions|.
=============================================================================== ===============================================================================
2. Options *ctrlp-options* OPTIONS *ctrlp-options*
Below are the available options and their default values:~ Below are the available options and their default values:~
@@ -51,14 +51,16 @@ Use this to disable the plugin completely: >
< <
*'g:ctrlp_by_filename'* *'g:ctrlp_by_filename'*
Set this to 1 to set search by filename (not full path) as the default: > Set this to 1 to set searching by filename (not full path) as the default: >
let g:ctrlp_by_filename = 0 let g:ctrlp_by_filename = 0
< <
Can be toggled on/off by pressing <c-d> inside the prompt.
*'g:ctrlp_regexp_search'* *'g:ctrlp_regexp'*
Set this to 1 to set |regexp| search as the default: > Set this to 1 to set |regexp| search as the default: >
let g:ctrlp_regexp_search = 0 let g:ctrlp_regexp = 0
< <
Can be toggled on/off by pressing <c-r> inside the prompt.
*'g:ctrlp_match_window_bottom'* *'g:ctrlp_match_window_bottom'*
Set this to 0 to show the match window at the top of the screen: > Set this to 0 to show the match window at the top of the screen: >
@@ -66,8 +68,8 @@ Set this to 0 to show the match window at the top of the screen: >
< <
*'g:ctrlp_match_window_reversed'* *'g:ctrlp_match_window_reversed'*
Change the listing order of the matched files in the match window. The default Change the listing order of the files in the match window. The default setting
setting (1) is from bottom to top: > (1) is from bottom to top: >
let g:ctrlp_match_window_reversed = 1 let g:ctrlp_match_window_reversed = 1
< <
@@ -76,28 +78,37 @@ Set the maximum height of the match window: >
let g:ctrlp_max_height = 10 let g:ctrlp_max_height = 10
< <
*'g:ctrlp_jump_to_buffer'* *'g:ctrlp_switch_buffer'*
When opening a file with <cr> or <c-t>, if the file's already opened somewhere When opening a file with <cr> or <c-t>, if the files already opened somewhere
|CtrlP| will try to jump to it instead of opening a new instance: > |CtrlP| will try to jump to it instead of opening a new instance: >
let g:ctrlp_jump_to_buffer = 2 let g:ctrlp_switch_buffer = 2
< <
1 - only jump to the buffer if its opened in the current tab. 1 - only jump to the buffer if its opened in the current tab.
2 - jump tab as well if the buffer's opened in another tab. 2 - jump tab as well if the buffers opened in another tab.
0 - disable this feature. 0 - disable this feature.
*'g:ctrlp_reuse_window'*
When opening a file with <cr>, |CtrlP| avoids opening it in windows created by
plugins, help and quickfix. Use this to setup some exceptions: >
let g:ctrlp_reuse_window = 'netrw'
<
Acceptable values are partial name, filetype or buftype of the special buffers.
Use |regexp| to specify the pattern.
Example: >
let g:ctrlp_reuse_window = 'netrw\|help\|quickfix'
<
*'g:ctrlp_working_path_mode'* *'g:ctrlp_working_path_mode'*
When starting up, |CtrlP| sets its local working directory according to this When starting up, |CtrlP| sets its local working directory according to this
variable: > variable: >
let g:ctrlp_working_path_mode = 2 let g:ctrlp_working_path_mode = 2
< <
1 - the parent directory of the current file. 1 - the parent directory of the current file.
2 - the nearest ancestor that contains one of these directories/files: 2 - the nearest ancestor that contains one of these directories or files:
.git/ .git/ .hg/ .svn/ .bzr/ _darcs/
.hg/
.bzr/
_darcs/
root.dir
0 - dont manage working directory. 0 - dont manage working directory.
Note: you can use b:ctrlp_working_path_mode (a |b:var|) to set this option on a
per buffer basis.
*'g:ctrlp_root_markers'* *'g:ctrlp_root_markers'*
Use this to set your own root markers in addition to the default ones. Your Use this to set your own root markers in addition to the default ones. Your
@@ -105,7 +116,7 @@ markers will take precedence: >
let g:ctrlp_root_markers = [''] let g:ctrlp_root_markers = ['']
< <
These markers (builtins and yours) will serve as identifiers for the '/' and These markers (builtins and yours) will serve as identifiers for the '/' and
'\' special inputs (section 5.e). '\' special inputs (|ctrlp-input-formats| (e)).
*'g:ctrlp_use_caching'* *'g:ctrlp_use_caching'*
Set this to 0 to disable per-session caching. When disabled, caching will still Set this to 0 to disable per-session caching. When disabled, caching will still
@@ -165,11 +176,10 @@ only need to keep the lines that youve changed the values (inside []): >
< <
Note: In some terminals, its not possible to remap <c-h> without also changing Note: In some terminals, its not possible to remap <c-h> without also changing
<bs> (|key-codes|). So if pressing <bs> moves the cursor to the left instead of <bs> (|key-codes|). So if pressing <bs> moves the cursor to the left instead of
deleting a char for you, add this to your |vimrc| to change the default <c-h> deleting a char for you, add this to your |vimrc| to disable the default <c-h>
mapping: > mapping: >
let g:ctrlp_prompt_mappings = { let g:ctrlp_prompt_mappings = {
\ 'PrtBS()': ['<bs>', '<c-]>', '<c-h>'], \ 'PrtCurLeft()': ['<left>', '<c-^>']
\ 'PrtCurLeft()': ['<left>', '<c-^>'],
\ } \ }
< <
@@ -213,7 +223,7 @@ Set to 1 to sort the MRU file list to most-recently-entered-buffer order: >
< <
*'g:ctrlp_dotfiles'* *'g:ctrlp_dotfiles'*
Set this to 0 if you dont want |CtrlP| to search for dotfiles and dotdirs: > Set this to 0 if you dont want |CtrlP| to scan for dotfiles and dotdirs: >
let g:ctrlp_dotfiles = 1 let g:ctrlp_dotfiles = 1
< <
You can use |'wildignore'| to exclude anything from the search. You can use |'wildignore'| to exclude anything from the search.
@@ -225,9 +235,9 @@ Examples: >
Note #1: the `*/` in front of each directory glob is required. Note #1: the `*/` in front of each directory glob is required.
Note #2: |wildignore| influences the result of |expand()|, |globpath()| and Note #2: |wildignore| influences the result of |expand()|, |globpath()| and
|glob()| which many plugins use to find stuff on the system (e.g. fugitive.vim |glob()| which many plugins use to find stuff on the system (e.g. VCS related
looks for .git/, some other plugins look for external .exe tools on Windows). plugins look for .git/, .hg/,... some other plugins look for external *.exe
So be a little mindful of what you put in your |wildignore|. tools on Windows). So be a little mindful of what you put in your |wildignore|.
*'g:ctrlp_custom_ignore'* *'g:ctrlp_custom_ignore'*
In addition to |'wildignore'|, use this for files and directories you want only In addition to |'wildignore'|, use this for files and directories you want only
@@ -243,12 +253,6 @@ Examples: >
\ } \ }
< <
*'g:ctrlp_highlight_match'*
Use this to enable/disable highlighting of the matched patterns and to specify
the highlight group thatll be used: >
let g:ctrlp_highlight_match = [1, 'Identifier']
<
*'g:ctrlp_max_files'* *'g:ctrlp_max_files'*
The maximum number of files to scan, set to 0 for no limit: > The maximum number of files to scan, set to 0 for no limit: >
let g:ctrlp_max_files = 10000 let g:ctrlp_max_files = 10000
@@ -317,20 +321,21 @@ pressing <c-y>:
let g:ctrlp_open_new_file = 'v' let g:ctrlp_open_new_file = 'v'
< <
*'g:ctrlp_open_multi'* *'g:ctrlp_open_multiple_files'*
If non-zero, this will enable opening multiple files with <c-z> and <c-o>: > If non-zero, this will enable opening multiple files with <c-z> and <c-o>: >
let g:ctrlp_open_multi = '1v' let g:ctrlp_open_multiple_files = 'v'
<
Example: >
let g:ctrlp_open_multiple_files = '2vr'
< <
For the number: For the number:
- If bigger than 1, itll be used as the maximum number of windows or tabs to - If given, itll be used as the maximum number of windows or tabs to create
create when opening the files (the rest will be hidden buffers). when opening the files (the rest will be opened as hidden buffers).
- If is 1, <c-o> will open all files, each in a new window or new tab. - If not given, <c-o> will open all files, each in a new window or new tab.
- If no number is given, only the first file will be opened in a window,
either new window or reused, and the rest will be hidden buffers.
For the letters: For the letters:
t - each in a new tab t - each file in a new tab.
h - each in a new horizontal split h - each file in a new horizontal split.
v - each in a new vertical split v - each file in a new vertical split.
Reuse the current window: Reuse the current window:
tr, tr,
hr, hr,
@@ -349,17 +354,7 @@ Pressing <c-o> or <c-y> will then prompt for a keypress. The key can be:
r - open in current window (for <c-y> only) r - open in current window (for <c-y> only)
<esc>, <c-c> - cancel and go back to the prompt. <esc>, <c-c> - cancel and go back to the prompt.
Any other key - use the behavior specified with |g:ctrlp_open_new_file| and Any other key - use the behavior specified with |g:ctrlp_open_new_file| and
|g:ctrlp_open_multi|. |g:ctrlp_open_multiple_files|.
*'g:ctrlp_dont_split'*
When opening a file with <cr>, |CtrlP| avoids opening it in windows created by
plugins, help and quickfix. Use this to setup some exceptions: >
let g:ctrlp_dont_split = 'netrw'
<
Acceptable values are partial names or filetypes of the special buffers. Use
|regexp| to specify the pattern. Example: >
let g:ctrlp_dont_split = 'netrw\|help\|quickfix'
<
*'g:ctrlp_follow_symlinks'* *'g:ctrlp_follow_symlinks'*
Set this to 1 to follow symbolic links when listing files: > Set this to 1 to follow symbolic links when listing files: >
@@ -394,7 +389,7 @@ Example: >
See https://gist.github.com/1610859 for a working example. See https://gist.github.com/1610859 for a working example.
=============================================================================== ===============================================================================
3. Commands *ctrlp-commands* COMMANDS *ctrlp-commands*
*:CtrlP* *:CtrlP*
:CtrlP [starting-directory] :CtrlP [starting-directory]
@@ -412,19 +407,19 @@ See https://gist.github.com/1610859 for a working example.
:CtrlPMRU :CtrlPMRU
Open |CtrlP| in find Most-Recently-Used file mode. Open |CtrlP| in find Most-Recently-Used file mode.
*:ClearCtrlPCache* *:CtrlPClearCache*
:ClearCtrlPCache :CtrlPClearCache
Flush the cache for the current working directory. The same as pressing <F5> Flush the cache for the current working directory. The same as pressing <F5>
inside |CtrlP|. inside |CtrlP|.
You can also enable/disable caching with the option |g:ctrlp_use_caching|. You can also enable/disable caching with the option |g:ctrlp_use_caching|.
*:ClearAllCtrlPCaches* *:CtrlPClearAllCaches*
:ClearAllCtrlPCaches :CtrlPClearAllCaches
Delete all the cache files saved in |g:ctrlp_cache_dir|. Delete all the cache files saved in |g:ctrlp_cache_dir|.
*:ResetCtrlP* *:CtrlPReload*
:ResetCtrlP :CtrlPReload
Reset all options and take in new values of the option variables. Load new values for the option variables.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
The following commands ignore the current value of |g:ctrlp_working_path_mode|: The following commands ignore the current value of |g:ctrlp_working_path_mode|:
@@ -439,7 +434,7 @@ The following commands ignore the current value of |g:ctrlp_working_path_mode|:
This acts like |:CtrlP| with |path_mode| = 2 This acts like |:CtrlP| with |path_mode| = 2
=============================================================================== ===============================================================================
4. Mappings *ctrlp-mappings* MAPPINGS *ctrlp-mappings*
*'ctrlp-<c-p>'* *'ctrlp-<c-p>'*
<c-p> <c-p>
@@ -448,14 +443,14 @@ The following commands ignore the current value of |g:ctrlp_working_path_mode|:
Once inside the prompt:~ Once inside the prompt:~
<c-r> *'ctrlp-fullregexp'* <c-r> *'ctrlp-fullregexp'*
Toggle between the string mode (section 5.a & b) and full |regexp| mode. Toggle between the string mode and full |regexp| mode.
(note: in full |regexp| mode, the prompts base is 'r>>' instead of '>>>') Note: in full |regexp| mode, the prompts base is 'r>>' instead of '>>>'
See also |input-formats| (guide) and |g:ctrlp_regexp_search| (option). See also |input-formats| (guide) and |g:ctrlp_regexp_search| (option).
<c-d> <c-d>
Toggle between full-path search and filename only search. Toggle between full-path search and filename only search.
(note: in filename mode, the prompts base is '>d>' instead of '>>>') Note: in filename mode, the prompts base is '>d>' instead of '>>>'
<c-f>, 'forward' <c-f>, 'forward'
<c-up> <c-up>
@@ -543,7 +538,8 @@ Once inside the prompt:~
- Remove deleted files from MRU list. - Remove deleted files from MRU list.
<F7> <F7>
Clear MRU list. - Wipe MRU list.
- Delete MRU entries marked by <c-z>.
<insert> <insert>
Insert the word under the cursor (in the active buffer) into the prompt. Insert the word under the cursor (in the active buffer) into the prompt.
@@ -552,7 +548,7 @@ Once inside the prompt:~
<c-c>, <c-c>,
<c-g> <c-g>
Exit |CtrlP|. Exit |CtrlP|.
<c-c> can also be used to stop the scan if its taking too long. Note: <c-c> can also be used to stop the scan if its taking too long.
Choose your own mappings with |g:ctrlp_prompt_mappings|. Choose your own mappings with |g:ctrlp_prompt_mappings|.
@@ -565,7 +561,7 @@ When inside the match window (press <s-tab> to switch):~
matches that key. matches that key.
=============================================================================== ===============================================================================
5. Input Formats *ctrlp-input-formats* INPUT FORMATS *ctrlp-input-formats*
Formats for inputting in the prompt:~ Formats for inputting in the prompt:~
@@ -613,7 +609,7 @@ f) Type the name of a non-existent file and press <c-y> to create it. Mark a
g) Submit ? to open this help file. g) Submit ? to open this help file.
=============================================================================== ===============================================================================
6. Extensions *g:ctrlp-extensions* EXTENSIONS *g:ctrlp-extensions*
Extensions are optional. To enable an extension, add its name to the variable Extensions are optional. To enable an extension, add its name to the variable
g:ctrlp_extensions: > g:ctrlp_extensions: >
@@ -720,6 +716,48 @@ Statuslines:~
For rebuilding the statuslines, see |g:ctrlp_status_func|. For rebuilding the statuslines, see |g:ctrlp_status_func|.
===============================================================================
MISCELLANEOUS CONFIGS *ctrlp-miscellaneous-configs*
* Use |wildignore| for |g:ctrlp_user_command|:
>
function! s:wig2cmd()
" Change wildignore into space or | separated groups
" e.g. .aux .out .toc .jpg .bmp .gif
" or .aux$\|.out$\|.toc$\|.jpg$\|.bmp$\|.gif$
let pats = ['[*\/]*\([?_.0-9A-Za-z]\+\)\([*\/]*\)\(\\\@<!,\|$\)','\\\@<!,']
let subs = has('win32') || has('win64') ? ['\1\3', ' '] : ['\1\2\3', '\\|']
let expr = substitute(&wig, pats[0], subs[0], 'g')
let expr = substitute(expr, pats[1], subs[1], 'g')
let expr = substitute(expr, '\\,', ',', 'g')
" Set the user_command option
let g:ctrlp_user_command = has('win32') || has('win64')
\ ? 'dir %s /-n /b /s /a-d | findstr /V /l "'.expr.'"'
\ : 'find %s -type f | grep -v "'.expr .'"'
endfunction
call s:wig2cmd()
<
(submitted by Rich Alesi <github.com/ralesi>)
* A standalone function to set the working directory to the projects root, or
to the parent directory of the current file if a root cant be found:
>
function! s:setcwd()
let cph = expand('%:p:h', 1)
if match(cph, '\v^<.+>://') >= 0 | retu | en
for mkr in ['.git/', '.hg/', '.svn/', '.bzr/', '_darcs/', '.vimprojects']
let wd = call('find'.(mkr =~ '/$' ? 'dir' : 'file'), [mkr, cph.';'])
if wd != '' | let &acd = 0 | brea | en
endfo
exe 'lc!' fnameescape(wd == '' ? cph : substitute(wd, mkr.'$', '.', ''))
endfunction
autocmd BufEnter * call s:setcwd()
<
(requires Vim 7.1.299+)
=============================================================================== ===============================================================================
CREDITS *ctrlp-credits* CREDITS *ctrlp-credits*
@@ -736,32 +774,37 @@ gibhub, bitbucket, and through email.
Special thanks:~ Special thanks:~
* Woojong Koh <github.com/wjkoh> * Woojong Koh <github.com/wjkoh>
Forked and suggested the support for VCS listing commands.
* Yasuhiro Matsumoto <github.com/mattn>
Added option to use Migemo for Japanese filenames.
* Kyo Nagashima <github.com/hail2u>
Made some enhancements to file opening mappings.
* Piet Delport <github.com/pjdelport>
Changed the default cache directory to meet XDG spec.
* Kent Sibilev <github.com/datanoise>
Debugged and made various patches.
* Simon Ruderich * Simon Ruderich
* Yasuhiro Matsumoto <github.com/mattn>
* Ken Earley <github.com/kenearley> * Ken Earley <github.com/kenearley>
* Kyo Nagashima <github.com/hail2u>
* Zak Johnson <github.com/zakj> * Zak Johnson <github.com/zakj>
* Diego Viola <github.com/diegoviola> * Diego Viola <github.com/diegoviola>
* Piet Delport <github.com/pjdelport>
* Thibault Duplessis <github.com/ornicar> * Thibault Duplessis <github.com/ornicar>
* Kent Sibilev <github.com/datanoise>
* Tacahiroy <github.com/tacahiroy> * Tacahiroy <github.com/tacahiroy>
Bugfixes/Corrections. * Luca Pette <github.com/lucapette>
=============================================================================== ===============================================================================
CHANGELOG *ctrlp-changelog* CHANGELOG *ctrlp-changelog*
+ New option: |g:ctrlp_mruf_last_entered| change MRU to recently-entered. + Rename:
*ClearCtrlPCache* -> |CtrlPClearCache|
*ClearAllCtrlPCaches* -> |CtrlPClearAllCaches|
*ResetCtrlP* -> |CtrlPReload|
Before 2012/03/02~
+ Rename:
*g:ctrlp_regexp_search* -> |g:ctrlp_regexp|,
*g:ctrlp_dont_split* -> |g:ctrlp_reuse_window|,
*g:ctrlp_jump_to_buffer* -> |g:ctrlp_switch_buffer|.
+ Rename and tweak:
*g:ctrlp_open_multi* -> |g:ctrlp_open_multiple_files|.
+ Deprecate *g:ctrlp_highlight_match*
+ Extend |g:ctrlp_user_command| to support multiple commands.
+ New option: |g:ctrlp_mruf_last_entered| change MRU to Recently-Entered.
Before 2012/01/15~ Before 2012/01/15~
@@ -770,7 +813,7 @@ Before 2012/01/15~
+ New options: |g:ctrlp_arg_map| for <c-y>, <c-o> to accept an argument. + New options: |g:ctrlp_arg_map| for <c-y>, <c-o> to accept an argument.
|g:ctrlp_status_func| custom statusline. |g:ctrlp_status_func| custom statusline.
|g:ctrlp_mruf_relative| show only MRU files inside cwd. |g:ctrlp_mruf_relative| show only MRU files inside cwd.
+ Extend |g:ctrlp_open_multi| with new optional values: tr, hr, vr. + Extend g:ctrlp_open_multi with new optional values: tr, hr, vr.
+ Extend |g:ctrlp_custom_ignore| to specifically filter dir, file and link. + Extend |g:ctrlp_custom_ignore| to specifically filter dir, file and link.
Before 2012/01/05~ Before 2012/01/05~
@@ -790,29 +833,29 @@ Before 2011/11/30~
Before 2011/11/13~ Before 2011/11/13~
+ New special input: '/' and '\' find root (section 5.e) + New special input: '/' and '\' find root (|ctrlp-input-formats| (e))
+ Remove ctrlp#SetWorkingPath(). + Remove ctrlp#SetWorkingPath().
+ Remove |g:ctrlp_mru_files|, make MRU permanent. + Remove *g:ctrlp_mru_files* and make MRU mode permanent.
+ Extend |g:ctrlp_open_multi|, add new ways to open files. + Extend g:ctrlp_open_multi, add new ways to open files.
+ New option: |g:ctrlp_dont_split|, + New option: g:ctrlp_dont_split,
|g:ctrlp_mruf_case_sensitive| |g:ctrlp_mruf_case_sensitive|
Before 2011/10/30~ Before 2011/10/30~
+ New feature: Support for custom extensions. + New feature: Support for custom extensions.
<F5> also removes non-existent files from MRU list. <F5> also removes non-existent files from MRU list.
+ New option: |g:ctrlp_jump_to_buffer| + New option: g:ctrlp_jump_to_buffer
Before 2011/10/12~ Before 2011/10/12~
+ New features: Open multiple files. + New features: Open multiple files.
Pass Vims |++opt| and |+cmd| to the opening file Pass Vims |++opt| and |+cmd| to the opening file
(section 5.c) (|ctrlp-input-formats| (c))
Auto-complete each dir for |:CtrlP| [starting-directory] Auto-complete each dir for |:CtrlP| [starting-directory]
+ New mappings: <c-z> mark/unmark a file to be opened with <c-o>. + New mappings: <c-z> mark/unmark a file to be opened with <c-o>.
<c-o> open all marked files. <c-o> open all marked files.
+ New option: |g:ctrlp_open_multi| + New option: g:ctrlp_open_multi
+ Remove |g:ctrlp_persistent_input|, |g:ctrlp_live_update| and <c-^>. + Remove *g:ctrlp_persistent_input* *g:ctrlp_live_update* and <c-^>.
Before 2011/09/29~ Before 2011/09/29~
@@ -824,22 +867,22 @@ Before 2011/09/29~
Before 2011/09/19~ Before 2011/09/19~
+ New command: |ResetCtrlP| + New command: ResetCtrlP
+ New options: |g:ctrlp_max_files|, + New options: |g:ctrlp_max_files|,
|g:ctrlp_max_depth|, |g:ctrlp_max_depth|,
|g:ctrlp_live_update| g:ctrlp_live_update
+ New mapping: <c-^> + New mapping: <c-^>
Before 2011/09/12~ Before 2011/09/12~
+ Ability to cycle through matched lines in the match window. + Ability to cycle through matched lines in the match window.
+ Extend the behavior of |g:ctrlp_persistent_input| + Extend the behavior of g:ctrlp_persistent_input
+ Extend the behavior of |:CtrlP| + Extend the behavior of |:CtrlP|
+ New options: |g:ctrlp_dotfiles|, + New options: |g:ctrlp_dotfiles|,
|g:ctrlp_clear_cache_on_exit|, |g:ctrlp_clear_cache_on_exit|,
|g:ctrlp_highlight_match|, g:ctrlp_highlight_match,
|g:ctrlp_user_command| |g:ctrlp_user_command|
+ New special input: '..' (section 5.d) + New special input: '..' (|ctrlp-input-formats| (d))
+ New mapping: <F5>. + New mapping: <F5>.
+ New commands: |:CtrlPCurWD|, + New commands: |:CtrlPCurWD|,
|:CtrlPCurFile|, |:CtrlPCurFile|,
@@ -848,11 +891,11 @@ Before 2011/09/12~
+ New feature: Search in most recently used (MRU) files + New feature: Search in most recently used (MRU) files
+ New mapping: <c-b>. + New mapping: <c-b>.
+ Extended the behavior of <c-f>. + Extended the behavior of <c-f>.
+ New options: |g:ctrlp_mru_files|, + New options: g:ctrlp_mru_files,
|g:ctrlp_mruf_max|, |g:ctrlp_mruf_max|,
|g:ctrlp_mruf_exclude|, |g:ctrlp_mruf_exclude|,
|g:ctrlp_mruf_include| |g:ctrlp_mruf_include|
+ New command: |:CtrlPMRUFiles| + New command: |:CtrlPMRU|
First public release: 2011/09/06~ First public release: 2011/09/06~

View File

@@ -18,6 +18,10 @@ com! -n=? -com=dir CtrlP cal ctrlp#init(0, <q-args>)
com! CtrlPBuffer cal ctrlp#init(1) com! CtrlPBuffer cal ctrlp#init(1)
com! CtrlPMRUFiles cal ctrlp#init(2) com! CtrlPMRUFiles cal ctrlp#init(2)
com! CtrlPClearCache cal ctrlp#clr()
com! CtrlPClearAllCaches cal ctrlp#clra()
com! CtrlPReload cal ctrlp#reset()
com! ClearCtrlPCache cal ctrlp#clr() com! ClearCtrlPCache cal ctrlp#clr()
com! ClearAllCtrlPCaches cal ctrlp#clra() com! ClearAllCtrlPCaches cal ctrlp#clra()
com! ResetCtrlP cal ctrlp#reset() com! ResetCtrlP cal ctrlp#reset()
@@ -26,7 +30,7 @@ com! CtrlPCurWD cal ctrlp#init(0, 0)
com! CtrlPCurFile cal ctrlp#init(0, 1) com! CtrlPCurFile cal ctrlp#init(0, 1)
com! CtrlPRoot cal ctrlp#init(0, 2) com! CtrlPRoot cal ctrlp#init(0, 2)
if g:ctrlp_map != '' if g:ctrlp_map != '' && !hasmapto(':<c-u>'.g:ctrlp_cmd.'<cr>', 'n')
exe 'nn <silent>' g:ctrlp_map ':<c-u>'.g:ctrlp_cmd.'<cr>' exe 'nn <silent>' g:ctrlp_map ':<c-u>'.g:ctrlp_cmd.'<cr>'
en en

View File

@@ -16,14 +16,17 @@ Full path fuzzy __file__, __buffer__, __mru__ and __tag__ finder for Vim.
Once CtrlP is open: Once CtrlP is open:
* Press `<c-f>` and `<c-b>` to switch between find file, buffer, and MRU file modes. * Press `<c-f>` and `<c-b>` to switch between find file, buffer, and MRU file
modes.
* Press `<c-d>` to switch to filename only search instead of full path. * Press `<c-d>` to switch to filename only search instead of full path.
* Press `<F5>` to purge the cache for the current directory and get new files. * Press `<F5>` to purge the cache for the current directory and get new files.
* Use `*` or `|` in the prompt to submit the string as a Vims regexp pattern. * Use `*` or `|` in the prompt to submit the string as a Vims regexp pattern.
* Or press `<c-r>` to switch to regexp mode. * Or press `<c-r>` to switch to regexp mode.
* End the input string with a colon `:` followed by a command to execute after opening the file. * End the input string with a colon `:` followed by a command to execute after
opening the file.
e.g. `abc:45` will open the file matched the pattern and jump to line 45. e.g. `abc:45` will open the file matched the pattern and jump to line 45.
* Submit two dots `..` as the input string to go backward the directory tree by 1 level. * Submit two dots `..` as the input string to go backward the directory tree by
1 level.
* Use `<c-y>` to create a new file and its parent dirs. * Use `<c-y>` to create a new file and its parent dirs.
* Use `<c-z>` to mark/unmark files and `<c-o>` to open them. * Use `<c-z>` to mark/unmark files and `<c-o>` to open them.
@@ -34,7 +37,8 @@ e.g. `abc:45` will open the file matched the pattern and jump to line 45.
let g:ctrlp_map = '<c-p>' let g:ctrlp_map = '<c-p>'
``` ```
* When CtrlP is invoked, it automatically sets the working directory according to this variable: * When CtrlP is invoked, it automatically sets its local working directory
according to this variable:
```vim ```vim
let g:ctrlp_working_path_mode = 2 let g:ctrlp_working_path_mode = 2
@@ -43,19 +47,14 @@ e.g. `abc:45` will open the file matched the pattern and jump to line 45.
0 - dont manage working directory. 0 - dont manage working directory.
1 - the parent directory of the current file. 1 - the parent directory of the current file.
2 - the nearest ancestor that contains one of these directories or files: 2 - the nearest ancestor that contains one of these directories or files:
`.git/` `.hg/` `.svn/` `.bzr/` `_darcs/`
.git/ * If you want to exclude directories or files from the search, use the Vims
.hg/ option `wildignore` and/or the option `g:ctrlp_custom_ignore`. Examples:
.bzr/
_darcs/
root.dir
* If you want to exclude directories or files from the search, you can use the Vims option `wildignore`
and/or the option `g:ctrlp_custom_ignore`. Examples:
```vim ```vim
set wildignore+=*/.git/*,*/.hg/*,*/.svn/* " for Linux/MacOSX set wildignore+=*/tmp/*,*.so,*.swp,*.zip " MacOSX/Linux
set wildignore+=.git\*,.hg\*,.svn\* " for Windows set wildignore+=tmp\*,*.swp,*.zip,*.exe " Windows
let g:ctrlp_custom_ignore = '\.git$\|\.hg$\|\.svn$' let g:ctrlp_custom_ignore = '\.git$\|\.hg$\|\.svn$'
let g:ctrlp_custom_ignore = { let g:ctrlp_custom_ignore = {
@@ -68,8 +67,8 @@ and/or the option `g:ctrlp_custom_ignore`. Examples:
* Use a custom file listing command with: * Use a custom file listing command with:
```vim ```vim
let g:ctrlp_user_command = 'find %s -type f' " MacOSX/Linux let g:ctrlp_user_command = 'find %s -type f' " MacOSX/Linux
let g:ctrlp_user_command = 'dir %s /-n /b /s /a-d' " Windows let g:ctrlp_user_command = 'dir %s /-n /b /s /a-d' " Windows
``` ```
_Check [the docs][2] for more mappings, commands and options._ _Check [the docs][2] for more mappings, commands and options._

View File

@@ -55,7 +55,7 @@ Installation
cd ~/.vim/bundle cd ~/.vim/bundle
git clone https://github.com/scrooloose/syntastic.git git clone https://github.com/scrooloose/syntastic.git
Then reload vim, run `:helptags`, and check out `:help syntastic.txt`. Then reload vim, run `:Helptags`, and check out `:help syntastic.txt`.
Google group Google group
@@ -64,6 +64,16 @@ Google group
To get information or make suggestions check out the [google group](https://groups.google.com/group/vim-syntastic). To get information or make suggestions check out the [google group](https://groups.google.com/group/vim-syntastic).
FAQ
---
__Q. I installed syntastic but it isn't reporting any errors ...__
A. The most likely reason is that the syntax checker that it requires isn't installed. For example: python requires either `flake8`, `pyflakes` or `pylint` to be installed and in `$PATH`. To see which executable is required, just look in `syntax_checkers/<filetype>.vim`.
Another reason it could fail is that the error output for the syntax checker may have changed. In this case, make sure you have the latest version of the syntax checker installed. If it still fails then create an issue - or better yet, create a pull request.
Changelog Changelog
--------- ---------
2.3.0 (16-feb-2012) 2.3.0 (16-feb-2012)

View File

@@ -38,6 +38,34 @@ function! s:Init()
call s:RegHandler('php\.h', 'syntastic#c#CheckPhp', []) call s:RegHandler('php\.h', 'syntastic#c#CheckPhp', [])
endfunction endfunction
" default include directories
let s:default_includes = [ '.', '..', 'include', 'includes',
\ '../include', '../includes' ]
" uniquify the input list
function! s:Unique(list)
let l = []
for elem in a:list
if index(l, elem) == -1
let l = add(l, elem)
endif
endfor
return l
endfunction
" get the gcc include directory argument depending on the default
" includes and the optional user-defined 'g:syntastic_c_include_dirs'
function! syntastic#c#GetIncludeDirs(filetype)
let include_dirs = copy(s:default_includes)
if exists('g:syntastic_'.a:filetype.'_include_dirs')
call extend(include_dirs, g:syntastic_{a:filetype}_include_dirs)
endif
return join(map(s:Unique(include_dirs), '"-I" . v:val'), ' ')
endfunction
" search the first 100 lines for include statements that are " search the first 100 lines for include statements that are
" given in the handlers dictionary " given in the handlers dictionary
function! syntastic#c#SearchHeaders() function! syntastic#c#SearchHeaders()

View File

@@ -127,6 +127,10 @@ function! s:UpdateErrors(auto_invoked)
call s:RefreshSigns() call s:RefreshSigns()
endif endif
if g:syntastic_enable_highlighting
call s:HightlightErrors()
endif
if g:syntastic_auto_jump && s:BufHasErrorsOrWarningsToDisplay() if g:syntastic_auto_jump && s:BufHasErrorsOrWarningsToDisplay()
silent! ll silent! ll
endif endif
@@ -160,8 +164,10 @@ function! s:LocList()
endfunction endfunction
"clear the loc list for the buffer "clear the loc list for the buffer
function! s:ClearLocList() function! s:ClearCache()
let b:syntastic_loclist = [] let b:syntastic_loclist = []
unlet! b:syntastic_errors
unlet! b:syntastic_warnings
endfunction endfunction
"detect and cache all syntax errors in this buffer "detect and cache all syntax errors in this buffer
@@ -169,7 +175,7 @@ endfunction
"depends on a function called SyntaxCheckers_{&ft}_GetLocList() existing "depends on a function called SyntaxCheckers_{&ft}_GetLocList() existing
"elsewhere "elsewhere
function! s:CacheErrors() function! s:CacheErrors()
call s:ClearLocList() call s:ClearCache()
if filereadable(expand("%")) if filereadable(expand("%"))
@@ -195,7 +201,7 @@ function! s:ToggleMode()
let g:syntastic_mode_map['mode'] = "active" let g:syntastic_mode_map['mode'] = "active"
endif endif
call s:ClearLocList() call s:ClearCache()
call s:UpdateErrors(1) call s:UpdateErrors(1)
echo "Syntastic: " . g:syntastic_mode_map['mode'] . " mode enabled" echo "Syntastic: " . g:syntastic_mode_map['mode'] . " mode enabled"
@@ -217,30 +223,22 @@ function! s:ModeMapAllowsAutoChecking()
endif endif
endfunction endfunction
"return true if there are cached errors/warnings for this buf
function! s:BufHasErrorsOrWarnings()
return !empty(s:LocList())
endfunction
"return true if there are cached errors for this buf
function! s:BufHasErrors()
return len(s:ErrorsForType('E')) > 0
endfunction
function! s:BufHasErrorsOrWarningsToDisplay() function! s:BufHasErrorsOrWarningsToDisplay()
return s:BufHasErrors() || (!g:syntastic_quiet_warnings && s:BufHasErrorsOrWarnings()) return len(s:Errors()) || (!g:syntastic_quiet_warnings && !empty(s:LocList()))
endfunction
function! s:ErrorsForType(type)
return s:FilterLocList({'type': a:type})
endfunction endfunction
function! s:Errors() function! s:Errors()
return s:ErrorsForType("E") if !exists("b:syntastic_errors")
let b:syntastic_errors = s:FilterLocList({'type': "E"})
endif
return b:syntastic_errors
endfunction endfunction
function! s:Warnings() function! s:Warnings()
return s:ErrorsForType("W") if !exists("b:syntastic_warnings")
let b:syntastic_warnings = s:FilterLocList({'type': "W"})
endif
return b:syntastic_warnings
endfunction endfunction
"Filter a loc list (defaults to s:LocList()) by a:filters "Filter a loc list (defaults to s:LocList()) by a:filters
@@ -253,16 +251,21 @@ endfunction
function! s:FilterLocList(filters, ...) function! s:FilterLocList(filters, ...)
let llist = a:0 ? a:1 : s:LocList() let llist = a:0 ? a:1 : s:LocList()
let rv = deepcopy(llist) let rv = []
for error in llist
for key in keys(a:filters)
let rhs = a:filters[key]
if type(rhs) == 1 "string
let rhs = '"' . rhs . '"'
endif
call filter(rv, "v:val['".key."'] ==? " . rhs) for error in llist
let passes_filters = 1
for key in keys(a:filters)
if error[key] !=? a:filters[key]
let passes_filters = 0
break
endif
endfor endfor
if passes_filters
call add(rv, error)
endif
endfor endfor
return rv return rv
endfunction endfunction
@@ -351,6 +354,43 @@ function! s:ShowLocList()
endif endif
endfunction endfunction
"highlight the current errors using matchadd()
"
"The function `Syntastic_{&ft}_GetHighlightRegex` is used to get the regex to
"highlight errors that do not have a 'col' key (and hence cant be done
"automatically). This function must take one arg (an error item) and return a
"regex to match that item in the buffer.
"
"If the 'force_highlight_callback' key is set for an error item, then invoke
"the callback even if it can be highlighted automatically.
function! s:HightlightErrors()
call s:ClearErrorHighlights()
let fts = substitute(&ft, '-', '_', 'g')
for ft in split(fts, '\.')
for item in s:LocList()
let force_callback = has_key(item, 'force_highlight_callback') && item['force_highlight_callback']
let group = item['type'] == 'E' ? 'SyntasticError' : 'SyntasticWarning'
if item['col'] && !force_callback
let lastcol = col([item['lnum'], '$'])
let lcol = min([lastcol, item['col']])
call matchadd(group, '\%'.item['lnum'].'l\%'.lcol.'c')
else
if exists("*SyntaxCheckers_". ft ."_GetHighlightRegex")
let term = SyntaxCheckers_{ft}_GetHighlightRegex(item)
if len(term) > 0
call matchadd(group, '\%' . item['lnum'] . 'l' . term)
endif
endif
endif
endfor
endfor
endfunction
"remove all error highlights from the window "remove all error highlights from the window
function! s:ClearErrorHighlights() function! s:ClearErrorHighlights()
for match in getmatches() for match in getmatches()
@@ -439,30 +479,33 @@ function! SyntasticStatuslineFlag()
let errors = s:Errors() let errors = s:Errors()
let warnings = s:Warnings() let warnings = s:Warnings()
let num_errors = len(errors)
let num_warnings = len(warnings)
let output = g:syntastic_stl_format let output = g:syntastic_stl_format
"hide stuff wrapped in %E(...) unless there are errors "hide stuff wrapped in %E(...) unless there are errors
let output = substitute(output, '\C%E{\([^}]*\)}', len(errors) ? '\1' : '' , 'g') let output = substitute(output, '\C%E{\([^}]*\)}', num_errors ? '\1' : '' , 'g')
"hide stuff wrapped in %W(...) unless there are warnings "hide stuff wrapped in %W(...) unless there are warnings
let output = substitute(output, '\C%W{\([^}]*\)}', len(warnings) ? '\1' : '' , 'g') let output = substitute(output, '\C%W{\([^}]*\)}', num_warnings ? '\1' : '' , 'g')
"hide stuff wrapped in %B(...) unless there are both errors and warnings "hide stuff wrapped in %B(...) unless there are both errors and warnings
let output = substitute(output, '\C%B{\([^}]*\)}', (len(warnings) && len(errors)) ? '\1' : '' , 'g') let output = substitute(output, '\C%B{\([^}]*\)}', (num_warnings && num_errors) ? '\1' : '' , 'g')
"sub in the total errors/warnings/both "sub in the total errors/warnings/both
let output = substitute(output, '\C%w', len(warnings), 'g') let output = substitute(output, '\C%w', num_warnings, 'g')
let output = substitute(output, '\C%e', len(errors), 'g') let output = substitute(output, '\C%e', num_errors, 'g')
let output = substitute(output, '\C%t', len(s:LocList()), 'g') let output = substitute(output, '\C%t', len(s:LocList()), 'g')
"first error/warning line num "first error/warning line num
let output = substitute(output, '\C%F', s:LocList()[0]['lnum'], 'g') let output = substitute(output, '\C%F', s:LocList()[0]['lnum'], 'g')
"first error line num "first error line num
let output = substitute(output, '\C%fe', len(errors) ? errors[0]['lnum'] : '', 'g') let output = substitute(output, '\C%fe', num_errors ? errors[0]['lnum'] : '', 'g')
"first warning line num "first warning line num
let output = substitute(output, '\C%fw', len(warnings) ? warnings[0]['lnum'] : '', 'g') let output = substitute(output, '\C%fw', num_warnings ? warnings[0]['lnum'] : '', 'g')
return output return output
else else
@@ -539,37 +582,6 @@ function! SyntasticErrorBalloonExpr()
return get(b:syntastic_balloons, v:beval_lnum, '') return get(b:syntastic_balloons, v:beval_lnum, '')
endfunction endfunction
"highlight the list of errors (a:errors) using matchadd()
"
"a:termfunc is provided to highlight errors that do not have a 'col' key (and
"hence cant be done automatically). This function must take one arg (an error
"item) and return a regex to match that item in the buffer.
"
"an optional boolean third argument can be provided to force a:termfunc to be
"used regardless of whether a 'col' key is present for the error
function! SyntasticHighlightErrors(errors, termfunc, ...)
if !g:syntastic_enable_highlighting
return
endif
call s:ClearErrorHighlights()
let force_callback = a:0 && a:1
for item in a:errors
let group = item['type'] == 'E' ? 'SyntasticError' : 'SyntasticWarning'
if item['col'] && !force_callback
let lastcol = col([item['lnum'], '$'])
let lcol = min([lastcol, item['col']])
call matchadd(group, '\%'.item['lnum'].'l\%'.lcol.'c')
else
let term = a:termfunc(item)
if len(term) > 0
call matchadd(group, '\%' . item['lnum'] . 'l' . term)
endif
endif
endfor
endfunction
"take a list of errors and add default values to them from a:options "take a list of errors and add default values to them from a:options
function! SyntasticAddToErrors(errors, options) function! SyntasticAddToErrors(errors, options)
for i in range(0, len(a:errors)-1) for i in range(0, len(a:errors)-1)

View File

@@ -64,56 +64,33 @@ endif
let s:save_cpo = &cpo let s:save_cpo = &cpo
set cpo&vim set cpo&vim
" default include directories if !exists('g:syntastic_c_compiler_options')
let s:default_includes = [ '.', '..', 'include', 'includes', let g:syntastic_c_compiler_options = '-std=gnu99'
\ '../include', '../includes' ] endif
" uniquify the input list
function! s:Unique(list)
let l = []
for elem in a:list
if index(l, elem) == -1
let l = add(l, elem)
endif
endfor
return l
endfunction
" get the gcc include directory argument depending on the default
" includes and the optional user-defined 'g:syntastic_c_include_dirs'
function! s:GetIncludeDirs()
let include_dirs = s:default_includes
if exists('g:syntastic_c_include_dirs')
call extend(include_dirs, g:syntastic_c_include_dirs)
endif
return join(map(s:Unique(include_dirs), '"-I" . v:val'), ' ')
endfunction
function! SyntaxCheckers_c_GetLocList() function! SyntaxCheckers_c_GetLocList()
let makeprg = 'gcc -fsyntax-only -std=gnu99 '.shellescape(expand('%')). let makeprg = 'gcc -fsyntax-only '
\ ' '.s:GetIncludeDirs()
let errorformat = '%-G%f:%s:,%-G%f:%l: %#error: %#(Each undeclared '. let errorformat = '%-G%f:%s:,%-G%f:%l: %#error: %#(Each undeclared '.
\ 'identifier is reported only%.%#,%-G%f:%l: %#error: %#for '. \ 'identifier is reported only%.%#,%-G%f:%l: %#error: %#for '.
\ 'each function it appears%.%#,%-GIn file included%.%#,'. \ 'each function it appears%.%#,%-GIn file included%.%#,'.
\ '%-G %#from %f:%l\,,%f:%l:%c: %m,%f:%l: %trror: %m,%f:%l: %m' \ '%-G %#from %f:%l\,,%f:%l:%c: %m,%f:%l: %trror: %m,%f:%l: %m'
" add optional user-defined compiler options
let makeprg .= g:syntastic_c_compiler_options
let makeprg .= ' '.shellescape(expand('%')).
\ ' '.syntastic#c#GetIncludeDirs('c')
" determine whether to parse header files as well " determine whether to parse header files as well
if expand('%') =~? '.h$' if expand('%') =~? '.h$'
if exists('g:syntastic_c_check_header') if exists('g:syntastic_c_check_header')
let makeprg = 'gcc -c '.shellescape(expand('%')). let makeprg = 'gcc -c '.shellescape(expand('%')).
\ ' '.s:GetIncludeDirs() \ ' '.syntastic#c#GetIncludeDirs('c')
else else
return [] return []
endif endif
endif endif
" add optional user-defined compiler options
if exists('g:syntastic_c_compiler_options')
let makeprg .= g:syntastic_c_compiler_options
endif
" check if the user manually set some cflags " check if the user manually set some cflags
if !exists('b:syntastic_c_cflags') if !exists('b:syntastic_c_cflags')
" check whether to search for include files at all " check whether to search for include files at all

View File

@@ -20,6 +20,12 @@
" "
" let g:syntastic_cpp_no_include_search = 1 " let g:syntastic_cpp_no_include_search = 1
" "
" In order to add some custom include directories that should be added to the
" gcc command line you can add those to the global variable
" g:syntastic_cpp_include_dirs. This list can be used like this:
"
" let g:syntastic_cpp_include_dirs = [ 'includes', 'headers' ]
"
" To enable header files being re-checked on every file write add the " To enable header files being re-checked on every file write add the
" following line to your .vimrc. Otherwise the header files are checked only " following line to your .vimrc. Otherwise the header files are checked only
" one time on initially loading the file. " one time on initially loading the file.
@@ -39,6 +45,12 @@
" checking execution via the variable 'g:syntastic_cpp_compiler_options': " checking execution via the variable 'g:syntastic_cpp_compiler_options':
" "
" let g:syntastic_cpp_compiler_options = ' -std=c++0x' " let g:syntastic_cpp_compiler_options = ' -std=c++0x'
"
" Using the global variable 'g:syntastic_cpp_remove_include_errors' you can
" specify whether errors of files included via the
" g:syntastic_cpp_include_dirs' setting are removed from the result set:
"
" let g:syntastic_cpp_remove_include_errors = 1
if exists('loaded_cpp_syntax_checker') if exists('loaded_cpp_syntax_checker')
finish finish
@@ -53,21 +65,25 @@ let s:save_cpo = &cpo
set cpo&vim set cpo&vim
function! SyntaxCheckers_cpp_GetLocList() function! SyntaxCheckers_cpp_GetLocList()
let makeprg = 'g++ -fsyntax-only '.shellescape(expand('%')) let makeprg = 'g++ -fsyntax-only '
let errorformat = '%-G%f:%s:,%f:%l:%c: %m,%f:%l: %m' let errorformat = '%-G%f:%s:,%f:%l:%c: %m,%f:%l: %m'
if expand('%') =~? '\%(.h\|.hpp\|.hh\)$'
if exists('g:syntastic_cpp_check_header')
let makeprg = 'g++ -c '.shellescape(expand('%'))
else
return []
endif
endif
if exists('g:syntastic_cpp_compiler_options') if exists('g:syntastic_cpp_compiler_options')
let makeprg .= g:syntastic_cpp_compiler_options let makeprg .= g:syntastic_cpp_compiler_options
endif endif
let makeprg .= ' ' . shellescape(expand('%')) .
\ ' ' . syntastic#c#GetIncludeDirs('cpp')
if expand('%') =~? '\%(.h\|.hpp\|.hh\)$'
if exists('g:syntastic_cpp_check_header')
let makeprg = 'g++ -c '.shellescape(expand('%')).
\ ' ' . syntastic#c#GetIncludeDirs('cpp')
else
return []
endif
endif
if !exists('b:syntastic_cpp_cflags') if !exists('b:syntastic_cpp_cflags')
if !exists('g:syntastic_cpp_no_include_search') || if !exists('g:syntastic_cpp_no_include_search') ||
\ g:syntastic_cpp_no_include_search != 1 \ g:syntastic_cpp_no_include_search != 1
@@ -85,7 +101,18 @@ function! SyntaxCheckers_cpp_GetLocList()
let makeprg .= b:syntastic_cpp_cflags let makeprg .= b:syntastic_cpp_cflags
endif endif
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat }) " process makeprg
let errors = SyntasticMake({ 'makeprg': makeprg,
\ 'errorformat': errorformat })
" filter the processed errors if desired
if exists('g:syntastic_cpp_remove_include_errors') &&
\ g:syntastic_cpp_remove_include_errors != 0
return filter(errors,
\ 'has_key(v:val, "bufnr") && v:val["bufnr"]=='.bufnr(''))
else
return errors
endif
endfunction endfunction
let &cpo = s:save_cpo let &cpo = s:save_cpo

View File

@@ -23,9 +23,6 @@ endfunction
function! SyntaxCheckers_javascript_GetLocList() function! SyntaxCheckers_javascript_GetLocList()
let makeprg = "jslint " . g:syntastic_javascript_jslint_conf . " " . shellescape(expand('%')) let makeprg = "jslint " . g:syntastic_javascript_jslint_conf . " " . shellescape(expand('%'))
let errorformat='%E %##%n %m,%-Z%.%#Line %l\, Pos %c,%-G%.%#' let errorformat='%E %##%n %m,%-Z%.%#Line %l\, Pos %c,%-G%.%#'
let errors = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'defaults': {'bufnr': bufnr("")} }) return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'defaults': {'bufnr': bufnr("")} })
call SyntasticHighlightErrors(errors, function('SyntaxCheckers_javascript_HighlightTerm'))
return errors
endfunction endfunction

View File

@@ -20,7 +20,7 @@ if !executable('luac')
finish finish
endif endif
function! SyntaxCheckers_lua_Term(pos) function! SyntaxCheckers_lua_GetHighlightRegex(pos)
let near = matchstr(a:pos['text'], "near '[^']\\+'") let near = matchstr(a:pos['text'], "near '[^']\\+'")
let result = '' let result = ''
if len(near) > 0 if len(near) > 0
@@ -47,12 +47,9 @@ function! SyntaxCheckers_lua_GetLocList()
let makeprg = 'luac -p ' . shellescape(expand('%')) let makeprg = 'luac -p ' . shellescape(expand('%'))
let errorformat = 'luac: %#%f:%l: %m' let errorformat = 'luac: %#%f:%l: %m'
let loclist = SyntasticMake({ 'makeprg': makeprg, return SyntasticMake({ 'makeprg': makeprg,
\ 'errorformat': errorformat, \ 'errorformat': errorformat,
\ 'defaults': { 'bufnr': bufnr(''), 'type': 'E' } }) \ 'defaults': { 'bufnr': bufnr(''), 'type': 'E' } })
call SyntasticHighlightErrors(loclist, function("SyntaxCheckers_lua_Term"))
return loclist
endfunction endfunction

View File

@@ -0,0 +1,32 @@
"============================================================================
"File: nasm.vim
"Description: Syntax checking plugin for syntastic.vim
"Maintainer: Håvard Pettersson <haavard.pettersson at gmail dot com>
"License: This program is free software. It comes without any warranty,
" to the extent permitted by applicable law. You can redistribute
" it and/or modify it under the terms of the Do What The Fuck You
" Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
if exists("loaded_nasm_syntax_checker")
finish
endif
let loaded_nasm_syntax_checker = 1
"bail if the user doesnt have nasm installed
if !executable("nasm")
finish
endif
function! SyntaxCheckers_nasm_GetLocList()
if has("win32")
let outfile="NUL"
else
let outfile="/dev/null"
endif
let wd = shellescape(expand("%:p:h") . "/")
let makeprg = "nasm -X gnu -f elf -I " . wd . " -o " . outfile . " " . shellescape(expand("%"))
let errorformat = '%f:%l: %t%*[^:]: %m'
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
endfunction

View File

@@ -28,9 +28,11 @@ if !exists("g:syntastic_phpcs_disable")
let g:syntastic_phpcs_disable = 0 let g:syntastic_phpcs_disable = 0
endif endif
function! SyntaxCheckers_php_Term(item) function! SyntaxCheckers_php_GetHighlightRegex(item)
let unexpected = matchstr(a:item['text'], "unexpected '[^']\\+'") let unexpected = matchstr(a:item['text'], "unexpected '[^']\\+'")
if len(unexpected) < 1 | return '' | end if len(unexpected) < 1
return ''
endif
return '\V'.split(unexpected, "'")[1] return '\V'.split(unexpected, "'")[1]
endfunction endfunction
@@ -38,7 +40,7 @@ function! SyntaxCheckers_php_GetLocList()
let errors = [] let errors = []
let makeprg = "php -l ".shellescape(expand('%')) let makeprg = "php -l -d error_reporting=E_PARSE -d display_errors=0 -d error_log='' ".shellescape(expand('%'))
let errorformat='%-GNo syntax errors detected in%.%#,PHP Parse error: %#syntax %trror\, %m in %f on line %l,PHP Fatal %trror: %m in %f on line %l,%-GErrors parsing %.%#,%-G\s%#,Parse error: %#syntax %trror\, %m in %f on line %l,Fatal %trror: %m in %f on line %l' let errorformat='%-GNo syntax errors detected in%.%#,PHP Parse error: %#syntax %trror\, %m in %f on line %l,PHP Fatal %trror: %m in %f on line %l,%-GErrors parsing %.%#,%-G\s%#,Parse error: %#syntax %trror\, %m in %f on line %l,Fatal %trror: %m in %f on line %l'
let errors = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat }) let errors = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
@@ -46,8 +48,6 @@ function! SyntaxCheckers_php_GetLocList()
let errors = errors + s:GetPHPCSErrors() let errors = errors + s:GetPHPCSErrors()
endif endif
call SyntasticHighlightErrors(errors, function('SyntaxCheckers_php_Term'))
return errors return errors
endfunction endfunction

View File

@@ -6,75 +6,22 @@
" kstep <me@kstep.me> " kstep <me@kstep.me>
" Parantapa Bhattacharya <parantapa@gmail.com> " Parantapa Bhattacharya <parantapa@gmail.com>
" "
"============================================================================
" "
" For forcing the use of flake8, pyflakes, or pylint set " For forcing the use of flake8, pyflakes, or pylint set
" "
" let g:syntastic_python_checker = 'pyflakes' " let g:syntastic_python_checker = 'pyflakes'
" "
" in your .vimrc. Default is flake8. " in your .vimrc. Default is flake8.
"============================================================================
if exists("loaded_python_syntax_checker") if exists("loaded_python_syntax_checker")
finish finish
endif endif
let loaded_python_syntax_checker = 1 let loaded_python_syntax_checker = 1
"bail if the user doesnt have his favorite checker or flake8 or pyflakes installed
if !exists('g:syntastic_python_checker') || !executable(g:syntastic_python_checker)
if executable("flake8")
let g:syntastic_python_checker = 'flake8'
elseif executable("pyflakes")
let g:syntastic_python_checker = 'pyflakes'
elseif executable("pylint")
let g:syntastic_python_checker = 'pylint'
else
finish
endif
endif
if !exists('g:syntastic_python_checker_args') if !exists('g:syntastic_python_checker_args')
let g:syntastic_python_checker_args = '' let g:syntastic_python_checker_args = ''
endif endif
function! SyntaxCheckers_python_Term(i) let s:supported_checkers = ["flake8", "pyflakes", "pylint"]
if a:i['type'] ==# 'E' call SyntasticLoadChecker(s:supported_checkers)
let a:i['text'] = "Syntax error"
endif
if match(a:i['text'], 'is assigned to but never used') > -1
\ || match(a:i['text'], 'imported but unused') > -1
\ || match(a:i['text'], 'undefined name') > -1
\ || match(a:i['text'], 'redefinition of') > -1
\ || match(a:i['text'], 'referenced before assignment') > -1
\ || match(a:i['text'], 'duplicate argument') > -1
\ || match(a:i['text'], 'after other statements') > -1
\ || match(a:i['text'], 'shadowed by loop variable') > -1
let term = split(a:i['text'], "'", 1)[1]
return '\V\<'.term.'\>'
endif
return ''
endfunction
if g:syntastic_python_checker == 'pylint'
function! SyntaxCheckers_python_GetLocList()
let makeprg = 'pylint -f parseable -r n -i y ' .
\ shellescape(expand('%')) .
\ ' \| sed ''s_: \[[RC]_: \[W_''' .
\ ' \| sed ''s_: \[[F]_:\ \[E_'''
let errorformat = '%f:%l: [%t%n] %m,%-GNo config%m'
let errors = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
return errors
endfunction
else
function! SyntaxCheckers_python_GetLocList()
let makeprg = g:syntastic_python_checker.' '.g:syntastic_python_checker_args.' '.shellescape(expand('%'))
let errorformat =
\ '%E%f:%l: could not compile,%-Z%p^,%W%f:%l:%c: %m,%W%f:%l: %m,%-G%.%#'
let errors = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
call SyntasticHighlightErrors(errors, function('SyntaxCheckers_python_Term'))
return errors
endfunction
endif

View File

@@ -0,0 +1,31 @@
"============================================================================
"File: flake8.vim
"Description: Syntax checking plugin for syntastic.vim
"Authors: Sylvain Soliman <Sylvain dot Soliman+git at gmail dot com>
" kstep <me@kstep.me>
"
"============================================================================
function! SyntaxCheckers_python_GetHighlightRegex(i)
if a:i['type'] ==# 'E'
let a:i['text'] = "Syntax error"
endif
if match(a:i['text'], 'is assigned to but never used') > -1
\ || match(a:i['text'], 'imported but unused') > -1
\ || match(a:i['text'], 'undefined name') > -1
\ || match(a:i['text'], 'redefinition of') > -1
\ || match(a:i['text'], 'referenced before assignment') > -1
\ || match(a:i['text'], 'duplicate argument') > -1
\ || match(a:i['text'], 'after other statements') > -1
\ || match(a:i['text'], 'shadowed by loop variable') > -1
let term = split(a:i['text'], "'", 1)[1]
return '\V\<'.term.'\>'
endif
return ''
endfunction
function! SyntaxCheckers_python_GetLocList()
let makeprg = 'flake8 '.g:syntastic_python_checker_args.' '.shellescape(expand('%'))
let errorformat = '%E%f:%l: could not compile,%-Z%p^,%W%f:%l:%c: %m,%W%f:%l: %m,%-G%.%#'
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
endfunction

View File

@@ -0,0 +1,34 @@
"============================================================================
"File: pyflakes.vim
"Description: Syntax checking plugin for syntastic.vim
"Authors: Martin Grenfell <martin.grenfell@gmail.com>
" kstep <me@kstep.me>
" Parantapa Bhattacharya <parantapa@gmail.com>
"
"============================================================================
function! SyntaxCheckers_python_GetHighlightRegex(i)
if match(a:i['text'], 'is assigned to but never used') > -1
\ || match(a:i['text'], 'imported but unused') > -1
\ || match(a:i['text'], 'undefined name') > -1
\ || match(a:i['text'], 'redefinition of') > -1
\ || match(a:i['text'], 'referenced before assignment') > -1
\ || match(a:i['text'], 'duplicate argument') > -1
\ || match(a:i['text'], 'after other statements') > -1
\ || match(a:i['text'], 'shadowed by loop variable') > -1
let term = split(a:i['text'], "'", 1)[1]
return '\V\<'.term.'\>'
endif
return ''
endfunction
function! SyntaxCheckers_python_GetLocList()
let makeprg = 'pyflakes '.g:syntastic_python_checker_args.' '.shellescape(expand('%'))
let errorformat = '%E%f:%l: could not compile,%-Z%p^,%E%f:%l:%c: %m,%E%f:%l: %m,%-G%.%#'
let errors = SyntasticMake({ 'makeprg': makeprg,
\ 'errorformat': errorformat,
\ 'defaults': {'text': "Syntax error"} })
return errors
endfunction

View File

@@ -0,0 +1,14 @@
"============================================================================
"File: pylint.vim
"Description: Syntax checking plugin for syntastic.vim
"Author: Parantapa Bhattacharya <parantapa at gmail dot com>
"
"============================================================================
function! SyntaxCheckers_python_GetLocList()
let makeprg = 'pylint -f parseable -r n -i y ' .
\ shellescape(expand('%')) .
\ ' \| sed ''s_: \[[RC]_: \[W_''' .
\ ' \| sed ''s_: \[[F]_:\ \[E_'''
let errorformat = '%f:%l: [%t%n%.%#] %m,%-GNo config%m'
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
endfunction

View File

@@ -24,7 +24,7 @@ if !executable("rst2pseudoxml.py")
endif endif
function! SyntaxCheckers_rst_GetLocList() function! SyntaxCheckers_rst_GetLocList()
let makeprg = 'rst2pseudoxml.py --report=1 --exit-status=1 ' . let makeprg = 'rst2pseudoxml.py --report=2 --exit-status=1 ' .
\ shellescape(expand('%')) . ' /dev/null' \ shellescape(expand('%')) . ' /dev/null'
let errorformat = '%f:%l:\ (%tNFO/1)\ %m, let errorformat = '%f:%l:\ (%tNFO/1)\ %m,

View File

@@ -8,6 +8,10 @@
" Want To Public License, Version 2, as published by Sam Hocevar. " Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details. " See http://sam.zoy.org/wtfpl/COPYING for more details.
" "
"Supports MRI and JRuby but loads the MRI syntax checker by default.
"
"Use the g:syntastic_ruby_checker option to specify which checker to load -
"set it to "jruby" to load the jruby checker.
"============================================================================ "============================================================================
if exists("loaded_ruby_syntax_checker") if exists("loaded_ruby_syntax_checker")
finish finish
@@ -19,14 +23,8 @@ if !executable("ruby")
finish finish
endif endif
function! SyntaxCheckers_ruby_GetLocList() if !exists("g:syntastic_ruby_checker")
" we cannot set RUBYOPT on windows like that let g:syntastic_ruby_checker = "mri"
if has('win32') || has('win64') endif
let makeprg = 'ruby -W1 -T1 -c '.shellescape(expand('%')) exec "runtime! syntax_checkers/ruby/" . g:syntastic_ruby_checker . ".vim"
else
let makeprg = 'RUBYOPT= ruby -W1 -c '.shellescape(expand('%'))
endif
let errorformat = '%-GSyntax OK,%E%f:%l: syntax error\, %m,%Z%p^,%W%f:%l: warning: %m,%Z%p^,%W%f:%l: %m,%-C%.%#'
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
endfunction

View File

@@ -0,0 +1,16 @@
"============================================================================
"File: jruby.vim
"Description: Syntax checking plugin for syntastic.vim
"Maintainer: Leonid Shevtsov <leonid at shevtsov dot me>
"License: This program is free software. It comes without any warranty,
" to the extent permitted by applicable law. You can redistribute
" it and/or modify it under the terms of the Do What The Fuck You
" Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
function! SyntaxCheckers_ruby_GetLocList()
"let makeprg = ''
"let errorformat = ''
"return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
endfunction

View File

@@ -0,0 +1,22 @@
"============================================================================
"File: mri.vim
"Description: Syntax checking plugin for syntastic.vim
"Maintainer: Martin Grenfell <martin.grenfell at gmail dot com>
"License: This program is free software. It comes without any warranty,
" to the extent permitted by applicable law. You can redistribute
" it and/or modify it under the terms of the Do What The Fuck You
" Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
function! SyntaxCheckers_ruby_GetLocList()
" we cannot set RUBYOPT on windows like that
if has('win32') || has('win64')
let makeprg = 'ruby -W1 -T1 -c '.shellescape(expand('%'))
else
let makeprg = 'RUBYOPT= ruby -W1 -c '.shellescape(expand('%'))
endif
let errorformat = '%-GSyntax OK,%E%f:%l: syntax error\, %m,%Z%p^,%W%f:%l: warning: %m,%Z%p^,%W%f:%l: %m,%-C%.%#'
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
endfunction

View File

@@ -0,0 +1,33 @@
"============================================================================
"File: scala.vim
"Description: Syntax checking plugin for syntastic.vim
"Maintainer: Rickey Visinski <rickeyvisinski at gmail dot com>
"License: This program is free software. It comes without any warranty,
" to the extent permitted by applicable law. You can redistribute
" it and/or modify it under the terms of the Do What The Fuck You
" Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
if exists("loaded_scala_syntax_checker")
finish
endif
let loaded_scala_syntax_checker = 1
"bail if the user doesnt have the scala binary installed
if !executable("scala")
finish
endif
if !exists("g:syntastic_scala_options")
let g:syntastic_scala_options = " "
endif
function! SyntaxCheckers_scala_GetLocList()
let makeprg = 'scala '. g:syntastic_scala_options .' '. shellescape(expand('%')) . ' /dev/null'
let errorformat = '%f\:%l: %trror: %m'
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
endfunction

View File

@@ -32,7 +32,7 @@ if exists('g:syntastic_vala_check_disabled') && g:syntastic_vala_check_disabled
finish finish
endif endif
function! SyntaxCheckers_vala_Term(pos) function! SyntaxCheckers_vala_GetHighlightRegex(pos)
let strlength = strlen(matchstr(a:pos['text'], '\^\+$')) let strlength = strlen(matchstr(a:pos['text'], '\^\+$'))
return '\%>'.(a:pos.col-1).'c.*\%<'.(a:pos.col+strlength+1).'c' return '\%>'.(a:pos.col-1).'c.*\%<'.(a:pos.col+strlength+1).'c'
endfunction endfunction
@@ -49,8 +49,8 @@ function! SyntaxCheckers_vala_GetLocList()
let makeprg = 'valac -C ' . vala_pkg_args . ' ' .shellescape(expand('%')) let makeprg = 'valac -C ' . vala_pkg_args . ' ' .shellescape(expand('%'))
let errorformat = '%A%f:%l.%c-%\d%\+.%\d%\+: %t%[a-z]%\+: %m,%C%m,%Z%m' let errorformat = '%A%f:%l.%c-%\d%\+.%\d%\+: %t%[a-z]%\+: %m,%C%m,%Z%m'
let loclist = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat }) return SyntasticMake({ 'makeprg': makeprg,
call SyntasticHighlightErrors(loclist, function("SyntaxCheckers_vala_Term"), 1) \ 'errorformat': errorformat,
return loclist \ 'defaults': {'force_highlight_callback': 1} })
endfunction endfunction

View File

@@ -0,0 +1,31 @@
"============================================================================
"File: z80.vim
"Description: Syntax checking plugin for syntastic.vim
"Maintainer: Romain Giot <giot.romain at gmail dot com>
"License: This program is free software. It comes without any warranty,
" to the extent permitted by applicable law. You can redistribute
" it and/or modify it under the terms of the Do What The Fuck You
" Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
if exists("loaded_z80_syntax_checker")
finish
endif
let loaded_z80_syntax_checker = 1
"bail if the user doesnt have z80_syntax_checker.py installed
"To obtain this application there are two solutions:
" - Install this python package: https://github.com/rgiot/pycpcdemotools
" - Copy/paste this script in your search path: https://raw.github.com/rgiot/pycpcdemotools/master/cpcdemotools/source_checker/z80_syntax_checker.py
if !executable("z80_syntax_checker.py")
finish
endif
function! SyntaxCheckers_z80_GetLocList()
let makeprg = 'z80_syntax_checker.py '.shellescape(expand('%'))
let errorformat = '%f:%l %m'
let loclist = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
return loclist
endfunction

View File

@@ -1,7 +1,7 @@
" Author: Eric Van Dewoestine " Author: Eric Van Dewoestine
" "
" License: {{{ " License: {{{
" Copyright (c) 2005 - 2011, Eric Van Dewoestine " Copyright (c) 2005 - 2012, Eric Van Dewoestine
" All rights reserved. " All rights reserved.
" "
" Redistribution and use of this software in source and binary forms, with " Redistribution and use of this software in source and binary forms, with
@@ -980,15 +980,9 @@ function! s:Window(settings, tags) " {{{
let winnum = s:GetTagListWinnr() let winnum = s:GetTagListWinnr()
if winnum == -1 if winnum == -1
if exists('g:VerticalToolWindowSide') && let position = g:TaglistTooPosition == 'right' ? 'botright' : 'topleft'
\ g:VerticalToolWindowSide == g:TaglistTooPosition exec position . ' vertical ' . g:Tlist_WinWidth .
call eclim#display#window#VerticalToolWindowOpen(s:taglisttoo_title, 10, 1) \ ' split ' . escape(s:taglisttoo_title, ' ')
else
let position = g:TaglistTooPosition == 'right' ? 'botright' : 'topleft'
silent exec
\ position . ' vertical ' . g:Tlist_WinWidth .
\ ' split ' . escape(s:taglisttoo_title, ' ')
endif
let winnum = s:GetTagListWinnr() let winnum = s:GetTagListWinnr()
exe winnum . 'wincmd w' exe winnum . 'wincmd w'
@@ -1182,14 +1176,11 @@ function! s:FileSupported(filename, ftype) " {{{
endfunction " }}} endfunction " }}}
function! s:CloseIfLastWindow() " {{{ function! s:CloseIfLastWindow() " {{{
if histget(':', -1) !~ '^bd' if winnr('$') == 1
let numtoolwindows = 0 if tabpagenr('$') > 1
if winnr('$') == 1 tabclose
if tabpagenr('$') > 1 else
tabclose quitall
else
quitall
endif
endif endif
endif endif
endfunction " }}} endfunction " }}}

View File

@@ -23,7 +23,8 @@
" set l:isWrapped instead. " set l:isWrapped instead.
" - FIX: Wrong logic for determining l:isWrapped lets wrap-around go undetected " - FIX: Wrong logic for determining l:isWrapped lets wrap-around go undetected
" when v:count >= number of total matches. [l:startLine, l:startCol] must " when v:count >= number of total matches. [l:startLine, l:startCol] must
" be updated on every iteration. " be updated on every iteration, and should therefore be named [l:prevLine,
" l:prevCol].
" "
" 17-May-2011, Ingo Karkat " 17-May-2011, Ingo Karkat
" - Make s:GetVisualSelection() public to allow use in suggested " - Make s:GetVisualSelection() public to allow use in suggested
@@ -531,7 +532,7 @@ function! s:Search( pattern, isBackward, currentMarkPosition, searchType )
let l:isMatch = 0 let l:isMatch = 0
let l:line = 0 let l:line = 0
while l:count > 0 while l:count > 0
let [l:startLine, l:startCol] = [line('.'), col('.')] let [l:prevLine, l:prevCol] = [line('.'), col('.')]
" Search for next match, 'wrapscan' applies. " Search for next match, 'wrapscan' applies.
let [l:line, l:col] = searchpos( a:pattern, (a:isBackward ? 'b' : '') ) let [l:line, l:col] = searchpos( a:pattern, (a:isBackward ? 'b' : '') )
@@ -571,9 +572,9 @@ function! s:Search( pattern, isBackward, currentMarkPosition, searchType )
" Note: No need to check 'wrapscan'; the wrapping can only occur if " Note: No need to check 'wrapscan'; the wrapping can only occur if
" 'wrapscan' is actually on. " 'wrapscan' is actually on.
if ! a:isBackward && (l:startLine > l:line || l:startLine == l:line && l:startCol >= l:col) if ! a:isBackward && (l:prevLine > l:line || l:prevLine == l:line && l:prevCol >= l:col)
let l:isWrapped = 1 let l:isWrapped = 1
elseif a:isBackward && (l:startLine < l:line || l:startLine == l:line && l:startCol <= l:col) elseif a:isBackward && (l:prevLine < l:line || l:prevLine == l:line && l:prevCol <= l:col)
let l:isWrapped = 1 let l:isWrapped = 1
endif endif
else else

View File

@@ -176,6 +176,9 @@ your vimrc file (or anywhere before this plugin is sourced), in the following
form (where N = 1..): > form (where N = 1..): >
highlight MarkWordN ctermbg=Cyan ctermfg=Black guibg=#8CCBEA guifg=Black highlight MarkWordN ctermbg=Cyan ctermfg=Black guibg=#8CCBEA guifg=Black
Higher numbers always take precedence and are displayed above lower ones. Higher numbers always take precedence and are displayed above lower ones.
If you want to avoid losing the highlightings on |:colorscheme| commands, you
need to re-apply your highlights on the |ColorScheme| event, similar to how
this plugin does.
The search type highlighting (in the search message) can be changed via: > The search type highlighting (in the search message) can be changed via: >
highlight link SearchSpecialSearchType MoreMsg highlight link SearchSpecialSearchType MoreMsg
@@ -249,6 +252,10 @@ http://vim.wikia.com/wiki/Highlight_multiple_words:
============================================================================== ==============================================================================
HISTORY *mark-history* HISTORY *mark-history*
2.5.3 02-Mar-2012
- BUG: Version check mistakenly excluded Vim 7.1 versions that do have the
matchadd() function. Thanks to Philipp Marek for sending a patch.
2.5.2 09-Nov-2011 2.5.2 09-Nov-2011
Fixed various problems with wrap-around warnings: Fixed various problems with wrap-around warnings:
- BUG: With a single match and 'wrapscan' set, a search error was issued. - BUG: With a single match and 'wrapscan' set, a search error was issued.
@@ -397,8 +404,8 @@ Last version published by Yuheng Xie on vim.org.
Initial version published by Yuheng Xie on vim.org. Initial version published by Yuheng Xie on vim.org.
============================================================================== ==============================================================================
Copyright: (C) 2005-2008 by Yuheng Xie Copyright: (C) 2005-2008 Yuheng Xie
(C) 2008-2011 by Ingo Karkat (C) 2008-2012 Ingo Karkat
The VIM LICENSE applies to this script; see|copyright|. The VIM LICENSE applies to this script; see|copyright|.
Maintainer: Ingo Karkat <ingo@karkat.de> Maintainer: Ingo Karkat <ingo@karkat.de>

View File

@@ -1,8 +1,8 @@
" Script Name: mark.vim " Script Name: mark.vim
" Description: Highlight several words in different colors simultaneously. " Description: Highlight several words in different colors simultaneously.
" "
" Copyright: (C) 2005-2008 by Yuheng Xie " Copyright: (C) 2005-2008 Yuheng Xie
" (C) 2008-2011 by Ingo Karkat " (C) 2008-2012 Ingo Karkat
" The VIM LICENSE applies to this script; see ':help copyright'. " The VIM LICENSE applies to this script; see ':help copyright'.
" "
" Maintainer: Ingo Karkat <ingo@karkat.de> " Maintainer: Ingo Karkat <ingo@karkat.de>
@@ -13,8 +13,12 @@
" - Requires Vim 7.1 with "matchadd()", or Vim 7.2 or higher. " - Requires Vim 7.1 with "matchadd()", or Vim 7.2 or higher.
" - mark.vim autoload script. " - mark.vim autoload script.
" "
" Version: 2.5.0 " Version: 2.5.3
" Changes: " Changes:
" 02-Mar-2012, Philipp Marek
" - BUG: Version check mistakenly excluded Vim 7.1 versions that do have the
" matchadd() function.
"
" 06-May-2011, Ingo Karkat " 06-May-2011, Ingo Karkat
" - By default, enable g:mwAutoSaveMarks, so that marks are always persisted, " - By default, enable g:mwAutoSaveMarks, so that marks are always persisted,
" but disable g:mwAutoLoadMarks, so that persisted marks have to be explicitly " but disable g:mwAutoLoadMarks, so that persisted marks have to be explicitly
@@ -152,7 +156,7 @@
" -> e.g. :Mark Mark.\{-}\ze( " -> e.g. :Mark Mark.\{-}\ze(
" Avoid installing twice or when in unsupported Vim version. " Avoid installing twice or when in unsupported Vim version.
if exists('g:loaded_mark') || (v:version == 701 && ! exists('*matchadd')) || (v:version < 702) if exists('g:loaded_mark') || (v:version == 701 && ! exists('*matchadd')) || (v:version < 701)
finish finish
endif endif
let g:loaded_mark = 1 let g:loaded_mark = 1