mirror of
1
0
Fork 0

Updated plugins

This commit is contained in:
amix 2016-08-02 14:48:32 +02:00
parent 64a81818ee
commit 61a22e9f3e
39 changed files with 1372 additions and 782 deletions

View File

@ -97,6 +97,7 @@ let [s:pref, s:bpref, s:opts, s:new_opts, s:lc_opts] =
\ 'compare_lim': ['s:compare_lim', 3000], \ 'compare_lim': ['s:compare_lim', 3000],
\ 'bufname_mod': ['s:bufname_mod', ':t'], \ 'bufname_mod': ['s:bufname_mod', ':t'],
\ 'bufpath_mod': ['s:bufpath_mod', ':~:.:h'], \ 'bufpath_mod': ['s:bufpath_mod', ':~:.:h'],
\ 'formatline_func': ['s:flfunc', 's:formatline(v:val)'],
\ }, { \ }, {
\ 'open_multiple_files': 's:opmul', \ 'open_multiple_files': 's:opmul',
\ 'regexp': 's:regexp', \ 'regexp': 's:regexp',
@ -203,11 +204,11 @@ let s:hlgrps = {
\ } \ }
" lname, sname of the basic(non-extension) modes " lname, sname of the basic(non-extension) modes
let s:coretypes = [ let s:coretypes = filter([
\ ['files', 'fil'], \ ['files', 'fil'],
\ ['buffers', 'buf'], \ ['buffers', 'buf'],
\ ['mru files', 'mru'], \ ['mru files', 'mru'],
\ ] \ ], 'index(g:ctrlp_types, v:val[1])!=-1')
" Get the options {{{2 " Get the options {{{2
fu! s:opts(...) fu! s:opts(...)
@ -439,9 +440,9 @@ fu! s:UserCmd(lscmd)
en en
if has('patch-7.4-597') && !(has('win32') || has('win64')) if has('patch-7.4-597') && !(has('win32') || has('win64'))
let g:ctrlp_allfiles = systemlist(printf(lscmd, path)) let g:ctrlp_allfiles = systemlist(printf(lscmd, path))
else el
let g:ctrlp_allfiles = split(system(printf(lscmd, path)), "\n") let g:ctrlp_allfiles = split(system(printf(lscmd, path)), "\n")
end en
if exists('+ssl') && exists('ssl') if exists('+ssl') && exists('ssl')
let &ssl = ssl let &ssl = ssl
cal map(g:ctrlp_allfiles, 'tr(v:val, "\\", "/")') cal map(g:ctrlp_allfiles, 'tr(v:val, "\\", "/")')
@ -624,7 +625,7 @@ fu! s:Render(lines, pat)
en en
if s:mw_order == 'btt' | cal reverse(lines) | en if s:mw_order == 'btt' | cal reverse(lines) | en
let s:lines = copy(lines) let s:lines = copy(lines)
cal map(lines, 's:formatline(v:val)') cal map(lines, s:flfunc)
cal setline(1, s:offset(lines, height)) cal setline(1, s:offset(lines, height))
cal s:unmarksigns() cal s:unmarksigns()
cal s:remarksigns() cal s:remarksigns()
@ -719,7 +720,7 @@ fu! s:PrtBS()
if empty(s:prompt[0]) && s:brfprt != 0 if empty(s:prompt[0]) && s:brfprt != 0
cal s:PrtExit() cal s:PrtExit()
retu retu
endif en
unl! s:hstgot unl! s:hstgot
let [s:prompt[0], s:matches] = [substitute(s:prompt[0], '.$', '', ''), 1] let [s:prompt[0], s:matches] = [substitute(s:prompt[0], '.$', '', ''), 1]
cal s:BuildPrompt(1) cal s:BuildPrompt(1)
@ -877,12 +878,13 @@ fu! s:PrtFocusMap(char)
endf endf
fu! s:PrtClearCache() fu! s:PrtClearCache()
if s:itemtype == 0 let ct = s:curtype()
if ct == 'fil'
cal ctrlp#clr() cal ctrlp#clr()
elsei s:itemtype > 2 elsei s:itemtype >= len(s:coretypes)
cal ctrlp#clr(s:statypes[s:itemtype][1]) cal ctrlp#clr(s:statypes[s:itemtype][1])
en en
if s:itemtype == 2 if ct == 'mru'
let g:ctrlp_lines = ctrlp#mrufiles#refresh() let g:ctrlp_lines = ctrlp#mrufiles#refresh()
el el
cal ctrlp#setlines() cal ctrlp#setlines()
@ -893,9 +895,10 @@ fu! s:PrtClearCache()
endf endf
fu! s:PrtDeleteEnt() fu! s:PrtDeleteEnt()
if s:itemtype == 2 let ct = s:curtype()
if ct == 'mru'
cal s:PrtDeleteMRU() cal s:PrtDeleteMRU()
elsei s:itemtype == 1 elsei ct == 'buf'
cal s:delbuf() cal s:delbuf()
elsei type(s:getextvar('wipe')) == 1 elsei type(s:getextvar('wipe')) == 1
cal s:delent(s:getextvar('wipe')) cal s:delent(s:getextvar('wipe'))
@ -903,7 +906,7 @@ fu! s:PrtDeleteEnt()
endf endf
fu! s:PrtDeleteMRU() fu! s:PrtDeleteMRU()
if s:itemtype == 2 if s:curtype() == 'mru'
cal s:delent('ctrlp#mrufiles#remove') cal s:delent('ctrlp#mrufiles#remove')
en en
endf endf
@ -1011,7 +1014,7 @@ fu! s:ToggleByFname()
endf endf
fu! s:ToggleType(dir) fu! s:ToggleType(dir)
let max = len(g:ctrlp_ext_vars) + 2 let max = len(g:ctrlp_ext_vars) + len(s:coretypes) - 1
let next = s:walker(max, s:itemtype, a:dir) let next = s:walker(max, s:itemtype, a:dir)
cal ctrlp#setlines(next) cal ctrlp#setlines(next)
cal ctrlp#syntax() cal ctrlp#syntax()
@ -1151,7 +1154,7 @@ fu! s:AcceptSelection(action)
if subm | if s:SpecInputs(str) | retu | en | en if subm | if s:SpecInputs(str) | retu | en | en
" Get the selected line " Get the selected line
let line = ctrlp#getcline() let line = ctrlp#getcline()
if !subm && !s:itemtype && line == '' && line('.') > s:offset if !subm && s:curtype() != 'fil' && line == '' && line('.') > s:offset
\ && str !~ '\v^(\.\.([\/]\.\.)*[\/]?[.\/]*|/|\\|\?|\@.+)$' \ && str !~ '\v^(\.\.([\/]\.\.)*[\/]?[.\/]*|/|\\|\?|\@.+)$'
cal s:CreateNewFile(md) | retu cal s:CreateNewFile(md) | retu
en en
@ -1161,7 +1164,7 @@ fu! s:AcceptSelection(action)
let actfunc = s:openfunc[s:ctype] let actfunc = s:openfunc[s:ctype]
let type = has_key(s:openfunc, 'arg_type') ? s:openfunc['arg_type'] : 'list' let type = has_key(s:openfunc, 'arg_type') ? s:openfunc['arg_type'] : 'list'
el el
if s:itemtype < 3 if s:itemtype < len(s:coretypes)
let [actfunc, type] = ['ctrlp#acceptfile', 'dict'] let [actfunc, type] = ['ctrlp#acceptfile', 'dict']
el el
let [actfunc, exttype] = [s:getextvar('accept'), s:getextvar('act_farg')] let [actfunc, exttype] = [s:getextvar('accept'), s:getextvar('act_farg')]
@ -1206,15 +1209,16 @@ fu! s:CreateNewFile(...)
endf endf
" * OpenMulti() {{{1 " * OpenMulti() {{{1
fu! s:MarkToOpen() fu! s:MarkToOpen()
let ct = s:curtype()
if s:bufnr <= 0 || s:opmul == '0' if s:bufnr <= 0 || s:opmul == '0'
\ || ( s:itemtype > 2 && s:getextvar('opmul') != 1 ) \ || ( s:itemtype >= len(s:coretypes) && s:getextvar('opmul') != 1 )
retu retu
en en
let line = ctrlp#getcline() let line = ctrlp#getcline()
" Do not allow to mark modified or current buffer " Do not allow to mark modified or current buffer
let bufnr = s:bufnrfilpath(line)[0] let bufnr = s:bufnrfilpath(line)[0]
if (s:itemtype == 1 && s:delbufcond(bufnr)) if (ct == 'buf' && s:delbufcond(bufnr))
retu retu
en en
@ -1247,7 +1251,7 @@ endf
fu! s:OpenMulti(...) fu! s:OpenMulti(...)
let has_marked = exists('s:marked') let has_marked = exists('s:marked')
if ( !has_marked && a:0 ) || s:opmul == '0' || !s:ispath if ( !has_marked && a:0 ) || s:opmul == '0' || !s:ispath
\ || ( s:itemtype > 2 && s:getextvar('opmul') != 1 ) \ || ( s:itemtype >= len(s:coretypes) && s:getextvar('opmul') != 1 )
retu -1 retu -1
en en
" Get the options " Get the options
@ -1442,7 +1446,8 @@ fu! s:shortest(lens)
endf endf
fu! s:mixedsort(...) fu! s:mixedsort(...)
if s:itemtype == 1 let ct = s:curtype()
if ct == 'buf'
let pat = '[\/]\?\[\d\+\*No Name\]$' let pat = '[\/]\?\[\d\+\*No Name\]$'
if a:1 =~# pat && a:2 =~# pat | retu 0 if a:1 =~# pat && a:2 =~# pat | retu 0
elsei a:1 =~# pat | retu 1 elsei a:1 =~# pat | retu 1
@ -1453,10 +1458,10 @@ fu! s:mixedsort(...)
let ms = [] let ms = []
if s:res_count < 21 if s:res_count < 21
let ms += [s:compfnlen(a:1, a:2)] let ms += [s:compfnlen(a:1, a:2)]
if s:itemtype !~ '^[12]$' | let ms += [s:comptime(a:1, a:2)] | en if ct !~ '^\(buf\|mru\)$' | let ms += [s:comptime(a:1, a:2)] | en
if !s:itemtype | let ms += [s:comparent(a:1, a:2)] | en if !s:itemtype | let ms += [s:comparent(a:1, a:2)] | en
en en
if s:itemtype =~ '^[12]$' if ct =~ '^\(buf\|mru\)$'
let ms += [s:compmref(a:1, a:2)] let ms += [s:compmref(a:1, a:2)]
let cln = cml ? cln : 0 let cln = cml ? cln : 0
en en
@ -1540,7 +1545,8 @@ endf
" Line formatting {{{3 " Line formatting {{{3
fu! s:formatline(str) fu! s:formatline(str)
let str = a:str let str = a:str
if s:itemtype == 1 let ct = s:curtype()
if ct == 'buf'
let bufnr = s:bufnrfilpath(str)[0] let bufnr = s:bufnrfilpath(str)[0]
let parts = s:bufparts(bufnr) let parts = s:bufparts(bufnr)
let str = printf('%'.s:bufnr_width.'s', bufnr) let str = printf('%'.s:bufnr_width.'s', bufnr)
@ -1560,7 +1566,7 @@ fu! s:formatline(str)
en en
en en
en en
let cond = s:itemtype != 1 &&s:ispath && ( s:winw - 4 ) < s:strwidth(str) let cond = ct != 'buf' &&s:ispath && ( s:winw - 4 ) < s:strwidth(str)
retu s:lineprefix.( cond ? s:pathshorten(str) : str ) retu s:lineprefix.( cond ? s:pathshorten(str) : str )
endf endf
@ -1615,7 +1621,7 @@ fu! s:lash(...)
endf endf
fu! s:ispathitem() fu! s:ispathitem()
retu s:itemtype < 3 || ( s:itemtype > 2 && s:getextvar('type') == 'path' ) retu s:itemtype < len(s:coretypes) || s:getextvar('type') == 'path'
endf endf
fu! ctrlp#igncwd(cwd) fu! ctrlp#igncwd(cwd)
@ -1649,11 +1655,11 @@ fu! ctrlp#dirnfile(entries)
endf endf
fu! s:usrign(item, type) fu! s:usrign(item, type)
if s:igntype == 1 | retu a:item =~ s:usrign | end if s:igntype == 1 | retu a:item =~ s:usrign | en
if s:igntype == 2 if s:igntype == 2
if call(s:usrign, [a:item, a:type]) if call(s:usrign, [a:item, a:type])
retu 1 retu 1
end en
elsei s:igntype == 4 elsei s:igntype == 4
if has_key(s:usrign, a:type) && s:usrign[a:type] != '' if has_key(s:usrign, a:type) && s:usrign[a:type] != ''
\ && a:item =~ s:usrign[a:type] \ && a:item =~ s:usrign[a:type]
@ -1661,8 +1667,8 @@ fu! s:usrign(item, type)
elsei has_key(s:usrign, 'func') && s:usrign['func'] != '' elsei has_key(s:usrign, 'func') && s:usrign['func'] != ''
\ && call(s:usrign['func'], [a:item, a:type]) \ && call(s:usrign['func'], [a:item, a:type])
retu 1 retu 1
end en
end en
retu 0 retu 0
endf endf
@ -1772,7 +1778,7 @@ fu! ctrlp#syntax()
exe "sy match CtrlPLinePre '^".escape(get(g:, 'ctrlp_line_prefix', '>'),'^$.*~\')."'" exe "sy match CtrlPLinePre '^".escape(get(g:, 'ctrlp_line_prefix', '>'),'^$.*~\')."'"
en en
if s:itemtype == 1 && s:has_conceal if s:curtype() == 'buf' && s:has_conceal
sy region CtrlPBufferNr matchgroup=CtrlPLinePre start='^>\s\+' end='\s' sy region CtrlPBufferNr matchgroup=CtrlPLinePre start='^>\s\+' end='\s'
sy region CtrlPBufferInd concealends matchgroup=Ignore start='<bi>' end='</bi>' sy region CtrlPBufferInd concealends matchgroup=Ignore start='<bi>' end='</bi>'
sy region CtrlPBufferRegion concealends matchgroup=Ignore start='<bn>' end='</bn>' sy region CtrlPBufferRegion concealends matchgroup=Ignore start='<bn>' end='</bn>'
@ -1810,7 +1816,7 @@ fu! s:highlight(pat, grp)
if s:byfname() if s:byfname()
" Make sure there are no slashes in our match " Make sure there are no slashes in our match
let beginning = beginning.'\([^\/]*$\)\@=' let beginning = beginning.'\([^\/]*$\)\@='
end en
for i in range(len(chars)) for i in range(len(chars))
" Surround our current target letter with \zs and \ze so it only " Surround our current target letter with \zs and \ze so it only
@ -1822,14 +1828,14 @@ fu! s:highlight(pat, grp)
if i == 0 if i == 0
let charcopy[i] = '\zs'.charcopy[i].'\ze' let charcopy[i] = '\zs'.charcopy[i].'\ze'
let middle = join(charcopy, '.\{-}') let middle = join(charcopy, '.\{-}')
else el
let before = join(charcopy[0:i-1], '.\{-}') let before = join(charcopy[0:i-1], '.\{-}')
let after = join(charcopy[i+1:-1], '.\{-}') let after = join(charcopy[i+1:-1], '.\{-}')
let c = charcopy[i] let c = charcopy[i]
" for abc, match either ab.\{-}c or a.*b.\{-}c in that order " for abc, match either ab.\{-}c or a.*b.\{-}c in that order
let cpat = '\(\zs'.c.'\|'.'.*\zs'.c.'\)\ze.*' let cpat = '\(\zs'.c.'\|'.'.*\zs'.c.'\)\ze.*'
let middle = before.cpat.after let middle = before.cpat.after
endif en
" Now we matchadd for each letter, the basic form being: " Now we matchadd for each letter, the basic form being:
" ^.*\zsx\ze.*$, but with our pattern we built above for the letter, " ^.*\zsx\ze.*$, but with our pattern we built above for the letter,
@ -1956,7 +1962,7 @@ fu! s:isabs(path)
endf endf
fu! s:bufnrfilpath(line) fu! s:bufnrfilpath(line)
if s:isabs(a:line) || a:line =~ '^\~[/\\]' || a:line =~ '^\w\+:\/\/' if s:isabs(a:line) || a:line =~ '^\~[/\\]'
let filpath = a:line let filpath = a:line
el el
let filpath = s:dyncwd.s:lash().a:line let filpath = s:dyncwd.s:lash().a:line
@ -2140,12 +2146,13 @@ fu! s:modevar()
endf endf
fu! s:nosort() fu! s:nosort()
retu s:matcher != {} || s:nolim == 1 || ( s:itemtype == 2 && s:mrudef ) let ct = s:curtype()
\ || ( s:itemtype =~ '\v^(1|2)$' && s:prompt == ['', '', ''] ) || !s:dosort retu s:matcher != {} || s:nolim == 1 || ( ct == 'mru' && s:mrudef )
\ || ( ct =~ '^\(buf\|mru\)$' && s:prompt == ['', '', ''] ) || !s:dosort
endf endf
fu! s:byfname() fu! s:byfname()
retu s:itemtype != 1 && s:ispath && s:byfname retu s:curtype() != 'buf' && s:ispath && s:byfname
endf endf
fu! s:narrowable() fu! s:narrowable()
@ -2374,13 +2381,17 @@ fu! s:buildpat(lst)
retu pat retu pat
endf endf
fu! s:curtype()
return s:CurTypeName()[1]
endf
fu! s:mfunc() fu! s:mfunc()
let mfunc = 'match' let mfunc = 'match'
if s:byfname() if s:byfname()
let mfunc = 's:matchfname' let mfunc = 's:matchfname'
elsei s:itemtype == 1 elsei s:curtype() == 'buf'
let mfunc = 's:matchbuf' let mfunc = 's:matchbuf'
elsei s:itemtype > 2 elsei s:itemtype >= len(s:coretypes)
let matchtypes = { 'tabs': 's:matchtabs', 'tabe': 's:matchtabe' } let matchtypes = { 'tabs': 's:matchtabs', 'tabe': 's:matchtabe' }
if has_key(matchtypes, s:matchtype) if has_key(matchtypes, s:matchtype)
let mfunc = matchtypes[s:matchtype] let mfunc = matchtypes[s:matchtype]
@ -2439,7 +2450,7 @@ fu! s:insertcache(str)
endf endf
" Extensions {{{2 " Extensions {{{2
fu! s:mtype() fu! s:mtype()
retu s:itemtype > 2 ? s:getextvar('type') : 'path' retu s:itemtype >= len(s:coretypes) ? s:getextvar('type') : 'path'
endf endf
fu! s:execextvar(key) fu! s:execextvar(key)
@ -2450,8 +2461,8 @@ fu! s:execextvar(key)
endf endf
fu! s:getextvar(key) fu! s:getextvar(key)
if s:itemtype > 2 if s:itemtype >= len(s:coretypes) && len(g:ctrlp_ext_vars) > 0
let vars = g:ctrlp_ext_vars[s:itemtype - 3] let vars = g:ctrlp_ext_vars[s:itemtype - len(s:coretypes)]
retu has_key(vars, a:key) ? vars[a:key] : -1 retu has_key(vars, a:key) ? vars[a:key] : -1
en en
retu get(g:, 'ctrlp_' . s:matchtype . '_' . a:key, -1) retu get(g:, 'ctrlp_' . s:matchtype . '_' . a:key, -1)
@ -2505,7 +2516,8 @@ endf
fu! ctrlp#setlines(...) fu! ctrlp#setlines(...)
if a:0 | let s:itemtype = a:1 | en if a:0 | let s:itemtype = a:1 | en
cal s:modevar() cal s:modevar()
let types = ['ctrlp#files()', 'ctrlp#buffers()', 'ctrlp#mrufiles#list()'] let inits = {'fil': 'ctrlp#files()', 'buf': 'ctrlp#buffers()', 'mru': 'ctrlp#mrufiles#list()'}
let types = map(copy(g:ctrlp_types), 'inits[v:val]')
if !empty(g:ctrlp_ext_vars) if !empty(g:ctrlp_ext_vars)
cal map(copy(g:ctrlp_ext_vars), 'add(types, v:val["init"])') cal map(copy(g:ctrlp_ext_vars), 'add(types, v:val["init"])')
en en
@ -2514,11 +2526,11 @@ endf
" Returns [lname, sname] " Returns [lname, sname]
fu! s:CurTypeName() fu! s:CurTypeName()
if s:itemtype < 3 if s:itemtype < len(s:coretypes)
return s:coretypes[s:itemtype] return filter(copy(s:coretypes), 'v:val[1]==g:ctrlp_types[s:itemtype]')[0]
else el
return [s:getextvar("lname"), s:getextvar('sname')] return [s:getextvar("lname"), s:getextvar('sname')]
endif en
endfu endfu
fu! s:ExitIfSingleCandidate() fu! s:ExitIfSingleCandidate()
@ -2526,7 +2538,7 @@ fu! s:ExitIfSingleCandidate()
call s:AcceptSelection('e') call s:AcceptSelection('e')
call ctrlp#exit() call ctrlp#exit()
return 1 return 1
endif en
return 0 return 0
endfu endfu
@ -2539,14 +2551,23 @@ fu! ctrlp#init(type, ...)
cal s:SetWD(a:0 ? a:1 : {}) cal s:SetWD(a:0 ? a:1 : {})
cal s:MapNorms() cal s:MapNorms()
cal s:MapSpecs() cal s:MapSpecs()
cal ctrlp#setlines(s:settype(a:type)) if type(a:type) == 0
let type = a:type
el
let type = index(g:ctrlp_types, a:type)
if type == -1
call ctrlp#exit()
retu
en
en
cal ctrlp#setlines(s:settype(type))
cal ctrlp#syntax() cal ctrlp#syntax()
cal s:SetDefTxt() cal s:SetDefTxt()
let curName = s:CurTypeName() let curName = s:CurTypeName()
let shouldExitSingle = index(s:opensingle, curName[0])>=0 || index(s:opensingle, curName[1])>=0 let shouldExitSingle = index(s:opensingle, curName[0])>=0 || index(s:opensingle, curName[1])>=0
if shouldExitSingle && s:ExitIfSingleCandidate() if shouldExitSingle && s:ExitIfSingleCandidate()
return 0 return 0
endif en
cal s:BuildPrompt(1) cal s:BuildPrompt(1)
if s:keyloop | cal s:KeyLoop() | en if s:keyloop | cal s:KeyLoop() | en
return 1 return 1

View File

@ -68,6 +68,7 @@ Overview:~
|ctrlp_open_single_match|.....Automatically accept when only one candidate. |ctrlp_open_single_match|.....Automatically accept when only one candidate.
|ctrlp_brief_prompt|..........Exit CtrlP on empty prompt by <bs>. |ctrlp_brief_prompt|..........Exit CtrlP on empty prompt by <bs>.
|ctrlp_match_current_file|....Include current file in match entries. |ctrlp_match_current_file|....Include current file in match entries.
|ctrlp_types|.................Names of builtin types.
MRU mode: MRU mode:
|ctrlp_mruf_max|..............Max MRU entries to remember. |ctrlp_mruf_max|..............Max MRU entries to remember.
@ -454,13 +455,19 @@ This option works well together with |g:ctrlp_open_single_match|
*'g:ctrlp_match_current_file'* *'g:ctrlp_match_current_file'*
Includes the current file in the match entries: Includes the current file in the match entries: >
let g:ctrlp_match_current_file = 1 let g:ctrlp_match_current_file = 1
By default, the current file is excluded from the list. By default, the current file is excluded from the list.
Note: does not apply when |g:ctrlp_match_func| is used. Note: does not apply when |g:ctrlp_match_func| is used.
*'g:ctrlp_types'*
Set this to list of names to customize core types: >
let g:ctrlp_types = ['mru', 'fil']
By default, the types are: >
let g:ctrlp_types = ['fil', 'buf', 'mru'].
*'g:ctrlp_abbrev'* *'g:ctrlp_abbrev'*
Define input abbreviations that can be expanded (either internally or visibly) Define input abbreviations that can be expanded (either internally or visibly)

View File

@ -10,17 +10,23 @@ if ( exists('g:loaded_ctrlp') && g:loaded_ctrlp ) || v:version < 700 || &cp
en en
let g:loaded_ctrlp = 1 let g:loaded_ctrlp = 1
let s:types = ['fil', 'buf', 'mru']
if !exists('g:ctrlp_types')
let g:ctrlp_types = s:types
el
call filter(g:ctrlp_types, "index(['fil', 'buf', 'mru'], v:val)!=-1")
en
let [g:ctrlp_lines, g:ctrlp_allfiles, g:ctrlp_alltags, g:ctrlp_alldirs, let [g:ctrlp_lines, g:ctrlp_allfiles, g:ctrlp_alltags, g:ctrlp_alldirs,
\ g:ctrlp_allmixes, g:ctrlp_buftags, g:ctrlp_ext_vars, g:ctrlp_builtins] \ g:ctrlp_allmixes, g:ctrlp_buftags, g:ctrlp_ext_vars, g:ctrlp_builtins]
\ = [[], [], [], [], {}, {}, [], 2] \ = [[], [], [], [], {}, {}, [], len(g:ctrlp_types)-1]
if !exists('g:ctrlp_map') | let g:ctrlp_map = '<c-p>' | en if !exists('g:ctrlp_map') | let g:ctrlp_map = '<c-p>' | en
if !exists('g:ctrlp_cmd') | let g:ctrlp_cmd = 'CtrlP' | en if !exists('g:ctrlp_cmd') | let g:ctrlp_cmd = 'CtrlP' | en
com! -n=? -com=dir CtrlP cal ctrlp#init(0, { 'dir': <q-args> }) com! -n=? -com=dir CtrlP cal ctrlp#init('fil', { 'dir': <q-args> })
com! -n=? -com=dir CtrlPMRUFiles cal ctrlp#init(2, { 'dir': <q-args> }) com! -n=? -com=dir CtrlPMRUFiles cal ctrlp#init('mru', { 'dir': <q-args> })
com! -bar CtrlPBuffer cal ctrlp#init(1) com! -bar CtrlPBuffer cal ctrlp#init('buf')
com! -n=? CtrlPLastMode cal ctrlp#init(-1, { 'args': <q-args> }) com! -n=? CtrlPLastMode cal ctrlp#init(-1, { 'args': <q-args> })
com! -bar CtrlPClearCache cal ctrlp#clr() com! -bar CtrlPClearCache cal ctrlp#clr()
@ -29,9 +35,9 @@ com! -bar CtrlPClearAllCaches cal ctrlp#clra()
com! -bar ClearCtrlPCache cal ctrlp#clr() com! -bar ClearCtrlPCache cal ctrlp#clr()
com! -bar ClearAllCtrlPCaches cal ctrlp#clra() com! -bar ClearAllCtrlPCaches cal ctrlp#clra()
com! -bar CtrlPCurWD cal ctrlp#init(0, { 'mode': '' }) com! -bar CtrlPCurWD cal ctrlp#init('fil', { 'mode': '' })
com! -bar CtrlPCurFile cal ctrlp#init(0, { 'mode': 'c' }) com! -bar CtrlPCurFile cal ctrlp#init('fil', { 'mode': 'c' })
com! -bar CtrlPRoot cal ctrlp#init(0, { 'mode': 'r' }) com! -bar CtrlPRoot cal ctrlp#init('fil', { 'mode': 'r' })
exe 'nn <silent> <plug>(ctrlp) :<c-u>'.g:ctrlp_cmd.'<cr>' exe 'nn <silent> <plug>(ctrlp) :<c-u>'.g:ctrlp_cmd.'<cr>'
@ -55,10 +61,10 @@ com! -bar CtrlPRTS cal ctrlp#init(ctrlp#rtscript#id())
com! -bar CtrlPUndo cal ctrlp#init(ctrlp#undo#id()) com! -bar CtrlPUndo cal ctrlp#init(ctrlp#undo#id())
com! -n=? -com=buffer CtrlPLine com! -n=? -com=buffer CtrlPLine
\ cal ctrlp#init(ctrlp#line#cmd(1, <q-args>)) \ cal ctrlp#init(ctrlp#line#cmd('buf', <q-args>))
com! -n=? -com=buffer CtrlPChange com! -n=? -com=buffer CtrlPChange
\ cal ctrlp#init(ctrlp#changes#cmd(0, <q-args>)) \ cal ctrlp#init(ctrlp#changes#cmd('fil', <q-args>))
com! -bar CtrlPChangeAll cal ctrlp#init(ctrlp#changes#cmd(1)) com! -bar CtrlPChangeAll cal ctrlp#init(ctrlp#changes#cmd(1))
com! -bar CtrlPMixed cal ctrlp#init(ctrlp#mixed#id()) com! -bar CtrlPMixed cal ctrlp#init(ctrlp#mixed#id())

View File

@ -30,16 +30,17 @@
4.4. [Are there any local checkers for HTML5 that I can use with syntastic?](#faqhtml5) 4.4. [Are there any local checkers for HTML5 that I can use with syntastic?](#faqhtml5)
4.5. [The `perl` checker has stopped working...](#faqperl) 4.5. [The `perl` checker has stopped working...](#faqperl)
4.6. [What happened to the `rustc` checker?](#faqrust) 4.6. [What happened to the `rustc` checker?](#faqrust)
4.7. [What happened to the `xcrun` checker?](#faqxcrun) 4.7. [What happened to the `tsc` checker?](#faqtsc)
4.8. [I run a checker and the location list is not updated...](#faqloclist) 4.8. [What happened to the `xcrun` checker?](#faqxcrun)
4.8. [I run`:lopen` or `:lwindow` and the error window is empty...](#faqloclist) 4.9. [I run a checker and the location list is not updated...](#faqloclist)
4.9. [How can I pass additional arguments to a checker?](#faqargs) 4.9. [I run`:lopen` or `:lwindow` and the error window is empty...](#faqloclist)
4.10. [Syntastic supports several checkers for my filetype - how do I tell which one(s) to use?](#faqcheckers) 4.10. [How can I pass additional arguments to a checker?](#faqargs)
4.11. [What is the difference between syntax checkers and style checkers?](#faqstyle) 4.11. [Syntastic supports several checkers for my filetype - how do I tell which one(s) to use?](#faqcheckers)
4.12. [I have enabled multiple checkers for the current filetype. How can I display all errors from all checkers together?](#faqaggregate) 4.12. [What is the difference between syntax checkers and style checkers?](#faqstyle)
4.13. [How can I jump between the different errors without using the location list at the bottom of the window?](#faqlnext) 4.13. [I have enabled multiple checkers for the current filetype. How can I display all errors from all checkers together?](#faqaggregate)
4.14. [My favourite checker needs to load a configuration file from the project's root rather than the current directory...](#faqconfig) 4.14. [How can I jump between the different errors without using the location list at the bottom of the window?](#faqlnext)
4.15. [The error window is closed automatically when I :quit the current buffer but not when I :bdelete it?](#faqbdelete) 4.15. [My favourite checker needs to load a configuration file from the project's root rather than the current directory...](#faqconfig)
4.16. [The error window is closed automatically when I :quit the current buffer but not when I :bdelete it?](#faqbdelete)
5. [Resources](#otherresources) 5. [Resources](#otherresources)
- - - - - -
@ -54,26 +55,26 @@ can be done on demand, or automatically as files are saved. If syntax errors
are detected, the user is notified and is happy because they didn't have to are detected, the user is notified and is happy because they didn't have to
compile their code or execute their script to find them. compile their code or execute their script to find them.
At the time of this writing, syntastic has checking plugins for ActionScript, At the time of this writing, syntastic has checking plugins for ACPI
Ada, Ansible configurations, API Blueprint, AppleScript, AsciiDoc, Assembly Source Language, ActionScript, Ada, Ansible configurations, API Blueprint,
languages, BEMHTML, Bro, Bourne shell, C, C++, C#, Cabal, Chef, CoffeeScript, AppleScript, AsciiDoc, Assembly languages, BEMHTML, Bro, Bourne shell, C,
Coco, Coq, CSS, Cucumber, CUDA, D, Dart, DocBook, Dockerfile, Dust, Elixir, C++, C#, Cabal, Chef, CoffeeScript, Coco, Coq, CSS, Cucumber, CUDA, D, Dart,
Erlang, eRuby, Fortran, Gentoo metadata, GLSL, Go, Haml, Haskell, Haxe, DocBook, Dockerfile, Dust, Elixir, Erlang, eRuby, Fortran, Gentoo metadata,
Handlebars, HSS, HTML, Java, JavaScript, JSON, JSX, LESS, Lex, Limbo, LISP, GLSL, Go, Haml, Haskell, Haxe, Handlebars, HSS, HTML, Java, JavaScript, JSON,
LLVM intermediate language, Lua, Markdown, MATLAB, Mercury, NASM, Nix, JSX, LESS, Lex, Limbo, LISP, LLVM intermediate language, Lua, Markdown,
Objective-C, Objective-C++, OCaml, Perl, Perl POD, PHP, gettext Portable MATLAB, Mercury, NASM, Nix, Objective-C, Objective-C++, OCaml, Perl, Perl
Object, OS X and iOS property lists, Pug (formerly Jade), Puppet, Python, POD, PHP, gettext Portable Object, OS X and iOS property lists, Pug (formerly
QML, R, Racket, RDF TriG, RDF Turtle, Relax NG, reStructuredText, RPM spec, Jade), Puppet, Python, QML, R, Racket, RDF TriG, RDF Turtle, Relax NG,
Ruby, SASS/SCSS, Scala, Slim, SML, Sphinx, SQL, Stylus, Tcl, TeX, Texinfo, reStructuredText, RPM spec, Ruby, SASS/SCSS, Scala, Slim, SML, Sphinx, SQL,
Twig, TypeScript, Vala, Verilog, VHDL, VimL, xHtml, XML, XSLT, XQuery, Stylus, Tcl, TeX, Texinfo, Twig, TypeScript, Vala, Verilog, VHDL, VimL, xHtml,
YACC, YAML, YANG data models, z80, Zope page templates, and Zsh. See the XML, XSLT, XQuery, YACC, YAML, YANG data models, z80, Zope page templates, and
[manual][checkers] for details about the corresponding supported checkers Zsh. See the [manual][checkers] for details about the corresponding supported
(`:help syntastic-checkers` in Vim). checkers (`:help syntastic-checkers` in Vim).
A number of third-party Vim plugins also provide checkers for syntastic, A number of third-party Vim plugins also provide checkers for syntastic, for
for example: [merlin][merlin], [omnisharp-vim][omnisharp], [rust.vim][rust], example: [merlin][merlin], [omnisharp-vim][omnisharp], [rust.vim][rust],
[syntastic-extras][myint], [syntastic-more][roktas], [vim-crystal][crystal], [syntastic-extras][myint], [syntastic-more][roktas], [tsuquyomi][tsuquyomi],
[vim-eastwood][eastwood], and [vim-swift][swift]. [vim-crystal][crystal], [vim-eastwood][eastwood], and [vim-swift][swift].
Below is a screenshot showing the methods that Syntastic uses to display syntax Below is a screenshot showing the methods that Syntastic uses to display syntax
errors. Note that, in practise, you will only have a subset of these methods errors. Note that, in practise, you will only have a subset of these methods
@ -303,9 +304,17 @@ __4.6. Q. What happened to the `rustc` checker?__
A. It is now part of the [rust.vim][rust] plugin. If you install this plugin the A. It is now part of the [rust.vim][rust] plugin. If you install this plugin the
checker should be picked up automatically by syntastic. checker should be picked up automatically by syntastic.
<a name="faqtsc"></a>
__4.7. Q. What happened to the `tsc` checker?__
A. It didn't meet people's expectations and it has been removed. Please
consider using the external checker [tsuquyomi][tsuquyomi] instead. If you
install this plugin the checker should be picked up automatically by syntastic.
<a name="faqxcrun"></a> <a name="faqxcrun"></a>
__4.7. Q. What happened to the `xcrun` checker?__ __4.8. Q. What happened to the `xcrun` checker?__
A. The `xcrun` checker used to have a security problem and it has been removed. A. The `xcrun` checker used to have a security problem and it has been removed.
A better checker for __Swift__ is part of the [vim-swift][swift] plugin. If you A better checker for __Swift__ is part of the [vim-swift][swift] plugin. If you
@ -313,8 +322,8 @@ install this plugin the checker should be picked up automatically by syntastic.
<a name="faqloclist"></a> <a name="faqloclist"></a>
__4.8. Q. I run a checker and the location list is not updated...__ __4.9. Q. I run a checker and the location list is not updated...__
__4.8. Q. I run`:lopen` or `:lwindow` and the error window is empty...__ __4.9. Q. I run`:lopen` or `:lwindow` and the error window is empty...__
A. By default the location list is changed only when you run the `:Errors` A. By default the location list is changed only when you run the `:Errors`
command, in order to minimise conflicts with other plugins. If you want the command, in order to minimise conflicts with other plugins. If you want the
@ -326,7 +335,7 @@ let g:syntastic_always_populate_loc_list = 1
<a name="faqargs"></a> <a name="faqargs"></a>
__4.9. Q. How can I pass additional arguments to a checker?__ __4.10. Q. How can I pass additional arguments to a checker?__
A. Almost all syntax checkers use the `makeprgBuild()` function. Those checkers A. Almost all syntax checkers use the `makeprgBuild()` function. Those checkers
that do can be configured using global variables. The general form of the that do can be configured using global variables. The general form of the
@ -342,7 +351,7 @@ See `:help syntastic-checker-options` for more information.
<a name="faqcheckers"></a> <a name="faqcheckers"></a>
__4.10. Q. Syntastic supports several checkers for my filetype - how do I tell it __4.11. Q. Syntastic supports several checkers for my filetype - how do I tell it
which one(s) to use?__ which one(s) to use?__
A. Stick a line like this in your `vimrc`: A. Stick a line like this in your `vimrc`:
@ -383,7 +392,7 @@ filetype of the current file is `php`).
<a name="faqstyle"></a> <a name="faqstyle"></a>
__4.11. Q. What is the difference between syntax checkers and style checkers?__ __4.12. Q. What is the difference between syntax checkers and style checkers?__
A. The errors and warnings they produce are highlighted differently and can A. The errors and warnings they produce are highlighted differently and can
be filtered by different rules, but otherwise the distinction is pretty much be filtered by different rules, but otherwise the distinction is pretty much
@ -413,7 +422,7 @@ See `:help syntastic_quiet_messages` for details.
<a name="faqaggregate"></a> <a name="faqaggregate"></a>
__4.12. Q. I have enabled multiple checkers for the current filetype. How can I __4.13. Q. I have enabled multiple checkers for the current filetype. How can I
display all errors from all checkers together?__ display all errors from all checkers together?__
A. Set `g:syntastic_aggregate_errors` to 1 in your `vimrc`: A. Set `g:syntastic_aggregate_errors` to 1 in your `vimrc`:
@ -425,7 +434,7 @@ See `:help syntastic-aggregating-errors` for more details.
<a name="faqlnext"></a> <a name="faqlnext"></a>
__4.13. Q. How can I jump between the different errors without using the location __4.14. Q. How can I jump between the different errors without using the location
list at the bottom of the window?__ list at the bottom of the window?__
A. Vim provides several built-in commands for this. See `:help :lnext` and A. Vim provides several built-in commands for this. See `:help :lnext` and
@ -437,7 +446,7 @@ mappings (among other things).
<a name="faqconfig"></a> <a name="faqconfig"></a>
__4.14. My favourite checker needs to load a configuration file from the __4.15. My favourite checker needs to load a configuration file from the
project's root rather than the current directory...__ project's root rather than the current directory...__
A. You can set up an `autocmd` to search for the configuration file in the A. You can set up an `autocmd` to search for the configuration file in the
@ -456,7 +465,7 @@ autocmd FileType javascript let b:syntastic_javascript_jscs_args =
``` ```
<a name="faqbdelete"></a> <a name="faqbdelete"></a>
__4.15. Q. The error window is closed automatically when I :quit the current buffer __4.16. Q. The error window is closed automatically when I :quit the current buffer
but not when I :bdelete it?__ but not when I :bdelete it?__
A. There is no safe way to handle that situation automatically, but you can A. There is no safe way to handle that situation automatically, but you can
@ -510,6 +519,7 @@ a look at [ghcmod-vim][ghcmod], [jedi-vim][jedi], [python-mode][python_mode], [v
[swift]: https://github.com/kballard/vim-swift [swift]: https://github.com/kballard/vim-swift
[tidy]: http://www.htacg.org/tidy-html5/ [tidy]: http://www.htacg.org/tidy-html5/
[tidy_old]: http://tidy.sourceforge.net/ [tidy_old]: http://tidy.sourceforge.net/
[tsuquyomi]: https://github.com/Quramy/tsuquyomi/
[unimpaired]: https://github.com/tpope/vim-unimpaired [unimpaired]: https://github.com/tpope/vim-unimpaired
[vam]: https://github.com/MarcWeber/vim-addon-manager [vam]: https://github.com/MarcWeber/vim-addon-manager
[vim]: http://www.vim.org/ [vim]: http://www.vim.org/

View File

@ -6,6 +6,7 @@ SYNTAX CHECKERS BY LANGUAGE *syntastic-checkers-lang*
|syntastic| comes with checkers for the following languages: |syntastic| comes with checkers for the following languages:
ACPI Source Language.....................|syntastic-checkers-asl|
ActionScript.............................|syntastic-checkers-actionscript| ActionScript.............................|syntastic-checkers-actionscript|
Ada......................................|syntastic-checkers-ada| Ada......................................|syntastic-checkers-ada|
Ansible..................................|syntastic-checkers-ansible| Ansible..................................|syntastic-checkers-ansible|
@ -132,6 +133,37 @@ SYNTAX CHECKERS BY LANGUAGE *syntastic-checkers-lang*
Third-party checkers are available for additional languages. Third-party checkers are available for additional languages.
==============================================================================
SYNTAX CHECKERS FOR ACPI SOURCE LANGUAGE *syntastic-checkers-asl*
The following checkers are available for the ACPI Source Language (filetype
"asl"):
1. iasl.....................|syntastic-asl-iasl|
------------------------------------------------------------------------------
1. iasl *syntastic-asl-iasl*
Name: iasl
Maintainer: Peter Wu <peter@lekensteyn.nl>
"iasl" is a compiler/decompiler for ACPI Source Language (ASL) and ACPI
Machine Language (AML). See the project's page for details:
https://acpica.org/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Note~
You probably also need a plugin to set |filetype| for ASL files, such as
"vim-acpi-asl":
https://github.com/martinlroth/vim-acpi-asl
============================================================================== ==============================================================================
SYNTAX CHECKERS FOR ACTIONSCRIPT *syntastic-checkers-actionscript* SYNTAX CHECKERS FOR ACTIONSCRIPT *syntastic-checkers-actionscript*
@ -344,7 +376,7 @@ accepts the standard options described at |syntastic-config-makeprg|.
============================================================================== ==============================================================================
SYNTAX CHECKERS FOR ASSEMBLY LANGUAGES *syntastic-checkers-asm* SYNTAX CHECKERS FOR ASSEMBLY LANGUAGES *syntastic-checkers-asm*
The following checkers are available for asembly languages (filetype "asm"): The following checkers are available for assembly languages (filetype "asm"):
1. GCC......................|syntastic-asm-gcc| 1. GCC......................|syntastic-asm-gcc|
@ -432,7 +464,7 @@ The following checkers are available for BEMHTML (filetype "bemhtml"):
Name: bemhtmllint Name: bemhtmllint
Maintainer: Sergej Tatarincev Maintainer: Sergej Tatarincev
BEMHTML is a template engine intended for using with BEM methodology BEMHTML is a template engine intended for using with the BEM methodology
(http://bem.info/method/). See the project's page at GitHub for details: (http://bem.info/method/). See the project's page at GitHub for details:
https://github.com/SevInf/bemhtml-lint https://github.com/SevInf/bemhtml-lint
@ -492,9 +524,9 @@ Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|. accepts the standard options described at |syntastic-config-makeprg|.
Aditionally: Additionally:
*g:syntastic_avrgcc_config_file* *'g:syntastic_avrgcc_config_file'*
Type: string Type: string
Default: ".syntastic_avrgcc_config" Default: ".syntastic_avrgcc_config"
File containing compilation flags (such as defines or include directories), File containing compilation flags (such as defines or include directories),
@ -895,17 +927,39 @@ SYNTAX CHECKERS FOR C++ *syntastic-checkers-cpp*
The following checkers are available for C++ (filetype "cpp"): The following checkers are available for C++ (filetype "cpp"):
1. ClangCheck...............|syntastic-cpp-clang_check| 1. AVR-GCC..................|syntastic-cpp-avrgcc|
2. Clang-Tidy...............|syntastic-cpp-clang_tidy| 2. ClangCheck...............|syntastic-cpp-clang_check|
3. Cppcheck.................|syntastic-cpp-cppcheck| 3. Clang-Tidy...............|syntastic-cpp-clang_tidy|
4. Cpplint..................|syntastic-cpp-cpplint| 4. Cppcheck.................|syntastic-cpp-cppcheck|
5. GCC......................|syntastic-cpp-gcc| 5. Cpplint..................|syntastic-cpp-cpplint|
6. OClint...................|syntastic-cpp-oclint| 6. GCC......................|syntastic-cpp-gcc|
7. PC-Lint..................|syntastic-cpp-pc_lint| 7. OClint...................|syntastic-cpp-oclint|
8. Vera++...................|syntastic-cpp-verapp| 8. PC-Lint..................|syntastic-cpp-pc_lint|
9. Vera++...................|syntastic-cpp-verapp|
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
1. ClangCheck *syntastic-cpp-clang_check* 1. AVR-GCC *syntastic-cpp-avrgcc*
Name: avrgcc
Maintainer: Sławek Piotrowski <sentinel@atteo.com>
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
'g:syntastic_avrgcc_config_file'
Type: string
Default: ".syntastic_avrgcc_config"
File containing compilation flags (such as defines or include directories),
one option per line (cf. |syntastic-config-files|).
See also: |syntastic-c-avrgcc|.
------------------------------------------------------------------------------
2. ClangCheck *syntastic-cpp-clang_check*
Name: clang_check Name: clang_check
Maintainer: Benjamin Bannier <bbannier@gmail.com> Maintainer: Benjamin Bannier <bbannier@gmail.com>
@ -948,7 +1002,7 @@ then ignored.
See also: |syntastic-c-clang_check|. See also: |syntastic-c-clang_check|.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
2. Clang-Tidy *syntastic-cpp-clang_tidy* 3. Clang-Tidy *syntastic-cpp-clang_tidy*
Name: clang_tidy Name: clang_tidy
Maintainer: Benjamin Bannier <bbannier@gmail.com> Maintainer: Benjamin Bannier <bbannier@gmail.com>
@ -999,7 +1053,7 @@ then ignored.
See also: |syntastic-c-clang_tidy|. See also: |syntastic-c-clang_tidy|.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
3. Cppcheck *syntastic-cpp-cppcheck* 4. Cppcheck *syntastic-cpp-cppcheck*
Name: cppcheck Name: cppcheck
Maintainer: LCD 47 <lcd047@gmail.com> Maintainer: LCD 47 <lcd047@gmail.com>
@ -1025,7 +1079,7 @@ one option per line (cf. |syntastic-config-files|).
See also: |syntastic-c-cppcheck|. See also: |syntastic-c-cppcheck|.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
4. Cpplint *syntastic-cpp-cpplint* 5. Cpplint *syntastic-cpp-cpplint*
Name: cpplint Name: cpplint
Maintainer: LCD 47 <lcd047@gmail.com> Maintainer: LCD 47 <lcd047@gmail.com>
@ -1061,7 +1115,7 @@ However, if your "cpplint" was installed with "pip", the script's name is
let g:syntastic_cpp_cpplint_exec = "cpplint" let g:syntastic_cpp_cpplint_exec = "cpplint"
< <
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
5. GCC *syntastic-cpp-gcc* 6. GCC *syntastic-cpp-gcc*
Name: gcc Name: gcc
Maintainer: Gregor Uhlenheuer <kongo2002@gmail.com> Maintainer: Gregor Uhlenheuer <kongo2002@gmail.com>
@ -1158,7 +1212,7 @@ executable.
See also: |syntastic-c-gcc|. See also: |syntastic-c-gcc|.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
6. OClint *syntastic-cpp-oclint* 7. OClint *syntastic-cpp-oclint*
Name: oclint Name: oclint
Maintainer: "UnCO" Lin <undercooled@lavabit.com> Maintainer: "UnCO" Lin <undercooled@lavabit.com>
@ -1198,7 +1252,7 @@ Config files pointed to by 'g:syntastic_oclint_config_file' are then ignored.
See also: |syntastic-c-oclint|. See also: |syntastic-c-oclint|.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
7. PC-Lint *syntastic-cpp-pc_lint* 8. PC-Lint *syntastic-cpp-pc_lint*
Name: pc_lint Name: pc_lint
Maintainer: Steve Bragg <steve@empresseffects.com> Maintainer: Steve Bragg <steve@empresseffects.com>
@ -1225,7 +1279,7 @@ current directory and in parent directories; first such file found is used.
See also: |syntastic-c-pc_lint|. See also: |syntastic-c-pc_lint|.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
8. Vera++ *syntastic-cpp-verapp* 9. Vera++ *syntastic-cpp-verapp*
Name: verapp Name: verapp
Maintainer: Lucas Verney <phyks@phyks.me> Maintainer: Lucas Verney <phyks@phyks.me>
@ -1450,7 +1504,7 @@ The following checkers are available for Coq (filetype "coq"):
Name: coqtop Name: coqtop
Maintainer: Matvey Aksenov <matvey.aksenov@gmail.com> Maintainer: Matvey Aksenov <matvey.aksenov@gmail.com>
"Coqtop" is the top level intrface for Coq. See the project's page for "Coqtop" is the top level interface for Coq. See the project's page for
details: details:
http://coq.inria.fr/ http://coq.inria.fr/
@ -1989,8 +2043,8 @@ Name: syntaxerl
Maintainer: locojay Maintainer: locojay
"SyntaxErl" is a syntax checker for Erlang. It uses "rebar" "SyntaxErl" is a syntax checker for Erlang. It uses "rebar"
(https://github.com/basho/rebar) to determine correct deps and libs paths. (https://github.com/basho/rebar) to determine correct dependencies and library
See the project's page for more information: paths. See the project's page for more information:
https://github.com/ten0s/syntaxerl https://github.com/ten0s/syntaxerl
@ -2191,7 +2245,7 @@ If the magic comment does not exist, then the dictionary
'g:syntastic_glsl_extensions' is used to infer the appropriate profile from 'g:syntastic_glsl_extensions' is used to infer the appropriate profile from
the current file's extension. If this dictionary does not exist either, a the current file's extension. If this dictionary does not exist either, a
default dictionary is used instead. Finally, if the current file's extension default dictionary is used instead. Finally, if the current file's extension
cannott be found in these dictionaries, the checker assumes a vertex shader cannot be found in these dictionaries, the checker assumes a vertex shader
profile. profile.
*'g:syntastic_glsl_options'* *'g:syntastic_glsl_options'*
@ -2879,7 +2933,7 @@ point |'g:syntastic_java_checkstyle_classpath'| to it:
http://iweb.dl.sourceforge.net/project/checkstyle/checkstyle/ http://iweb.dl.sourceforge.net/project/checkstyle/checkstyle/
http://checkstyle.sourceforge.net/cmdline.html#Usage_by_Classpath_update http://checkstyle.sourceforge.net/cmdline.html#Usage_by_Classpath_update
Current builds at Maven Central do not package "checkstyles" with its Current builds at Maven Central do not package "checkstyle" with its
dependencies: dependencies:
http://search.maven.org/#search|gav|1|g%3A%22com.puppycrawl.tools%22%20AND%20a%3A%22checkstyle%22 http://search.maven.org/#search|gav|1|g%3A%22com.puppycrawl.tools%22%20AND%20a%3A%22checkstyle%22
@ -4637,7 +4691,7 @@ Please note that transforming a file like this affects line numbers and
column numbers, and syntastic has no way to make the necessary adjustments. column numbers, and syntastic has no way to make the necessary adjustments.
Consequently, errors might appear on surprising lines if you enable this Consequently, errors might appear on surprising lines if you enable this
feature and the transformed file has code on different lines than the raw feature and the transformed file has code on different lines than the raw
file. For this reason the use of these transformations should be limitted file. For this reason the use of these transformations should be limited
to codecs that preserve line numbers, such as the "spec" codec provided by to codecs that preserve line numbers, such as the "spec" codec provided by
"NoseOfYeti": "NoseOfYeti":
@ -4741,7 +4795,7 @@ setting of "lint.style".
Name: lintr Name: lintr
Maintainer: Jim Hester <james.f.hester@gmail.com> Maintainer: Jim Hester <james.f.hester@gmail.com>
"lintr" is a static code analysys tool for R files. See the project's page at "lintr" is a static code analysis tool for R files. See the project's page at
GitHub for details: GitHub for details:
https://github.com/jimhester/lintr https://github.com/jimhester/lintr
@ -4794,7 +4848,7 @@ This is a checker for R files, using the R package "svTools":
http://cran.r-project.org/web/packages/svTools/ http://cran.r-project.org/web/packages/svTools/
In turn, this package delegates most of the work to the "checkUsage()" In turn, this package delegates most of the work to the "checkUsage()"
function in the codetools package: function in the "codetools" package:
http://cran.r-project.org/web/packages/codetools/ http://cran.r-project.org/web/packages/codetools/
@ -4851,7 +4905,7 @@ The following checkers are available for R Markdown (filetype "rmd"):
Name: lintr Name: lintr
Maintainer: Jim Hester <james.f.hester@gmail.com> Maintainer: Jim Hester <james.f.hester@gmail.com>
"lintr" is a static code analysys tool for R files. See the project's page at "lintr" is a static code analysis tool for R files. See the project's page at
GitHub for details: GitHub for details:
https://github.com/jimhester/lintr https://github.com/jimhester/lintr
@ -5060,7 +5114,7 @@ directory, or if you want to override the autodetected paths, options
|'g:syntastic_rst_sphinx_source_dir'| and |'g:syntastic_rst_sphinx_config_dir'| |'g:syntastic_rst_sphinx_source_dir'| and |'g:syntastic_rst_sphinx_config_dir'|
take precedence over the detected values. take precedence over the detected values.
Please not also that the checker creates output files in a temporary directory Please note also that the checker creates output files in a temporary directory
that is created upon the first run in the current session, and is removed when that is created upon the first run in the current session, and is removed when
Vim exits. If you need to change the location of this directory you can do Vim exits. If you need to change the location of this directory you can do
so by exporting the environment variables "TMPDIR" or "TMP" (on UNIX and Mac so by exporting the environment variables "TMPDIR" or "TMP" (on UNIX and Mac
@ -5081,7 +5135,7 @@ The following checkers are available for Linux RPM packages (filetype "spec"):
Name: rpmlint Name: rpmlint
Maintainer: LCD 47 <lcd047@gmail.com> Maintainer: LCD 47 <lcd047@gmail.com>
"rpmlint" is a trool for checking Linux RPM packages. See the project's page "rpmlint" is a tool for checking Linux RPM packages. See the project's page
for details: for details:
http://sourceforge.net/projects/rpmlint/ http://sourceforge.net/projects/rpmlint/
@ -5864,7 +5918,7 @@ The following checkers are available for Texinfo (filetype "texinfo"):
Name: makeinfo Name: makeinfo
Maintainer: LCD 47 <lcd047@gmail.com> Maintainer: LCD 47 <lcd047@gmail.com>
"Makeinfo" is a convertor for Texinfo files. It is distributed together with "Makeinfo" is a converter for Texinfo files. It is distributed together with
the GNU package "texinfo": the GNU package "texinfo":
http://www.gnu.org/software/texinfo/ http://www.gnu.org/software/texinfo/
@ -6087,8 +6141,7 @@ SYNTAX CHECKERS FOR TYPESCRIPT *syntastic-checkers-typescript*
The following checkers are available for TypeScript (filetype "typescript"): The following checkers are available for TypeScript (filetype "typescript"):
1. ESLint...................|syntastic-typescript-eslint| 1. ESLint...................|syntastic-typescript-eslint|
2. tsc......................|syntastic-typescript-tsc| 2. TSLint...................|syntastic-typescript-tslint|
3. TSLint...................|syntastic-typescript-tslint|
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
1. ESLint *syntastic-typescript-eslint* 1. ESLint *syntastic-typescript-eslint*
@ -6118,29 +6171,7 @@ as "typescript-vim":
See also: |syntastic-html-eslint|, |syntastic-javascript-eslint|. See also: |syntastic-html-eslint|, |syntastic-javascript-eslint|.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
2. tsc *syntastic-typescript-tsc* 2. TSLint *syntastic-typescript-tslint*
Name: tsc
Maintainer: Bill Casarin <bill@casarin.ca>
"tsc" is a compiler for TypeScript. See the project's page for details:
http://www.typescriptlang.org/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Note~
You probably also need a plugin to set |filetype| for TypeScript files, such
as "typescript-vim":
https://github.com/leafgarland/typescript-vim
------------------------------------------------------------------------------
3. TSLint *syntastic-typescript-tslint*
Name: tslint Name: tslint
Maintainer: Seon-Wook Park <seon.wook@swook.net> Maintainer: Seon-Wook Park <seon.wook@swook.net>
@ -6861,6 +6892,7 @@ syntastic-specific configuration files:
OpenCOBOL (|syntastic-cobol-cobc|) OpenCOBOL (|syntastic-cobol-cobc|)
C++~ C++~
AVR-GCC (|syntastic-cpp-avrgcc|)
ClangCheck (|syntastic-cpp-clang_check|) ClangCheck (|syntastic-cpp-clang_check|)
Clang-Tidy (|syntastic-cpp-clang_tidy|) Clang-Tidy (|syntastic-cpp-clang_tidy|)
Cppcheck (|syntastic-cpp-cppcheck|) Cppcheck (|syntastic-cpp-cppcheck|)

View File

@ -19,7 +19,7 @@ if has('reltime')
lockvar! g:_SYNTASTIC_START lockvar! g:_SYNTASTIC_START
endif endif
let g:_SYNTASTIC_VERSION = '3.7.0-162' let g:_SYNTASTIC_VERSION = '3.7.0-177'
lockvar g:_SYNTASTIC_VERSION lockvar g:_SYNTASTIC_VERSION
" Sanity checks {{{1 " Sanity checks {{{1

View File

@ -12,6 +12,7 @@ let s:_DEFAULT_CHECKERS = {
\ 'apiblueprint': ['drafter'], \ 'apiblueprint': ['drafter'],
\ 'applescript': ['osacompile'], \ 'applescript': ['osacompile'],
\ 'asciidoc': ['asciidoc'], \ 'asciidoc': ['asciidoc'],
\ 'asl': ['iasl'],
\ 'asm': ['gcc'], \ 'asm': ['gcc'],
\ 'bro': ['bro'], \ 'bro': ['bro'],
\ 'bemhtml': ['bemhtmllint'], \ 'bemhtml': ['bemhtmllint'],
@ -93,7 +94,7 @@ let s:_DEFAULT_CHECKERS = {
\ 'trig': ['rapper'], \ 'trig': ['rapper'],
\ 'turtle': ['rapper'], \ 'turtle': ['rapper'],
\ 'twig': ['twiglint'], \ 'twig': ['twiglint'],
\ 'typescript': ['tsc'], \ 'typescript': [],
\ 'vala': ['valac'], \ 'vala': ['valac'],
\ 'verilog': ['verilator'], \ 'verilog': ['verilator'],
\ 'vhdl': ['ghdl'], \ 'vhdl': ['ghdl'],

View File

@ -0,0 +1,59 @@
"============================================================================
"File: iasl.vim
"Description: Syntax checking plugin for syntastic using iasl
"Maintainer: Peter Wu <peter@lekensteyn.nl>
"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('g:loaded_syntastic_asl_iasl_checker')
finish
endif
let g:loaded_syntastic_asl_iasl_checker = 1
let s:save_cpo = &cpo
set cpo&vim
function! SyntaxCheckers_asl_iasl_GetLocList() dict
let tmpdir = syntastic#util#tmpdir() . syntastic#util#Slash()
let makeprg = self.makeprgBuild({
\ 'args': '-vi',
\ 'args_after': ['-p', tmpdir] })
let errorformat =
\ '%f(%l) : %trror %n - %m,' .
\ '%f(%l) : %tarning %n - %m,' .
\ '%f(%l) : %temark %n - %m,' .
\ '%f(%l) : %tptimize %n - %m,' .
\ '%f(%l) : %m'
let loclist = SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
\ 'returns': [0, 255] })
for e in loclist
if e['type'] =~? 'r'
let e['type'] = 'W'
elseif e['type'] =~? 'o'
let e['type'] = 'W'
let e['subtype'] = 'Style'
endif
endfor
call syntastic#util#rmrf(tmpdir)
return loclist
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'asl',
\ 'name': 'iasl'})
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: set sw=4 sts=4 et fdm=marker:

View File

@ -1,6 +1,6 @@
"============================================================================ "============================================================================
"File: avrgcc.vim "File: avrgcc.vim
"Description: Syntax checking plugin for syntastic.vim "Description: Syntax checking plugin for syntastic
"Maintainer: Karel <karelishere at gmail dot com> "Maintainer: Karel <karelishere at gmail dot com>
"License: This program is free software. It comes without any warranty, "License: This program is free software. It comes without any warranty,
" to the extent permitted by applicable law. You can redistribute " to the extent permitted by applicable law. You can redistribute
@ -22,10 +22,12 @@ endif
let s:save_cpo = &cpo let s:save_cpo = &cpo
set cpo&vim set cpo&vim
let s:opt_x = { 'c': 'c', 'cpp': 'c++' }
function! SyntaxCheckers_c_avrgcc_GetLocList() dict function! SyntaxCheckers_c_avrgcc_GetLocList() dict
let makeprg = self.makeprgBuild({ let makeprg = self.makeprgBuild({
\ 'args_before': syntastic#c#ReadConfig(g:syntastic_avrgcc_config_file), \ 'args_before': syntastic#c#ReadConfig(g:syntastic_avrgcc_config_file),
\ 'args_after': '-x c -fsyntax-only' }) \ 'args_after': '-x ' . get(s:opt_x, self.getFiletype(), '') . ' -fsyntax-only' })
let errorformat = let errorformat =
\ '%-G%f:%s:,' . \ '%-G%f:%s:,' .

View File

@ -0,0 +1,24 @@
"============================================================================
"File: avrgcc.vim
"Description: Syntax checking plugin for syntastic
"Maintainer: Sławek Piotrowski <sentinel at atteo 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('g:loaded_syntastic_cpp_avrgcc_checker')
finish
endif
let g:loaded_syntastic_cpp_avrgcc_checker = 1
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'cpp',
\ 'name': 'avrgcc',
\ 'exec': 'avr-g++',
\ 'redirect': 'c/avrgcc'})
" vim: set sw=4 sts=4 et fdm=marker:

View File

@ -1,66 +0,0 @@
"============================================================================
"File: tsc.vim
"Description: TypeScript syntax checker
"Maintainer: Bill Casarin <bill@casarin.ca>
"
"============================================================================
if exists('g:loaded_syntastic_typescript_tsc_checker')
finish
endif
let g:loaded_syntastic_typescript_tsc_checker = 1
if !exists('g:syntastic_typescript_tsc_sort')
let g:syntastic_typescript_tsc_sort = 1
endif
let s:save_cpo = &cpo
set cpo&vim
function! SyntaxCheckers_typescript_tsc_IsAvailable() dict
if !executable(self.getExec())
return 0
endif
let version_output = split(syntastic#util#system(self.getExecEscaped() . ' --version'), '\n', 1)
let ver = filter(copy(version_output), 'v:val =~# ''\m\<Version ''')
let parsed_ver = len(ver) ? syntastic#util#parseVersion(ver[0], '\v<Version \zs\d+(\.\d+)\ze') : []
if len(parsed_ver)
call self.setVersion(parsed_ver)
let s:tsc_new = syntastic#util#versionIsAtLeast(parsed_ver, [1, 5])
else
call syntastic#log#ndebug(g:_SYNTASTIC_DEBUG_LOCLIST, 'checker output:', version_output)
call syntastic#log#error("checker typescript/tsc: can't parse version string (abnormal termination?)")
let s:tsc_new = -1
endif
return s:tsc_new >= 0
endfunction
function! SyntaxCheckers_typescript_tsc_GetLocList() dict
let makeprg = self.makeprgBuild({
\ 'args': '--module commonjs',
\ 'args_after': (s:tsc_new ? '--noEmit' : '--out ' . syntastic#util#DevNull()) })
let errorformat =
\ '%E%f %#(%l\,%c): error %m,' .
\ '%E%f %#(%l\,%c): %m,' .
\ '%Eerror %m,' .
\ '%C%\s%\+%m'
return SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
\ 'postprocess': ['guards'],
\ 'defaults': {'bufnr': bufnr('')} })
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'typescript',
\ 'name': 'tsc'})
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: set sw=4 sts=4 et fdm=marker:

View File

@ -41,7 +41,7 @@ the `<F7>` key if so. For example, to remap it to `<F3>` instead, use:
For flake8 configuration options please consult the following page: For flake8 configuration options please consult the following page:
https://flake8.readthedocs.org/en/latest/config.html http://flake8.pycqa.org/en/latest/user/configuration.html
To customize the location of your flake8 binary, set `g:flake8_cmd`: To customize the location of your flake8 binary, set `g:flake8_cmd`:

View File

@ -1,17 +1,45 @@
## 1.8 (unplanned) ## Unplanned
IMPROVEMENTS:
* **guru** uses now the `-modified` flag, which allows us use guru on modified
buffers as well. This affects all commands where `guru` is used. Such as
`:GoDef`, `:GoReferrers`, etc.. [gh-944]
* Cleanup and improve documentation [gh-987]
BUG FIXES:
* Fix system calls on Windows [gh-988]
## 1.8 (July 31, 2016)
FEATURES: FEATURES:
* New **`:GoAddTags`** command that adds field tags for the fields of a struct automatically based on the field names. Checkout the demo to see it in action: https://twitter.com/fatih/status/759822857773907968 [gh-971]
* If you open a new buffer with a Go filename it get automatically populated based on the directory. If there are no Go files a simple main package is created, otherwise the file will include the package declaration line based on the package in the current directory. Checkout the demo to see it in action: https://twitter.com/fatih/status/748333086643994624. This is enabled by default. Can be disabled with `let g:go_template_autocreate = 0`. You can use your own template with `let g:go_template_file = "foo.go"` and putting the file under the `templates/` folder. [gh-918] * The snippet expansion `json` is now much more smarter. It pre populates the placeholder according to the first word and it also applies `snake_case` or `camelCase` conversion. Together with `:GoAddTags` it gives `vim-go` users flexible ways of populating a field tag. Checkout the demo to see it in action: https://twitter.com/fatih/status/754477622042689536 [gh-927]
* The snippet expansion `json` is now much more smarter. It pre populates the placeholder according to the first word and it also applies `snake_case` or `camelCase` conversion. Checkout the demo to see it in action: https://github.com/fatih/vim-go/pull/927 [gh-927] * New **`:GoSameIds`** command. When called highlights all same identifiers in the current file. Can be also enabled to highlight identifiers automatically (with `:GoSameIdsAutoToggle` or `g:go_auto_sameids`). Checkout the demo to see it in action: https://twitter.com/fatih/status/753673709278339072. [gh-936]
* **`:GoSameIds`** support. When called highlights all same identifiers in the current file. Can be also enabled to highlight identifiers automatically. Checkout the demo to see it in action: https://twitter.com/fatih/status/753673709278339072. [gh-936] * New **`:GoWhicherrs`** command. It shows all possible values of the selected error variable. [gh-948]
* Add new `errp` snippet to expand an `if err != nil { panic() }` clause [gh-926] * Add new `errp` snippet to expand an `if err != nil { panic() }` clause [gh-926]
* If you open a new buffer with a Go filename it get automatically populated based on the directory. If there are no Go files a simple main package is created, otherwise the file will include the package declaration line based on the package in the current directory. Checkout the demo to see it in action: https://twitter.com/fatih/status/748333086643994624. This is enabled by default. Can be disabled with `let g:go_template_autocreate = 0`. You can use your own template with `let g:go_template_file = "foo.go"` and putting the file under the `templates/` folder. [gh-918]
* Added new toggle commands to enable/disable feature that run for your
automatic. For example if you have `let g:go_auto_type_info = 1` enabled, you
can now easily enable/disable it on the fly. Support added with the following
commands: `:GoAutoTypeInfoToggle`, `:GoFmtAutoSaveToggle`,
`:GoAsmFmtAutoSaveToggle`, `:GoMetalinterAutoSaveToggle`,
`:GoTemplateAutoCreateToggle` [gh-945]
IMPROVEMENTS: IMPROVEMENTS:
* `:GoDoc` accepts arguments now which are passed directly to `godoc`. So usages like `:GoDoc flag` works again (it was changed in previous versions [gh-894] * `:GoDoc` accepts arguments now which are passed directly to `godoc`. So usages like `:GoDoc flag` works again (it was changed in previous versions [gh-894]
* `:GoDef` works now for modified files as well [gh-910] * `:GoDef` works now for modified files as well [gh-910]
* Internal: pass filename to the `--srcdir` flag to enable upcoming `goimports` features [gh-957]
* Internal: fix indentations on all files to **2-spaces/no tabs**. This is now the default vim-go style across all VimL files [gh-915] * Internal: fix indentations on all files to **2-spaces/no tabs**. This is now the default vim-go style across all VimL files [gh-915]
* Internal: autocmd settings can be now dynamically enabled/disabled [gh-939]
* Internal: automatically detect `GOPATH` for :GoInstall [gh-980]
* Internal: shell executions uses now by default `sh` and then resets it back to the user preference. [gh-967]
* Syntax: improved syntax highglighting performance for methods, fields, structs and interface type declarations [gh-917] * Syntax: improved syntax highglighting performance for methods, fields, structs and interface type declarations [gh-917]
* Syntax: moved `:GoCoverage` highlight definition into go's syntax file for more customizability [gh-962]
BUG FIXES: BUG FIXES:
@ -21,6 +49,7 @@ BUG FIXES:
* Fix `:GoFmt` not picking up `-srcdir` if the command was set to use `goimports` [gh-904] * Fix `:GoFmt` not picking up `-srcdir` if the command was set to use `goimports` [gh-904]
* Fix `:GoTestCompile` to not leave behind artifacts if the cwd and the test files's directory do not match [gh-909] * Fix `:GoTestCompile` to not leave behind artifacts if the cwd and the test files's directory do not match [gh-909]
* Fix `:GoDocBrowser` to not fail if godoc doesn't exist [gh-920] * Fix `:GoDocBrowser` to not fail if godoc doesn't exist [gh-920]
* Fix `:GoFmt` to not change the permissions of saved file. Now original file permissions are restored [gh-922]
BACKWARDS INCOMPATIBILITIES: BACKWARDS INCOMPATIBILITIES:

View File

@ -50,10 +50,16 @@ disabled/enabled easily.
in their own new terminal. (beta) in their own new terminal. (beta)
* Alternate between implementation and test code with `:GoAlternate` * Alternate between implementation and test code with `:GoAlternate`
Checkout the official [tutorial](https://github.com/fatih/vim-go-tutorial)
that goes literally over all features and shows many tips and tricks. It shows
how to install vim-go and explains many unknown use cases. Recommended for
beginners as well as advanced users: https://github.com/fatih/vim-go-tutorial
## Install ## Install
Master branch is supposed to be a development branch. So stuff here can break and change. Master branch is supposed to be a development branch. So stuff here can break
Please try use always the [latest release](https://github.com/fatih/vim-go/releases/latest) and change. Please try use always the [latest
release](https://github.com/fatih/vim-go/releases/latest)
Vim-go follows the standard runtime path structure, so I highly recommend to Vim-go follows the standard runtime path structure, so I highly recommend to
use a common and well known plugin manager to install vim-go. Do not use vim-go use a common and well known plugin manager to install vim-go. Do not use vim-go
@ -69,6 +75,8 @@ command.
* `NeoBundle 'fatih/vim-go'` * `NeoBundle 'fatih/vim-go'`
* [Vundle](https://github.com/gmarik/vundle) * [Vundle](https://github.com/gmarik/vundle)
* `Plugin 'fatih/vim-go'` * `Plugin 'fatih/vim-go'`
* [Vim packages](http://vimhelp.appspot.com/repeat.txt.html#packages) (since Vim 7.4.1528)
* `git clone https://github.com/fatih/vim-go.git ~/.vim/pack/plugins/start/vim-go`
Please be sure all necessary binaries are installed (such as `gocode`, `godef`, Please be sure all necessary binaries are installed (such as `gocode`, `godef`,
`goimports`, etc.). You can easily install them with the included `goimports`, etc.). You can easily install them with the included
@ -84,7 +92,8 @@ installed binaries.
completion (completion by type) install: completion (completion by type) install:
[neocomplete](https://github.com/Shougo/neocomplete.vim) for Vim or [neocomplete](https://github.com/Shougo/neocomplete.vim) for Vim or
[deoplete](https://github.com/Shougo/deoplete.nvim) and [deoplete](https://github.com/Shougo/deoplete.nvim) and
[deoplete-go](https://github.com/zchee/deoplete-go) for NeoVim [deoplete-go](https://github.com/zchee/deoplete-go) for NeoVim or
[SimpleAutoCmplPop](https://github.com/roxma/SimpleAutoComplPop)
* To display source code tag information on a sidebar install * To display source code tag information on a sidebar install
[tagbar](https://github.com/majutsushi/tagbar). [tagbar](https://github.com/majutsushi/tagbar).
* For snippet features install: * For snippet features install:
@ -270,7 +279,6 @@ To resolve this:
let g:go_list_type = "quickfix" let g:go_list_type = "quickfix"
``` ```
## More info ## More info
Check out the [Wiki](https://github.com/fatih/vim-go/wiki) page for more Check out the [Wiki](https://github.com/fatih/vim-go/wiki) page for more
@ -282,8 +290,12 @@ other [various pieces](https://github.com/fatih/vim-go/wiki) of information.
## Donation ## Donation
People have asked for this for a long time, now you can be a fully supporter by People have asked for this for a long time, now you can be a fully supporter by
[being a patron](https://www.patreon.com/fatih)! This is fully optional and is [being a patron](https://www.patreon.com/fatih)!
just a way to support vim-go's ongoing development directly. Thanks!
By being a patron, you are enabling vim-go to grow and mature, helping me to
invest in bug fixes, new documentation, and improving both current and future
features. It's completely optional and is just a direct way to support Vim-go's
ongoing development. Thanks!
[https://www.patreon.com/fatih](https://www.patreon.com/fatih) [https://www.patreon.com/fatih](https://www.patreon.com/fatih)

View File

@ -41,7 +41,11 @@ function! go#asmfmt#Format()
" Replace the current file with the temp file; then reload the buffer. " Replace the current file with the temp file; then reload the buffer.
let old_fileformat = &fileformat let old_fileformat = &fileformat
" save old file permissions
let original_fperm = getfperm(expand('%'))
call rename(l:tmpname, expand('%')) call rename(l:tmpname, expand('%'))
" restore old file permissions
call setfperm(expand('%'), original_fperm)
silent edit! silent edit!
let &fileformat = old_fileformat let &fileformat = old_fileformat
let &syntax = &syntax let &syntax = &syntax
@ -51,4 +55,15 @@ function! go#asmfmt#Format()
call winrestview(l:curw) call winrestview(l:curw)
endfunction endfunction
function! go#asmfmt#ToggleAsmFmtAutoSave()
if get(g:, "go_asmfmt_autosave", 1)
let g:go_asmfmt_autosave = 0
call go#util#EchoProgress("auto asmfmt disabled")
return
end
let g:go_asmfmt_autosave = 1
call go#util#EchoProgress("auto asmfmt enabled")
endfunction
" vim: sw=2 ts=2 et " vim: sw=2 ts=2 et

View File

@ -143,6 +143,8 @@ endfunction
" is given(which are passed directly to 'go install') it tries to install those " is given(which are passed directly to 'go install') it tries to install those
" packages. Errors are populated in the location window. " packages. Errors are populated in the location window.
function! go#cmd#Install(bang, ...) function! go#cmd#Install(bang, ...)
let old_gopath = $GOPATH
let $GOPATH = go#path#Detect()
let default_makeprg = &makeprg let default_makeprg = &makeprg
" :make expands '%' and '#' wildcards, so they must also be escaped " :make expands '%' and '#' wildcards, so they must also be escaped
@ -179,6 +181,7 @@ function! go#cmd#Install(bang, ...)
redraws! | echon "vim-go: " | echohl Function | echon "installed to ". $GOPATH | echohl None redraws! | echon "vim-go: " | echohl Function | echon "installed to ". $GOPATH | echohl None
endif endif
let $GOPATH = old_gopath
let &makeprg = default_makeprg let &makeprg = default_makeprg
endfunction endfunction

View File

@ -153,4 +153,16 @@ function! go#complete#Complete(findstart, base)
endif endif
endf endf
function! go#complete#ToggleAutoTypeInfo()
if get(g:, "go_auto_type_info", 0)
let g:go_auto_type_info = 0
call go#util#EchoProgress("auto type info disabled")
return
end
let g:go_auto_type_info = 1
call go#util#EchoProgress("auto type info enabled")
endfunction
" vim: sw=2 ts=2 et " vim: sw=2 ts=2 et

View File

@ -134,9 +134,9 @@ endfunction
" Generates matches to be added to matchaddpos for the given coverage profile " Generates matches to be added to matchaddpos for the given coverage profile
" block " block
function! go#coverage#genmatch(cov) function! go#coverage#genmatch(cov)
let color = 'covered' let color = 'goCoverageCovered'
if a:cov.cnt == 0 if a:cov.cnt == 0
let color = 'uncover' let color = 'goCoverageUncover'
endif endif
let matches = [] let matches = []
@ -195,12 +195,12 @@ function! go#coverage#overlay(file)
" contains matches for matchaddpos() " contains matches for matchaddpos()
let matches = [] let matches = []
" first mark all lines as normaltext. We use a custom group to not " first mark all lines as goCoverageNormalText. We use a custom group to not
" interfere with other buffers highlightings. Because the priority is " interfere with other buffers highlightings. Because the priority is
" lower than the cover and uncover matches, it'll be overriden. " lower than the cover and uncover matches, it'll be overriden.
let cnt = 1 let cnt = 1
while cnt <= line('$') while cnt <= line('$')
call add(matches, {'group': 'normaltext', 'pos': [cnt], 'priority': 1}) call add(matches, {'group': 'goCoverageNormalText', 'pos': [cnt], 'priority': 1})
let cnt += 1 let cnt += 1
endwhile endwhile
@ -234,9 +234,6 @@ function! go#coverage#overlay(file)
endfor endfor
syntax manual syntax manual
highlight normaltext term=bold ctermfg=darkgrey guifg=#75715E
highlight covered term=bold ctermfg=green guifg=#A6E22E
highlight uncover term=bold ctermfg=red guifg=#F92672
" clear the matches if we leave the buffer " clear the matches if we leave the buffer
autocmd BufWinLeave <buffer> call go#coverage#Clear() autocmd BufWinLeave <buffer> call go#coverage#Clear()

View File

@ -6,12 +6,6 @@ function! go#def#Jump(mode)
let $GOPATH = go#path#Detect() let $GOPATH = go#path#Detect()
let fname = fnamemodify(expand("%"), ':p:gs?\\?/?') let fname = fnamemodify(expand("%"), ':p:gs?\\?/?')
if &modified
" Write current unsaved buffer to a temp file and use the modified content
let l:tmpname = tempname()
call writefile(getline(1, '$'), l:tmpname)
let fname = l:tmpname
endif
" so guru right now is slow for some people. previously we were using " so guru right now is slow for some people. previously we were using
" godef which also has it's own quirks. But this issue come up so many " godef which also has it's own quirks. But this issue come up so many
@ -19,6 +13,13 @@ function! go#def#Jump(mode)
" covers all edge cases, but now anyone can switch to godef if they wish " covers all edge cases, but now anyone can switch to godef if they wish
let bin_name = get(g:, 'go_def_mode', 'guru') let bin_name = get(g:, 'go_def_mode', 'guru')
if bin_name == 'godef' if bin_name == 'godef'
if &modified
" Write current unsaved buffer to a temp file and use the modified content
let l:tmpname = tempname()
call writefile(getline(1, '$'), l:tmpname)
let fname = l:tmpname
endif
let bin_path = go#path#CheckBinPath("godef") let bin_path = go#path#CheckBinPath("godef")
if empty(bin_path) if empty(bin_path)
let $GOPATH = old_gopath let $GOPATH = old_gopath
@ -31,31 +32,45 @@ function! go#def#Jump(mode)
" jump_to_declaration() function can parse it. This makes it " jump_to_declaration() function can parse it. This makes it
" compatible with guru definition as well too " compatible with guru definition as well too
let out = join(split(out, '\n'), ':') let out = join(split(out, '\n'), ':')
if exists("l:tmpname")
call delete(l:tmpname)
endif
elseif bin_name == 'guru' elseif bin_name == 'guru'
let flags = ""
let in = ""
if &modified
let sep = go#util#LineEnding()
let content = join(getline(1, '$'), sep)
let in = fname . "\n" . strlen(content) . "\n" . content
let flags .= " -modified"
endif
let bin_path = go#path#CheckBinPath("guru") let bin_path = go#path#CheckBinPath("guru")
if empty(bin_path) if empty(bin_path)
let $GOPATH = old_gopath let $GOPATH = old_gopath
return return
endif endif
let flags = ""
if exists('g:go_guru_tags') if exists('g:go_guru_tags')
let tags = get(g:, 'go_guru_tags') let tags = get(g:, 'go_guru_tags')
let flags = printf(" -tags %s", tags) let flags .= printf(" -tags %s", tags)
endif endif
let fname = shellescape(fname.':#'.go#util#OffsetCursor()) let fname = shellescape(fname.':#'.go#util#OffsetCursor())
let command = printf("%s %s definition %s", bin_path, flags, fname) let command = printf("%s %s definition %s", bin_path, flags, fname)
if &modified
let out = go#util#System(command, in)
else
let out = go#util#System(command) let out = go#util#System(command)
endif
else else
call go#util#EchoError('go_def_mode value: '. bin_name .' is not valid. Valid values are: [godef, guru]') call go#util#EchoError('go_def_mode value: '. bin_name .' is not valid. Valid values are: [godef, guru]')
return return
endif endif
if exists("l:tmpname")
call delete(l:tmpname)
endif
if go#util#ShellError() != 0 if go#util#ShellError() != 0
call go#util#EchoError(out) call go#util#EchoError(out)
return return
@ -98,6 +113,8 @@ function! s:jump_to_declaration(out, mode)
" modes of switchbuf which we need based on the split mode " modes of switchbuf which we need based on the split mode
let old_switchbuf = &switchbuf let old_switchbuf = &switchbuf
let l:fname = fnamemodify(expand("%"), ':p:gs?\\?/?')
if filename != l:fname
" jump to existing buffer if, 1. we have enabled it, 2. the buffer is loaded " jump to existing buffer if, 1. we have enabled it, 2. the buffer is loaded
" and 3. there is buffer window number we switch to " and 3. there is buffer window number we switch to
if get(g:, 'go_def_reuse_buffer', 0) && bufloaded(filename) != 0 && bufwinnr(filename) != -1 if get(g:, 'go_def_reuse_buffer', 0) && bufloaded(filename) != 0 && bufwinnr(filename) != -1
@ -112,10 +129,13 @@ function! s:jump_to_declaration(out, mode)
split split
elseif a:mode == "vsplit" elseif a:mode == "vsplit"
vsplit vsplit
elseif &modified
split
endif endif
" open the file and jump to line and column " open the file and jump to line and column
exec 'edit '.filename exec 'edit '.filename
endif
call cursor(line, col) call cursor(line, col)
" also align the line to middle of the view " also align the line to middle of the view

View File

@ -124,7 +124,7 @@ function! go#fmt#Format(withGoimport)
if exists('b:goimports_vendor_compatible') && b:goimports_vendor_compatible if exists('b:goimports_vendor_compatible') && b:goimports_vendor_compatible
let ssl_save = &shellslash let ssl_save = &shellslash
set noshellslash set noshellslash
let command = command . '-srcdir ' . shellescape(expand("%:p:h")) let command = command . '-srcdir ' . shellescape(expand("%:p"))
let &shellslash = ssl_save let &shellslash = ssl_save
endif endif
endif endif
@ -149,7 +149,15 @@ function! go#fmt#Format(withGoimport)
" Replace current file with temp file, then reload buffer " Replace current file with temp file, then reload buffer
let old_fileformat = &fileformat let old_fileformat = &fileformat
if exists("*getfperm")
" save old file permissions
let original_fperm = getfperm(expand('%'))
endif
call rename(l:tmpname, expand('%')) call rename(l:tmpname, expand('%'))
" restore old file permissions
if exists("*setfperm") && original_fperm != ''
call setfperm(expand('%'), original_fperm)
endif
silent edit! silent edit!
let &fileformat = old_fileformat let &fileformat = old_fileformat
let &syntax = &syntax let &syntax = &syntax
@ -207,4 +215,14 @@ function! go#fmt#Format(withGoimport)
endif endif
endfunction endfunction
function! go#fmt#ToggleFmtAutoSave()
if get(g:, "go_fmt_autosave", 1)
let g:go_fmt_autosave = 0
call go#util#EchoProgress("auto fmt disabled")
return
end
let g:go_fmt_autosave = 1
call go#util#EchoProgress("auto fmt enabled")
endfunction
" vim: sw=2 ts=2 et " vim: sw=2 ts=2 et

View File

@ -1,5 +1,6 @@
" guru.vim -- Vim integration for the Go guru. " guru.vim -- Vim integration for the Go guru.
func! s:RunGuru(mode, format, selected, needs_scope) range abort func! s:RunGuru(mode, format, selected, needs_scope) range abort
"return with a warning if the binary doesn't exist "return with a warning if the binary doesn't exist
let bin_path = go#path#CheckBinPath("guru") let bin_path = go#path#CheckBinPath("guru")
@ -7,18 +8,6 @@ func! s:RunGuru(mode, format, selected, needs_scope) range abort
return {'err': "bin path not found"} return {'err': "bin path not found"}
endif endif
let filename = fnamemodify(expand("%"), ':p:gs?\\?/?')
if !filereadable(filename)
" this might happen for new buffers which are not written yet
return {'err': "file does not exist"}
endif
if &modified
" Write current unsaved buffer to a temp file and use the modified content
let l:tmpname = tempname()
call writefile(getline(1, '$'), l:tmpname)
let filename = l:tmpname
endif
let dirname = expand('%:p:h') let dirname = expand('%:p:h')
let pkg = go#package#ImportPath(dirname) let pkg = go#package#ImportPath(dirname)
@ -30,6 +19,15 @@ func! s:RunGuru(mode, format, selected, needs_scope) range abort
" start constructing the 'command' variable " start constructing the 'command' variable
let command = bin_path let command = bin_path
let filename = fnamemodify(expand("%"), ':p:gs?\\?/?')
let in = ""
if &modified
let sep = go#util#LineEnding()
let content = join(getline(1, '$'), sep )
let in = filename . "\n" . strlen(content) . "\n" . content
let command .= " -modified"
endif
" enable outputting in json format " enable outputting in json format
if a:format == "json" if a:format == "json"
let command .= " -json" let command .= " -json"
@ -72,8 +70,8 @@ func! s:RunGuru(mode, format, selected, needs_scope) range abort
let scopes = go#util#Shelllist(scopes) let scopes = go#util#Shelllist(scopes)
" guru expect a comma-separated list of patterns, construct it " guru expect a comma-separated list of patterns, construct it
let scope = join(scopes, ",") let l:scope = join(scopes, ",")
let command .= printf(" -scope %s", scope) let command .= printf(" -scope %s", l:scope)
endif endif
let pos = printf("#%s", go#util#OffsetCursor()) let pos = printf("#%s", go#util#OffsetCursor())
@ -91,16 +89,18 @@ func! s:RunGuru(mode, format, selected, needs_scope) range abort
let old_gopath = $GOPATH let old_gopath = $GOPATH
let $GOPATH = go#path#Detect() let $GOPATH = go#path#Detect()
if a:mode !=# 'what' if a:needs_scope
call go#util#EchoProgress("analysing with scope ". l:scope . " ...")
elseif a:mode !=# 'what'
" the query might take time, let us give some feedback " the query might take time, let us give some feedback
call go#util#EchoProgress("analysing ...") call go#util#EchoProgress("analysing ...")
endif endif
" run, forrest run!!! " run, forrest run!!!
if &modified
let out = go#util#System(command, in)
else
let out = go#util#System(command) let out = go#util#System(command)
if exists("l:tmpname")
call delete(l:tmpname)
endif endif
let $GOPATH = old_gopath let $GOPATH = old_gopath
@ -176,6 +176,23 @@ function! go#guru#Tags(...)
endif endif
endfunction endfunction
" Report the possible constants, global variables, and concrete types that may
" appear in a value of type error
function! go#guru#Whicherrs(selected)
let out = s:RunGuru('whicherrs', 'plain', a:selected, 1)
if has_key(out, 'err')
call go#util#EchoError(out.err)
return
endif
if empty(out.out)
call go#util#EchoSuccess("no error variables found. Try to change the scope with :GoGuruScope")
return
endif
call s:loclistSecond(out.out)
endfunction
" Show 'implements' relation for selected package " Show 'implements' relation for selected package
function! go#guru#Implements(selected) function! go#guru#Implements(selected)
let out = s:RunGuru('implements', 'plain', a:selected, 1) let out = s:RunGuru('implements', 'plain', a:selected, 1)
@ -271,16 +288,11 @@ function! go#guru#Referrers(selected)
endfunction endfunction
function! go#guru#What(selected) function! go#guru#What(selected)
" nvim doesn't have JSON support, though they work on it: " json_encode() and friends are introduced with this patch (7.4.1304)
" https://github.com/neovim/neovim/pull/4131 " vim: https://groups.google.com/d/msg/vim_dev/vLupTNhQhZ8/cDGIk0JEDgAJ
if has('nvim') " nvim: https://github.com/neovim/neovim/pull/4131
return {'err': "GoWhat is not supported in Neovim"} if !exists("*json_decode")
endif return {'err': "GoWhat is not supported due old version of Vim/Neovim"}
" json_encode() and friends are introduced with this patch
" https://groups.google.com/d/msg/vim_dev/vLupTNhQhZ8/cDGIk0JEDgAJ
if !has('patch-7.4.1304')
return {'err': "GoWhat is supported with Vim version 7.4-1304 or later"}
endif endif
let out = s:RunGuru('what', 'json', a:selected, 0) let out = s:RunGuru('what', 'json', a:selected, 0)
@ -297,10 +309,29 @@ function! go#guru#What(selected)
return result return result
endfunction endfunction
function! go#guru#SameIds(selected) function! go#guru#AutoToogleSameIds()
if get(g:, "go_auto_sameids", 0)
call go#util#EchoProgress("sameids auto highlighting disabled")
call go#guru#ClearSameIds() call go#guru#ClearSameIds()
let g:go_auto_sameids = 0
return
endif
call go#util#EchoSuccess("sameids auto highlighting enabled")
let g:go_auto_sameids = 1
endfunction
function! go#guru#SameIds(selected)
" we use matchaddpos() which was introduce with 7.4.330, be sure we have
" it: http://ftp.vim.org/vim/patches/7.4/7.4.330
if !exists("*matchaddpos")
call go#util#EchoError("GoSameIds is supported with Vim version 7.4-330 or later")
return
endif
let result = go#guru#What(a:selected) let result = go#guru#What(a:selected)
call go#guru#ClearSameIds() " run after calling guru to reduce flicker.
if has_key(result, 'err') && !get(g:, 'go_auto_sameids', 0) if has_key(result, 'err') && !get(g:, 'go_auto_sameids', 0)
" only echo if it's called via `:GoSameIds, but not if it's in automode " only echo if it's called via `:GoSameIds, but not if it's in automode
call go#util#EchoError(result.err) call go#util#EchoError(result.err)
@ -327,8 +358,6 @@ function! go#guru#SameIds(selected)
return return
endif endif
hi goSameId term=bold cterm=bold ctermbg=white ctermfg=black
let same_ids = result['sameids'] let same_ids = result['sameids']
" highlight the lines " highlight the lines
for item in same_ids for item in same_ids
@ -346,4 +375,12 @@ function! go#guru#ClearSameIds()
endfor endfor
endfunction endfunction
function! go#guru#ToggleSameIds(selected)
if len(getmatches()) != 0
call go#guru#ClearSameIds()
else
call go#guru#SameIds(a:selected)
endif
endfunction
" vim: sw=2 ts=2 et " vim: sw=2 ts=2 et

View File

@ -71,12 +71,12 @@ endif
function! s:root_dirs() function! s:root_dirs()
let dirs = [] let dirs = []
let root = go#util#GOROOT() let root = go#util#goroot()
if root !=# '' && isdirectory(root) if root !=# '' && isdirectory(root)
call add(dirs, root) call add(dirs, root)
endif endif
let paths = map(split(go#util#GOPATH(), go#util#PathListSep()), "substitute(v:val, '\\\\', '/', 'g')") let paths = map(split(go#util#gopath(), go#util#PathListSep()), "substitute(v:val, '\\\\', '/', 'g')")
if go#util#ShellError() if go#util#ShellError()
return [] return []
endif endif
@ -91,7 +91,7 @@ endfunction
function! s:go_packages(dirs) function! s:go_packages(dirs)
let pkgs = [] let pkgs = []
for d in a:dirs for d in a:dirs
let pkg_root = expand(d . '/pkg/' . go#util#OSARCH()) let pkg_root = expand(d . '/pkg/' . go#util#osarch())
call extend(pkgs, split(globpath(pkg_root, '**/*.a', 1), "\n")) call extend(pkgs, split(globpath(pkg_root, '**/*.a', 1), "\n"))
endfor endfor
return map(pkgs, "fnamemodify(v:val, ':t:r')") return map(pkgs, "fnamemodify(v:val, ':t:r')")

View File

@ -196,4 +196,15 @@ function! go#lint#Errcheck(...) abort
endfunction endfunction
function! go#lint#ToggleMetaLinterAutoSave()
if get(g:, "go_metalinter_autosave", 0)
let g:go_metalinter_autosave = 0
call go#util#EchoProgress("auto metalinter disabled")
return
end
let g:go_metalinter_autosave = 1
call go#util#EchoProgress("auto metalinter enabled")
endfunction
" vim: sw=2 ts=2 et " vim: sw=2 ts=2 et

View File

@ -33,7 +33,7 @@ function! go#package#Paths()
if !exists("s:goroot") if !exists("s:goroot")
if executable('go') if executable('go')
let s:goroot = substitute(go#util#System('go env GOROOT'), '\n', '', 'g') let s:goroot = go#util#goroot()
if go#util#ShellError() != 0 if go#util#ShellError() != 0
echomsg '''go env GOROOT'' failed' echomsg '''go env GOROOT'' failed'
endif endif

View File

@ -14,7 +14,7 @@ function! go#template#create()
if l:package_name == -1 if l:package_name == -1
let l:template_file = get(g:, 'go_template_file', "hello_world.go") let l:template_file = get(g:, 'go_template_file', "hello_world.go")
let l:template_path = go#util#Join(l:root_dir, "templates", l:template_file) let l:template_path = go#util#Join(l:root_dir, "templates", l:template_file)
exe '0r ' . l:template_path exe '0r ' . fnameescape(l:template_path)
$delete _ $delete _
else else
let l:content = printf("package %s", l:package_name) let l:content = printf("package %s", l:package_name)
@ -28,4 +28,15 @@ function! go#template#create()
execute cd . fnameescape(dir) execute cd . fnameescape(dir)
endfunction endfunction
function! go#template#ToggleAutoCreate()
if get(g:, "go_template_autocreate", 1)
let g:go_template_autocreate = 0
call go#util#EchoProgress("auto template create disabled")
return
end
let g:go_template_autocreate = 1
call go#util#EchoProgress("auto template create enabled")
endfunction
" vim: sw=2 ts=2 et " vim: sw=2 ts=2 et

View File

@ -44,7 +44,7 @@ function! go#tool#Imports()
endfunction endfunction
function! go#tool#PackageName() function! go#tool#PackageName()
let command = "go list -f '{{.Name}}'" let command = "go list -f \"{{.Name}}\""
let out = go#tool#ExecuteInDir(command) let out = go#tool#ExecuteInDir(command)
if go#util#ShellError() != 0 if go#util#ShellError() != 0
return -1 return -1

View File

@ -43,27 +43,26 @@ function! go#util#IsWin()
return 0 return 0
endfunction endfunction
function! go#util#GOARCH() function! go#util#goarch()
return substitute(go#util#System('go env GOARCH'), '\n', '', 'g') return substitute(go#util#System('go env GOARCH'), '\n', '', 'g')
endfunction endfunction
function! go#util#GOOS() function! go#util#goos()
return substitute(go#util#System('go env GOOS'), '\n', '', 'g') return substitute(go#util#System('go env GOOS'), '\n', '', 'g')
endfunction endfunction
function! go#util#GOROOT() function! go#util#goroot()
return substitute(go#util#System('go env GOROOT'), '\n', '', 'g') return substitute(go#util#System('go env GOROOT'), '\n', '', 'g')
endfunction endfunction
function! go#util#GOPATH() function! go#util#gopath()
return substitute(go#util#System('go env GOPATH'), '\n', '', 'g') return substitute(go#util#System('go env GOPATH'), '\n', '', 'g')
endfunction endfunction
function! go#util#OSARCH() function! go#util#osarch()
return go#util#GOOS() . '_' . go#util#GOARCH() return go#util#goos() . '_' . go#util#goarch()
endfunction endfunction
"Check if has vimproc "Check if has vimproc
function! s:has_vimproc() function! s:has_vimproc()
if !exists('g:go#use_vimproc') if !exists('g:go#use_vimproc')
@ -92,8 +91,20 @@ else
let s:vim_shell_error = '' let s:vim_shell_error = ''
endif endif
" System runs a shell command. It will reset the shell to /bin/sh for Unix-like
" systems if it is executable.
function! go#util#System(str, ...) function! go#util#System(str, ...)
return call(s:vim_system, [a:str] + a:000) let l:shell = &shell
if !go#util#IsWin() && executable('/bin/sh')
let &shell = '/bin/sh'
endif
try
let l:output = call(s:vim_system, [a:str] + a:000)
return l:output
finally
let &shell = l:shell
endtry
endfunction endfunction
function! go#util#ShellError() function! go#util#ShellError()
@ -228,24 +239,68 @@ function! go#util#camelcase(word)
endif endif
endfunction endfunction
function! go#util#AddTags(line1, line2, ...)
" default is json
let l:keys = ["json"]
if a:0
let l:keys = a:000
endif
let l:line1 = a:line1
let l:line2 = a:line2
" If we're inside a struct and just call this function let us add the tags
" to all fields
" TODO(arslan): I don't like using patterns. Check if we can move it to
" `motion` and do it via AST based position
let ln1 = searchpair('struct {', '', '}', 'bcnW')
if ln1 == 0
echon "vim-go: " | echohl ErrorMsg | echon "cursor is outside the struct" | echohl None
return
endif
" searchpair only returns a single position
let ln2 = search('}', "cnW")
" if no range is given we apply for the whole struct
if l:line1 == l:line2
let l:line1 = ln1 + 1
let l:line2 = ln2 - 1
endif
for line in range(l:line1, l:line2)
" get the field name (word) that are not part of a commented line
let l:matched = matchstr(getline(line), '\(\/\/.*\)\@<!\w\+')
if empty(l:matched)
continue
endif
let word = go#util#snippetcase(l:matched)
let tags = map(copy(l:keys), 'printf("%s:%s", v:val,"\"'. word .'\"")')
let updated_line = printf("%s `%s`", getline(line), join(tags, " "))
" finally, update the line inplace
call setline(line, updated_line)
endfor
endfunction
" TODO(arslan): I couldn't parameterize the highlight types. Check if we can " TODO(arslan): I couldn't parameterize the highlight types. Check if we can
" simplify the following functions " simplify the following functions
function! go#util#EchoSuccess(msg) function! go#util#EchoSuccess(msg)
redraws! | echon "vim-go: " | echohl Function | echon a:msg | echohl None redraw | echon "vim-go: " | echohl Function | echon a:msg | echohl None
endfunction endfunction
function! go#util#EchoError(msg) function! go#util#EchoError(msg)
redraws! | echon "vim-go: " | echohl ErrorMsg | echon a:msg | echohl None redraw | echon "vim-go: " | echohl ErrorMsg | echon a:msg | echohl None
endfunction endfunction
function! go#util#EchoWarning(msg) function! go#util#EchoWarning(msg)
redraws! | echon "vim-go: " | echohl WarningMsg | echon a:msg | echohl None redraw | echon "vim-go: " | echohl WarningMsg | echon a:msg | echohl None
endfunction endfunction
function! go#util#EchoProgress(msg) function! go#util#EchoProgress(msg)
redraws! | echon "vim-go: " | echohl Identifier | echon a:msg | echohl None redraw | echon "vim-go: " | echohl Identifier | echon a:msg | echohl None
endfunction endfunction
" vim: sw=2 ts=2 et " vim: sw=2 ts=2 et

File diff suppressed because it is too large Load Diff

View File

@ -4,6 +4,7 @@ command! -nargs=? GoRename call go#rename#Rename(<bang>0,<f-args>)
" -- guru " -- guru
command! -nargs=* -complete=customlist,go#package#Complete GoGuruScope call go#guru#Scope(<f-args>) command! -nargs=* -complete=customlist,go#package#Complete GoGuruScope call go#guru#Scope(<f-args>)
command! -range=% GoImplements call go#guru#Implements(<count>) command! -range=% GoImplements call go#guru#Implements(<count>)
command! -range=% GoWhicherrs call go#guru#Whicherrs(<count>)
command! -range=% GoCallees call go#guru#Callees(<count>) command! -range=% GoCallees call go#guru#Callees(<count>)
command! -range=% GoDescribe call go#guru#Describe(<count>) command! -range=% GoDescribe call go#guru#Describe(<count>)
command! -range=% GoCallers call go#guru#Callers(<count>) command! -range=% GoCallers call go#guru#Callers(<count>)
@ -12,13 +13,20 @@ command! -range=% GoFreevars call go#guru#Freevars(<count>)
command! -range=% GoChannelPeers call go#guru#ChannelPeers(<count>) command! -range=% GoChannelPeers call go#guru#ChannelPeers(<count>)
command! -range=% GoReferrers call go#guru#Referrers(<count>) command! -range=% GoReferrers call go#guru#Referrers(<count>)
command! -nargs=? GoGuruTags call go#guru#Tags(<f-args>) command! -nargs=? GoGuruTags call go#guru#Tags(<f-args>)
command! -nargs=* -range GoAddTags call go#util#AddTags(<line1>, <line2>, <f-args>)
command! -range=% GoSameIds call go#guru#SameIds(<count>) command! -range=% GoSameIds call go#guru#SameIds(<count>)
command! -range=0 GoSameIdsClear call go#guru#ClearSameIds() command! -range=0 GoSameIdsClear call go#guru#ClearSameIds()
command! -range=% GoSameIdsToggle call go#guru#ToggleSameIds(<count>)
command! -range=0 GoSameIdsAutoToggle call go#guru#AutoToogleSameIds()
" -- tool " -- tool
command! -nargs=0 GoFiles echo go#tool#Files() command! -nargs=0 GoFiles echo go#tool#Files()
command! -nargs=0 GoDeps echo go#tool#Deps() command! -nargs=0 GoDeps echo go#tool#Deps()
command! -nargs=* GoInfo call go#complete#Info(0) command! -nargs=* GoInfo call go#complete#Info(0)
command! -nargs=0 GoAutoTypeInfoToggle call go#complete#ToggleAutoTypeInfo()
" -- cmd " -- cmd
command! -nargs=* -bang GoBuild call go#cmd#Build(<bang>0,<f-args>) command! -nargs=* -bang GoBuild call go#cmd#Build(<bang>0,<f-args>)
@ -50,8 +58,12 @@ command! -nargs=* -range -complete=customlist,go#package#Complete GoDocBrowser c
" -- fmt " -- fmt
command! -nargs=0 GoFmt call go#fmt#Format(-1) command! -nargs=0 GoFmt call go#fmt#Format(-1)
command! -nargs=0 GoFmtAutoSaveToggle call go#fmt#ToggleFmtAutoSave()
command! -nargs=0 GoImports call go#fmt#Format(1) command! -nargs=0 GoImports call go#fmt#Format(1)
" -- asmfmt
command! -nargs=0 GoAsmFmtAutoSaveToggle call go#asmfmt#ToggleAsmFmtAutoSave()
" -- import " -- import
command! -nargs=? -complete=customlist,go#package#Complete GoDrop call go#import#SwitchImport(0, '', <f-args>, '') command! -nargs=? -complete=customlist,go#package#Complete GoDrop call go#import#SwitchImport(0, '', <f-args>, '')
command! -nargs=1 -bang -complete=customlist,go#package#Complete GoImport call go#import#SwitchImport(1, '', <f-args>, '<bang>') command! -nargs=1 -bang -complete=customlist,go#package#Complete GoImport call go#import#SwitchImport(1, '', <f-args>, '<bang>')
@ -59,6 +71,7 @@ command! -nargs=* -bang -complete=customlist,go#package#Complete GoImportAs call
" -- linters " -- linters
command! -nargs=* GoMetaLinter call go#lint#Gometa(0, <f-args>) command! -nargs=* GoMetaLinter call go#lint#Gometa(0, <f-args>)
command! -nargs=0 GoMetalinterAutoSaveToggle call go#lint#ToggleMetaLinterAutoSave()
command! -nargs=* GoLint call go#lint#Golint(<f-args>) command! -nargs=* GoLint call go#lint#Golint(<f-args>)
command! -nargs=* -bang GoVet call go#lint#Vet(<bang>0, <f-args>) command! -nargs=* -bang GoVet call go#lint#Vet(<bang>0, <f-args>)
command! -nargs=* -complete=customlist,go#package#Complete GoErrCheck call go#lint#Errcheck(<f-args>) command! -nargs=* -complete=customlist,go#package#Complete GoErrCheck call go#lint#Errcheck(<f-args>)
@ -75,4 +88,7 @@ endif
" -- impl " -- impl
command! -nargs=* -buffer -complete=customlist,go#impl#Complete GoImpl call go#impl#Impl(<f-args>) command! -nargs=* -buffer -complete=customlist,go#impl#Complete GoImpl call go#impl#Impl(<f-args>)
" -- template
command! -nargs=0 GoTemplateAutoCreateToggle call go#template#ToggleAutoCreate()
" vim: sw=2 ts=2 et " vim: sw=2 ts=2 et

View File

@ -44,6 +44,8 @@ xnoremap <silent> <Plug>(go-freevars) :<C-u>call go#guru#Freevars(0)<CR>
nnoremap <silent> <Plug>(go-channelpeers) :<C-u>call go#guru#ChannelPeers(-1)<CR> nnoremap <silent> <Plug>(go-channelpeers) :<C-u>call go#guru#ChannelPeers(-1)<CR>
nnoremap <silent> <Plug>(go-referrers) :<C-u>call go#guru#Referrers(-1)<CR> nnoremap <silent> <Plug>(go-referrers) :<C-u>call go#guru#Referrers(-1)<CR>
nnoremap <silent> <Plug>(go-sameids) :<C-u>call go#guru#SameIds(-1)<CR> nnoremap <silent> <Plug>(go-sameids) :<C-u>call go#guru#SameIds(-1)<CR>
nnoremap <silent> <Plug>(go-whicherrs) :<C-u>call go#guru#Whicherrs(-1)<CR>
nnoremap <silent> <Plug>(go-sameids-toggle) :<C-u>call go#guru#ToggleSameIds(-1)<CR>
nnoremap <silent> <Plug>(go-rename) :<C-u>call go#rename#Rename(!g:go_jump_to_error)<CR> nnoremap <silent> <Plug>(go-rename) :<C-u>call go#rename#Rename(!g:go_jump_to_error)<CR>

View File

@ -189,6 +189,11 @@ snippet json "\`json:key\`"
\`json:"${1:`!v go#util#snippetcase(matchstr(getline("."), '\w\+'))`}"\` \`json:"${1:`!v go#util#snippetcase(matchstr(getline("."), '\w\+'))`}"\`
endsnippet endsnippet
# yaml field tag
snippet yaml "\`yaml:key\`"
\`yaml:"${1:`!v go#util#snippetcase(matchstr(getline("."), '\w\+'))`}"\`
endsnippet
# fallthrough # fallthrough
snippet ft "fallthrough" snippet ft "fallthrough"
fallthrough fallthrough

View File

@ -162,6 +162,11 @@ snippet json
abbr \`json:key\` abbr \`json:key\`
\`json:"${1:keyName}"\` \`json:"${1:keyName}"\`
# yaml snippet
snippet yaml
abbr \`yaml:key\`
\`yaml:"${1:keyName}"\`
# fallthrough # fallthrough
snippet ft snippet ft
abbr fallthrough abbr fallthrough

View File

@ -27,7 +27,6 @@ command! GoInstallBinaries call s:GoInstallBinaries(-1)
command! GoUpdateBinaries call s:GoInstallBinaries(1) command! GoUpdateBinaries call s:GoInstallBinaries(1)
command! -nargs=? -complete=dir GoPath call go#path#GoPath(<f-args>) command! -nargs=? -complete=dir GoPath call go#path#GoPath(<f-args>)
" GoInstallBinaries downloads and install all necessary binaries stated in the " GoInstallBinaries downloads and install all necessary binaries stated in the
" packages variable. It uses by default $GOBIN or $GOPATH/bin as the binary " packages variable. It uses by default $GOBIN or $GOPATH/bin as the binary
" target install directory. GoInstallBinaries doesn't install binaries if they " target install directory. GoInstallBinaries doesn't install binaries if they
@ -143,44 +142,64 @@ function! s:echo_go_info()
redraws! | echo "vim-go: " | echohl Function | echon item.info | echohl None redraws! | echo "vim-go: " | echohl Function | echon item.info | echohl None
endfunction endfunction
function! s:auto_type_info()
" GoInfo automatic update
if get(g:, "go_auto_type_info", 0)
call go#complete#Info(1)
endif
endfunction
function! s:auto_sameids()
" GoSameId automatic update
if get(g:, "go_auto_sameids", 0)
call go#guru#SameIds(-1)
endif
endfunction
function! s:fmt_autosave()
" Go code formatting on save
if get(g:, "go_fmt_autosave", 1)
call go#fmt#Format(-1)
endif
endfunction
function! s:asmfmt_autosave()
" Go asm formatting on save
if get(g:, "go_asmfmt_autosave", 1)
call go#asmfmt#Format()
endif
endfunction
function! s:metalinter_autosave()
" run gometalinter on save
if get(g:, "go_metalinter_autosave", 0)
call go#lint#Gometa(1)
endif
endfunction
function! s:template_autocreate()
" create new template from scratch
if get(g:, "go_template_autocreate", 1)
call go#template#create()
endif
endfunction
augroup vim-go augroup vim-go
autocmd! autocmd!
" GoInfo automatic update autocmd CursorHold *.go call s:auto_type_info()
if get(g:, "go_auto_type_info", 0) autocmd CursorHold *.go call s:auto_sameids()
autocmd CursorHold *.go nested call go#complete#Info(1)
endif
" GoSameId automatic update
if get(g:, "go_auto_sameids", 0)
autocmd CursorMoved *.go nested call go#guru#SameIds(-1)
endif
" Echo the identifier information when completion is done. Useful to see " Echo the identifier information when completion is done. Useful to see
" the signature of a function, etc... " the signature of a function, etc...
if exists('##CompleteDone') if exists('##CompleteDone')
autocmd CompleteDone *.go nested call s:echo_go_info() autocmd CompleteDone *.go call s:echo_go_info()
endif endif
" Go code formatting on save autocmd BufWritePre *.go call s:fmt_autosave()
if get(g:, "go_fmt_autosave", 1) autocmd BufWritePre *.s call s:asmfmt_autosave()
autocmd BufWritePre *.go call go#fmt#Format(-1) autocmd BufWritePost *.go call s:metalinter_autosave()
endif autocmd BufNewFile *.go call s:template_autocreate()
" Go asm formatting on save
if get(g:, "go_asmfmt_autosave", 1)
autocmd BufWritePre *.s call go#asmfmt#Format()
endif
" run gometalinter on save
if get(g:, "go_metalinter_autosave", 0)
autocmd BufWritePost *.go call go#lint#Gometa(1)
endif
" create new template from scratch
if get(g:, "go_template_autocreate", 1)
autocmd BufNewFile *.go call go#template#create()
endif
augroup END augroup END
" vim: sw=2 ts=2 et " vim: sw=2 ts=2 et

View File

@ -271,6 +271,7 @@ hi def link goSpaceError Error
syn keyword goTodo contained NOTE syn keyword goTodo contained NOTE
hi def link goTodo Todo hi def link goTodo Todo
syn match goVarArgs /\.\.\./
" Operators; " Operators;
if g:go_highlight_operators != 0 if g:go_highlight_operators != 0
@ -285,9 +286,9 @@ if g:go_highlight_operators != 0
" match remaining two-char operators: := && || <- ++ -- " match remaining two-char operators: := && || <- ++ --
syn match goOperator /:=\|||\|<-\|++\|--/ syn match goOperator /:=\|||\|<-\|++\|--/
" match ... " match ...
syn match goOperator /\.\.\./
hi def link goPointerOperator Operator hi def link goPointerOperator goOperator
hi def link goVarArgs goOperator
endif endif
hi def link goOperator Operator hi def link goOperator Operator
@ -306,14 +307,13 @@ hi def link goFunction Function
" Methods; " Methods;
if g:go_highlight_methods != 0 if g:go_highlight_methods != 0
syn match goMethod /\.\w\+(/hs=s+1,he=e-1 syn match goMethod /\.\w\+\ze(/hs=s+1
endif endif
hi def link goMethod Type hi def link goMethod Type
" Fields; " Fields;
if g:go_highlight_fields != 0 if g:go_highlight_fields != 0
syn match goVarArgs /\.\.\.\w\+\>/ syn match goField /\.\w\+\([\ \n\r\:\)\[,]\)\@=/hs=s+1
syn match goField /\.\a\+\([\ \n\r\:\)\[]\)\@=/hs=s+1
endif endif
hi def link goField Identifier hi def link goField Identifier
@ -366,7 +366,13 @@ if g:go_highlight_build_constraints != 0
hi def link goPackageComment Comment hi def link goPackageComment Comment
endif endif
hi def link goSameId IncSearch " :GoSameIds
hi def goSameId term=bold cterm=bold ctermbg=white ctermfg=black
" :GoCoverage commands
hi def link goCoverageNormalText Comment
hi def goCoverageCovered ctermfg=green guifg=#A6E22E
hi def goCoverageUncover ctermfg=red guifg=#F92672
" Search backwards for a global declaration to start processing the syntax. " Search backwards for a global declaration to start processing the syntax.
"syn sync match goSync grouphere NONE /^\(const\|var\|type\|func\)\>/ "syn sync match goSync grouphere NONE /^\(const\|var\|type\|func\)\>/

View File

@ -127,7 +127,6 @@ endsnippet
############# #############
snippet input "Input with Label" w snippet input "Input with Label" w
<label for="${2:${1/[[:alpha:]]+|( )/(?1:_:\L$0)/g}}">$1</label><input type="${3:text/submit/hidden/button}" name="${4:$2}" value="$5"${6: id="${7:$2}"}`!p x(snip)`> <label for="${2:${1/[[:alpha:]]+|( )/(?1:_:\L$0)/g}}">$1</label><input type="${3:text/submit/hidden/button}" name="${4:$2}" value="$5"${6: id="${7:$2}"}`!p x(snip)`>
endsnippet endsnippet
snippet input "XHTML <input>" w snippet input "XHTML <input>" w
@ -141,9 +140,7 @@ endsnippet
snippet select "Select Box" w snippet select "Select Box" w
<select name="${1:some_name}" id="${2:$1}"${3:${4: multiple}${5: onchange="${6:}"}${7: size="${8:1}"}}> <select name="${1:some_name}" id="${2:$1}"${3:${4: multiple}${5: onchange="${6:}"}${7: size="${8:1}"}}>
<option${9: value="${10:option1}"}>${11:$10}</option> ${0:${VISUAL}}
<option${12: value="${13:option2}"}>${14:$13}</option>${15:}
$0
</select> </select>
endsnippet endsnippet
@ -162,25 +159,25 @@ endsnippet
snippet body "<body>" snippet body "<body>"
<body> <body>
$0 ${0:${VISUAL}}
</body> </body>
endsnippet endsnippet
snippet div "<div>" w snippet div "<div>" w
<div> <div>
$0 ${0:${VISUAL}}
</div> </div>
endsnippet endsnippet
snippet div. "<div> with class" w snippet div. "<div> with class" w
<div`!p snip.rv=' class="' if t[1] else ""`${1:name}`!p snip.rv = '"' if t[1] else ""`> <div`!p snip.rv=' class="' if t[1] else ""`${1:name}`!p snip.rv = '"' if t[1] else ""`>
$0 ${0:${VISUAL}}
</div> </div>
endsnippet endsnippet
snippet div# "<div> with ID & class" w snippet div# "<div> with ID & class" w
<div`!p snip.rv=' id="' if t[1] else ""`${1:name}`!p snip.rv = '"' if t[1] else ""``!p snip.rv=' class="' if t[2] else ""`${2:name}`!p snip.rv = '"' if t[2] else ""`> <div`!p snip.rv=' id="' if t[1] else ""`${1:name}`!p snip.rv = '"' if t[1] else ""``!p snip.rv=' class="' if t[2] else ""`${2:name}`!p snip.rv = '"' if t[2] else ""`>
$0 ${0:${VISUAL}}
</div> </div>
endsnippet endsnippet
@ -188,33 +185,39 @@ snippet form "XHTML <form>" w
<form action="${1:`!p <form action="${1:`!p
snip.rv = (snip.basename or 'unnamed') + '_submit' snip.rv = (snip.basename or 'unnamed') + '_submit'
`}" method="${2:get}" accept-charset="utf-8"> `}" method="${2:get}" accept-charset="utf-8">
$0 ${0:${VISUAL}}
<p><input type="submit" value="Continue →"`!p x(snip)`></p>
</form> </form>
endsnippet endsnippet
snippet h1 "XHTML <h1>" w snippet h1 "XHTML <h1>" w
<h1>$0</h1> <h1>${0:${VISUAL}}</h1>
endsnippet endsnippet
snippet h2 "XHTML <h2>" w snippet h2 "XHTML <h2>" w
<h2>$0</h2> <h2>${0:${VISUAL}}</h2>
endsnippet endsnippet
snippet h3 "XHTML <h3>" w snippet h3 "XHTML <h3>" w
<h3>$0</h3> <h3>${0:${VISUAL}}</h3>
endsnippet endsnippet
snippet h4 "XHTML <h4>" w snippet h4 "XHTML <h4>" w
<h4>$0</h4> <h4>${0:${VISUAL}}</h4>
endsnippet
snippet h5 "XHTML <h5>" w
<h5>${0:${VISUAL}}</h5>
endsnippet
snippet h6 "XHTML <h6>" w
<h6>${0:${VISUAL}}</h6>
endsnippet endsnippet
snippet head "XHTML <head>" snippet head "XHTML <head>"
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>${1:`!p snip.rv = snip.basename or "Page Title"`}</title> <title>${1:`!p snip.rv = snip.basename or "Page Title"`}</title>
$0 ${0:${VISUAL}}
</head> </head>
endsnippet endsnippet
@ -232,20 +235,19 @@ endsnippet
snippet script "XHTML <script>" w snippet script "XHTML <script>" w
<script type="text/javascript" charset="utf-8"> <script type="text/javascript" charset="utf-8">
$0 ${0:${VISUAL}}
</script> </script>
endsnippet endsnippet
snippet style "XHTML <style>" w snippet style "XHTML <style>" w
<style type="text/css" media="screen"> <style type="text/css" media="screen">
$0 ${0:${VISUAL}}
</style> </style>
endsnippet endsnippet
snippet table "XHTML <table>" w snippet table "XHTML <table>" w
<table border="${1:0}"${2: cellspacing="${3:5}" cellpadding="${4:5}"}> <table border="${1:0}"${2: cellspacing="${3:5}" cellpadding="${4:5}"}>
<tr><th>${5:Header}</th></tr> ${0:${VISUAL}}
<tr><td>${0:Data}</td></tr>
</table> </table>
endsnippet endsnippet
@ -254,29 +256,29 @@ snippet a "Link" w
endsnippet endsnippet
snippet p "paragraph" w snippet p "paragraph" w
<p>$0</p> <p>${0:${VISUAL}}</p>
endsnippet endsnippet
snippet li "list item" w snippet li "list item" w
<li>$0</li> <li>${0:${VISUAL}}</li>
endsnippet endsnippet
snippet ul "unordered list" w snippet ul "unordered list" w
<ul> <ul>
$0 ${0:${VISUAL}}
</ul> </ul>
endsnippet endsnippet
snippet td "table cell" w snippet td "table cell" w
<td>$0</td> <td>${0:${VISUAL}}</td>
endsnippet endsnippet
snippet th "table header" w snippet th "table header" w
<th>$0</th> <th>${0:${VISUAL}}</th>
endsnippet endsnippet
snippet tr "table row" w snippet tr "table row" w
<tr>$0</tr> <tr>${0:${VISUAL}}</tr>
endsnippet endsnippet
snippet title "XHTML <title>" w snippet title "XHTML <title>" w
@ -286,7 +288,7 @@ endsnippet
snippet fieldset "Fieldset" w snippet fieldset "Fieldset" w
<fieldset id="${1/[\w\d]+|( )/(?1:_:\L$0\E)/g}" ${2:class="${3:}"}> <fieldset id="${1/[\w\d]+|( )/(?1:_:\L$0\E)/g}" ${2:class="${3:}"}>
<legend>$1</legend> <legend>$1</legend>
$0 ${0:${VISUAL}}
</fieldset> </fieldset>
endsnippet endsnippet

View File

@ -105,13 +105,17 @@ snippet imp
snippet ali snippet ali
alias ${0:module_name} alias ${0:module_name}
snippet test snippet test
test "${1:test_name}" do test "${1:test name}" do
${0} ${0}
end end
snippet testa snippet testa
test "${1:test_name}", %{${2:arg: arg}} do test "${1:test_name}", %{${2:arg: arg}} do
${0} ${0}
end end
snippet des
describe "${1:test group subject}" do
${0}
end
snippet exunit snippet exunit
defmodule ${1:`substitute(vim_snippets#Filename(), '\(_\|^\)\(.\)', '\u\2', 'g')`} do defmodule ${1:`substitute(vim_snippets#Filename(), '\(_\|^\)\(.\)', '\u\2', 'g')`} do
use ExUnit.Case, async: true use ExUnit.Case, async: true

View File

@ -171,6 +171,9 @@ snippet pn
# print # print
snippet pr snippet pr
fmt.Printf("%${1:s}\n", ${2:var}) fmt.Printf("%${1:s}\n", ${2:var})
# println
snippet pl
fmt.Println("${1:s}")
# range # range
snippet rn snippet rn
range ${0} range ${0}

View File

@ -30,6 +30,11 @@ snippet (f
(function(${1}) { (function(${1}) {
${0} ${0}
}(${2})); }(${2}));
# Minify safe iife
snippet ;fe
;(function(${1}) {
${0}
}(${2}))
# self-defining function # self-defining function
snippet sdf snippet sdf
var ${1:function_name} = function (${2:argument}) { var ${1:function_name} = function (${2:argument}) {

View File

@ -0,0 +1,127 @@
#
## Libraries
snippet lib
library ${1}
use ${1}.${2}
# Standard Libraries
snippet libs
library IEEE;
use IEEE.std_logic_1164.ALL;
use IEEE.numeric_std.ALL;
# Xilinx Library
snippet libx
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
## Entity Declaration
snippet ent
entity ${1:`vim_snippets#Filename()`} is
generic (
${2}
);
port (
${3}
);
end entity $1;
## Architecture
snippet arc
architecture ${1:behav} of ${2:`vim_snippets#Filename()`} is
${3}
begin
end $1;
## Declarations
# std_logic
snippet st
signal ${1} : std_logic;
# std_logic_vector
snippet sv
signal ${1} : std_logic_vector (${2} downto 0);
# std_logic in
snippet ist
${1} : in std_logic;
# std_logic_vector in
snippet isv
${1} : in std_logic_vector (${2} downto 0);
# std_logic out
snippet ost
${1} : out std_logic;
# std_logic_vector out
snippet osv
${1} : out std_logic_vector (${2} downto 0);
# unsigned
snippet un
signal ${1} : unsigned (${2} downto 0);
## Process Statements
# process
snippet pr
process (${1})
begin
${2}
end process;
# process with clock
snippet prc
process (${1:clk})
begin
if rising_edge ($1) then
${2}
end if;
end process;
# process all
snippet pra
process (${1:all})
begin
${2}
end process;
## Control Statements
# if
snippet if
if ${1} then
${2}
end if;
# if
snippet ife
if ${1} then
${2}
else
${3}
end if;
# else
snippet el
else
${1}
# if
snippet eif
elsif ${1} then
${2}
# case
snippet ca
case ${1} is
${2}
end case;
# when
snippet wh
when ${1} =>
${2}
# for
snippet for
for ${1:i} in ${2} ${3:to} ${4} loop
${5}
end loop;
# while
snippet wh
while ${1} loop
${2}
end loop;
## Misc
# others
snippet oth
(others => '${1:0}');