mirror of
				https://github.com/amix/vimrc
				synced 2025-10-31 06:33:35 +08:00 
			
		
		
		
	Updated vim plugins
This commit is contained in:
		| @ -98,6 +98,7 @@ let [s:pref, s:bpref, s:opts, s:new_opts, s:lc_opts] = | ||||
| 	\ 'bufname_mod':           ['s:bufname_mod', ':t'], | ||||
| 	\ 'bufpath_mod':           ['s:bufpath_mod', ':~:.:h'], | ||||
| 	\ 'formatline_func':       ['s:flfunc', 's:formatline(v:val)'], | ||||
| 	\ 'user_command_async':    ['s:usrcmdasync', 0], | ||||
| 	\ }, { | ||||
| 	\ 'open_multiple_files':   's:opmul', | ||||
| 	\ 'regexp':                's:regexp', | ||||
| @ -212,11 +213,13 @@ el | ||||
| en | ||||
| let g:ctrlp_builtins = len(g:ctrlp_types)-1 | ||||
|  | ||||
| let s:coretypes = filter([ | ||||
| 	\ ['files', 'fil'], | ||||
| 	\ ['buffers', 'buf'], | ||||
| 	\ ['mru files', 'mru'], | ||||
| \ ], 'index(g:ctrlp_types, v:val[1])!=-1') | ||||
| let s:coretype_names = { | ||||
| 	\ 'fil' : 'files', | ||||
| 	\ 'buf' : 'buffers', | ||||
| 	\ 'mru' : 'mru files', | ||||
| 	\ } | ||||
|  | ||||
| let s:coretypes = map(copy(g:ctrlp_types), '[s:coretype_names[v:val], v:val]') | ||||
|  | ||||
| " Get the options {{{2 | ||||
| fu! s:opts(...) | ||||
| @ -326,11 +329,11 @@ fu! s:Open() | ||||
| 	cal s:setupblank() | ||||
| endf | ||||
|  | ||||
| fu! s:Close(exit) | ||||
| fu! s:Close() | ||||
| 	cal s:buffunc(0) | ||||
| 	if winnr('$') == 1 | ||||
| 		bw! | ||||
| 	elsei a:exit | ||||
| 	el | ||||
| 		try | bun! | ||||
| 		cat | clo! | endt | ||||
| 		cal s:unmarksigns() | ||||
| @ -431,6 +434,11 @@ fu! s:GlobPath(dirs, depth) | ||||
| 	en | ||||
| endf | ||||
|  | ||||
| fu! ctrlp#addfile(ch, file) | ||||
| 	call add(g:ctrlp_allfiles, a:file) | ||||
| 	cal s:BuildPrompt(1) | ||||
| endf | ||||
|  | ||||
| fu! s:UserCmd(lscmd) | ||||
| 	let [path, lscmd] = [s:dyncwd, a:lscmd] | ||||
| 	let do_ign = | ||||
| @ -446,7 +454,13 @@ fu! s:UserCmd(lscmd) | ||||
| 	if (has('win32') || has('win64')) && match(&shell, 'sh') != -1 | ||||
| 		let path = tr(path, '\', '/') | ||||
| 	en | ||||
| 	if has('patch-7.4-597') && !(has('win32') || has('win64')) | ||||
| 	if s:usrcmdasync && v:version >= 800 && exists('*job_start') | ||||
| 		if exists('s:job') | ||||
| 			call job_stop(s:job) | ||||
| 		en | ||||
| 		let g:ctrlp_allfiles = [] | ||||
| 		let s:job = job_start([&shell, &shellcmdflag, printf(lscmd, path)], {'callback': 'ctrlp#addfile'}) | ||||
| 	elsei has('patch-7.4-597') && !(has('win32') || has('win64')) | ||||
| 		let g:ctrlp_allfiles = systemlist(printf(lscmd, path)) | ||||
| 	el | ||||
| 		let g:ctrlp_allfiles = split(system(printf(lscmd, path)), "\n") | ||||
| @ -658,7 +672,7 @@ fu! s:Update(str) | ||||
| 	let pat = s:matcher == {} ? s:SplitPattern(str) : str | ||||
| 	let lines = s:nolim == 1 && empty(str) ? copy(g:ctrlp_lines) | ||||
| 		\ : s:MatchedItems(g:ctrlp_lines, pat, s:mw_res) | ||||
| 	if empty(str) | call clearmatches() | en | ||||
| 	if empty(str) | cal clearmatches() | en | ||||
| 	cal s:Render(lines, pat) | ||||
| 	return lines | ||||
| endf | ||||
| @ -923,7 +937,7 @@ fu! s:PrtExit() | ||||
| 	let bw = bufwinnr('%') | ||||
| 	exe bufwinnr(s:bufnr).'winc w' | ||||
| 	if bufnr('%') == s:bufnr && bufname('%') == 'ControlP' | ||||
| 		noa cal s:Close(1) | ||||
| 		noa cal s:Close() | ||||
| 		noa winc p | ||||
| 	els | ||||
| 		exe bw.'winc w' | ||||
| @ -2562,6 +2576,10 @@ fu! ctrlp#init(type, ...) | ||||
| 	cal s:SetWD(a:0 ? a:1 : {}) | ||||
| 	cal s:MapNorms() | ||||
| 	cal s:MapSpecs() | ||||
| 	if empty(g:ctrlp_types) && empty(g:ctrlp_ext_vars) | ||||
| 		call ctrlp#exit() | ||||
| 		retu | ||||
| 	en | ||||
| 	if type(a:type) == 0 | ||||
| 		let type = a:type | ||||
| 	el | ||||
| @ -2588,7 +2606,7 @@ if has('autocmd') | ||||
| 	aug CtrlPAug | ||||
| 		au! | ||||
| 		au BufEnter ControlP cal s:checkbuf() | ||||
| 		au BufLeave ControlP noa cal s:Close(0) | ||||
| 		au BufLeave ControlP noa cal s:Close() | ||||
| 		au VimLeavePre * cal s:leavepre() | ||||
| 	aug END | ||||
| en | ||||
|  | ||||
| @ -885,7 +885,8 @@ MRU mode options:~ | ||||
|     在匹配窗口和提示符面板之间切换焦点。 | ||||
|  | ||||
|   <esc>, | ||||
|   <c-c> | ||||
|   <c-c>, | ||||
|   <c-g> | ||||
|     退出CtrlP。 | ||||
|  | ||||
| 移动:~ | ||||
|  | ||||
| @ -943,7 +943,8 @@ Once inside the prompt:~ | ||||
|     Toggle the focus between the match window and the prompt. | ||||
|  | ||||
|   <esc>, | ||||
|   <c-c> | ||||
|   <c-c>, | ||||
|   <c-g> | ||||
|     Exit CtrlP. | ||||
|  | ||||
| Moving:~ | ||||
|  | ||||
| @ -17,7 +17,7 @@ let [g:ctrlp_lines, g:ctrlp_allfiles, g:ctrlp_alltags, g:ctrlp_alldirs, | ||||
| if !exists('g:ctrlp_map') | let g:ctrlp_map = '<c-p>' | en | ||||
| if !exists('g:ctrlp_cmd') | let g:ctrlp_cmd = 'CtrlP' | en | ||||
|  | ||||
| com! -n=? -com=dir CtrlP         cal ctrlp#init('fil', { 'dir': <q-args> }) | ||||
| com! -n=? -com=dir CtrlP         cal ctrlp#init(0, { 'dir': <q-args> }) | ||||
| com! -n=? -com=dir CtrlPMRUFiles cal ctrlp#init('mru', { 'dir': <q-args> }) | ||||
|  | ||||
| com! -bar CtrlPBuffer   cal ctrlp#init('buf') | ||||
|  | ||||
| @ -415,15 +415,15 @@ let g:lightline = { | ||||
|       \             [ 'fugitive', 'readonly', 'filename', 'modified' ] ] | ||||
|       \ }, | ||||
|       \ 'component_function': { | ||||
|       \   'fugitive': 'LightLineFugitive', | ||||
|       \   'readonly': 'LightLineReadonly', | ||||
|       \   'modified': 'LightLineModified' | ||||
|       \   'fugitive': 'LightlineFugitive', | ||||
|       \   'readonly': 'LightlineReadonly', | ||||
|       \   'modified': 'LightlineModified' | ||||
|       \ }, | ||||
|       \ 'separator': { 'left': '⮀', 'right': '⮂' }, | ||||
|       \ 'subseparator': { 'left': '⮁', 'right': '⮃' } | ||||
|       \ } | ||||
|  | ||||
| function! LightLineModified() | ||||
| function! LightlineModified() | ||||
|   if &filetype == "help" | ||||
|     return "" | ||||
|   elseif &modified | ||||
| @ -435,7 +435,7 @@ function! LightLineModified() | ||||
|   endif | ||||
| endfunction | ||||
|  | ||||
| function! LightLineReadonly() | ||||
| function! LightlineReadonly() | ||||
|   if &filetype == "help" | ||||
|     return "" | ||||
|   elseif &readonly | ||||
| @ -445,7 +445,7 @@ function! LightLineReadonly() | ||||
|   endif | ||||
| endfunction | ||||
|  | ||||
| function! LightLineFugitive() | ||||
| function! LightlineFugitive() | ||||
|   return exists('*fugitive#head') ? fugitive#head() : '' | ||||
| endfunction | ||||
| ``` | ||||
| @ -464,16 +464,16 @@ let g:lightline = { | ||||
|       \             [ 'fugitive', 'filename' ] ] | ||||
|       \ }, | ||||
|       \ 'component_function': { | ||||
|       \   'fugitive': 'LightLineFugitive', | ||||
|       \   'readonly': 'LightLineReadonly', | ||||
|       \   'modified': 'LightLineModified', | ||||
|       \   'filename': 'LightLineFilename' | ||||
|       \   'fugitive': 'LightlineFugitive', | ||||
|       \   'readonly': 'LightlineReadonly', | ||||
|       \   'modified': 'LightlineModified', | ||||
|       \   'filename': 'LightlineFilename' | ||||
|       \ }, | ||||
|       \ 'separator': { 'left': '⮀', 'right': '⮂' }, | ||||
|       \ 'subseparator': { 'left': '⮁', 'right': '⮃' } | ||||
|       \ } | ||||
|  | ||||
| function! LightLineModified() | ||||
| function! LightlineModified() | ||||
|   if &filetype == "help" | ||||
|     return "" | ||||
|   elseif &modified | ||||
| @ -485,7 +485,7 @@ function! LightLineModified() | ||||
|   endif | ||||
| endfunction | ||||
|  | ||||
| function! LightLineReadonly() | ||||
| function! LightlineReadonly() | ||||
|   if &filetype == "help" | ||||
|     return "" | ||||
|   elseif &readonly | ||||
| @ -495,21 +495,21 @@ function! LightLineReadonly() | ||||
|   endif | ||||
| endfunction | ||||
|  | ||||
| function! LightLineFugitive() | ||||
| function! LightlineFugitive() | ||||
|   return exists('*fugitive#head') ? fugitive#head() : '' | ||||
| endfunction | ||||
|  | ||||
| function! LightLineFilename() | ||||
|   return ('' != LightLineReadonly() ? LightLineReadonly() . ' ' : '') . | ||||
| function! LightlineFilename() | ||||
|   return ('' != LightlineReadonly() ? LightlineReadonly() . ' ' : '') . | ||||
|        \ ('' != expand('%:t') ? expand('%:t') : '[No Name]') . | ||||
|        \ ('' != LightLineModified() ? ' ' . LightLineModified() : '') | ||||
|        \ ('' != LightlineModified() ? ' ' . LightlineModified() : '') | ||||
| endfunction | ||||
| ``` | ||||
|  | ||||
|  | ||||
| Oops! We forgot the cool mark for the branch component! (work with the patched font for vim-powerline) | ||||
| ```vim | ||||
| function! LightLineFugitive() | ||||
| function! LightlineFugitive() | ||||
|   if exists("*fugitive#head") | ||||
|     let branch = fugitive#head() | ||||
|     return branch !=# '' ? '⭠ '.branch : '' | ||||
| @ -528,7 +528,7 @@ let g:lightline = { | ||||
|     \   'left': [ [ 'mode', 'paste' ], | ||||
|     \             [ 'my_component' ] ] }, | ||||
|     \ 'component_function': { | ||||
|     \   'my_component': 'LightLineComponent', ... | ||||
|     \   'my_component': 'LightlineComponent', ... | ||||
| ``` | ||||
|  | ||||
| This is the end of the tutorial. For more information, see `:help lightline`. Good luck with your nice statuslines. | ||||
| @ -555,37 +555,37 @@ let g:lightline = { | ||||
|       \   'left': [ [ 'mode', 'paste' ], [ 'fugitive', 'filename' ] ] | ||||
|       \ }, | ||||
|       \ 'component_function': { | ||||
|       \   'modified': 'LightLineModified', | ||||
|       \   'readonly': 'LightLineReadonly', | ||||
|       \   'fugitive': 'LightLineFugitive', | ||||
|       \   'filename': 'LightLineFilename', | ||||
|       \   'fileformat': 'LightLineFileformat', | ||||
|       \   'filetype': 'LightLineFiletype', | ||||
|       \   'fileencoding': 'LightLineFileencoding', | ||||
|       \   'mode': 'LightLineMode', | ||||
|       \   'modified': 'LightlineModified', | ||||
|       \   'readonly': 'LightlineReadonly', | ||||
|       \   'fugitive': 'LightlineFugitive', | ||||
|       \   'filename': 'LightlineFilename', | ||||
|       \   'fileformat': 'LightlineFileformat', | ||||
|       \   'filetype': 'LightlineFiletype', | ||||
|       \   'fileencoding': 'LightlineFileencoding', | ||||
|       \   'mode': 'LightlineMode', | ||||
|       \ }, | ||||
|       \ 'separator': { 'left': '⮀', 'right': '⮂' }, | ||||
|       \ 'subseparator': { 'left': '⮁', 'right': '⮃' } | ||||
|       \ } | ||||
|  | ||||
| function! LightLineModified() | ||||
| function! LightlineModified() | ||||
|   return &ft =~ 'help\|vimfiler\|gundo' ? '' : &modified ? '+' : &modifiable ? '' : '-' | ||||
| endfunction | ||||
|  | ||||
| function! LightLineReadonly() | ||||
| function! LightlineReadonly() | ||||
|   return &ft !~? 'help\|vimfiler\|gundo' && &readonly ? '⭤' : '' | ||||
| endfunction | ||||
|  | ||||
| function! LightLineFilename() | ||||
|   return ('' != LightLineReadonly() ? LightLineReadonly() . ' ' : '') . | ||||
| function! LightlineFilename() | ||||
|   return ('' != LightlineReadonly() ? LightlineReadonly() . ' ' : '') . | ||||
|         \ (&ft == 'vimfiler' ? vimfiler#get_status_string() : | ||||
|         \  &ft == 'unite' ? unite#get_status_string() : | ||||
|         \  &ft == 'vimshell' ? vimshell#get_status_string() : | ||||
|         \ '' != expand('%:t') ? expand('%:t') : '[No Name]') . | ||||
|         \ ('' != LightLineModified() ? ' ' . LightLineModified() : '') | ||||
|         \ ('' != LightlineModified() ? ' ' . LightlineModified() : '') | ||||
| endfunction | ||||
|  | ||||
| function! LightLineFugitive() | ||||
| function! LightlineFugitive() | ||||
|   if &ft !~? 'vimfiler\|gundo' && exists("*fugitive#head") | ||||
|     let branch = fugitive#head() | ||||
|     return branch !=# '' ? '⭠ '.branch : '' | ||||
| @ -593,19 +593,19 @@ function! LightLineFugitive() | ||||
|   return '' | ||||
| endfunction | ||||
|  | ||||
| function! LightLineFileformat() | ||||
| function! LightlineFileformat() | ||||
|   return winwidth(0) > 70 ? &fileformat : '' | ||||
| endfunction | ||||
|  | ||||
| function! LightLineFiletype() | ||||
| function! LightlineFiletype() | ||||
|   return winwidth(0) > 70 ? (&filetype !=# '' ? &filetype : 'no ft') : '' | ||||
| endfunction | ||||
|  | ||||
| function! LightLineFileencoding() | ||||
| function! LightlineFileencoding() | ||||
|   return winwidth(0) > 70 ? (&fenc !=# '' ? &fenc : &enc) : '' | ||||
| endfunction | ||||
|  | ||||
| function! LightLineMode() | ||||
| function! LightlineMode() | ||||
|   return winwidth(0) > 60 ? lightline#mode() : '' | ||||
| endfunction | ||||
| ``` | ||||
| @ -640,12 +640,12 @@ let g:lightline = { | ||||
|       \   'right': [ [ 'syntastic', 'lineinfo' ], ['percent'], [ 'fileformat', 'fileencoding', 'filetype' ] ] | ||||
|       \ }, | ||||
|       \ 'component_function': { | ||||
|       \   'fugitive': 'LightLineFugitive', | ||||
|       \   'filename': 'LightLineFilename', | ||||
|       \   'fileformat': 'LightLineFileformat', | ||||
|       \   'filetype': 'LightLineFiletype', | ||||
|       \   'fileencoding': 'LightLineFileencoding', | ||||
|       \   'mode': 'LightLineMode', | ||||
|       \   'fugitive': 'LightlineFugitive', | ||||
|       \   'filename': 'LightlineFilename', | ||||
|       \   'fileformat': 'LightlineFileformat', | ||||
|       \   'filetype': 'LightlineFiletype', | ||||
|       \   'fileencoding': 'LightlineFileencoding', | ||||
|       \   'mode': 'LightlineMode', | ||||
|       \   'ctrlpmark': 'CtrlPMark', | ||||
|       \ }, | ||||
|       \ 'component_expand': { | ||||
| @ -657,15 +657,15 @@ let g:lightline = { | ||||
|       \ 'subseparator': { 'left': '|', 'right': '|' } | ||||
|       \ } | ||||
|  | ||||
| function! LightLineModified() | ||||
| function! LightlineModified() | ||||
|   return &ft =~ 'help' ? '' : &modified ? '+' : &modifiable ? '' : '-' | ||||
| endfunction | ||||
|  | ||||
| function! LightLineReadonly() | ||||
| function! LightlineReadonly() | ||||
|   return &ft !~? 'help' && &readonly ? 'RO' : '' | ||||
| endfunction | ||||
|  | ||||
| function! LightLineFilename() | ||||
| function! LightlineFilename() | ||||
|   let fname = expand('%:t') | ||||
|   return fname == 'ControlP' && has_key(g:lightline, 'ctrlp_item') ? g:lightline.ctrlp_item : | ||||
|         \ fname == '__Tagbar__' ? g:lightline.fname : | ||||
| @ -673,12 +673,12 @@ function! LightLineFilename() | ||||
|         \ &ft == 'vimfiler' ? vimfiler#get_status_string() : | ||||
|         \ &ft == 'unite' ? unite#get_status_string() : | ||||
|         \ &ft == 'vimshell' ? vimshell#get_status_string() : | ||||
|         \ ('' != LightLineReadonly() ? LightLineReadonly() . ' ' : '') . | ||||
|         \ ('' != LightlineReadonly() ? LightlineReadonly() . ' ' : '') . | ||||
|         \ ('' != fname ? fname : '[No Name]') . | ||||
|         \ ('' != LightLineModified() ? ' ' . LightLineModified() : '') | ||||
|         \ ('' != LightlineModified() ? ' ' . LightlineModified() : '') | ||||
| endfunction | ||||
|  | ||||
| function! LightLineFugitive() | ||||
| function! LightlineFugitive() | ||||
|   try | ||||
|     if expand('%:t') !~? 'Tagbar\|Gundo\|NERD' && &ft !~? 'vimfiler' && exists('*fugitive#head') | ||||
|       let mark = ''  " edit here for cool mark | ||||
| @ -690,19 +690,19 @@ function! LightLineFugitive() | ||||
|   return '' | ||||
| endfunction | ||||
|  | ||||
| function! LightLineFileformat() | ||||
| function! LightlineFileformat() | ||||
|   return winwidth(0) > 70 ? &fileformat : '' | ||||
| endfunction | ||||
|  | ||||
| function! LightLineFiletype() | ||||
| function! LightlineFiletype() | ||||
|   return winwidth(0) > 70 ? (&filetype !=# '' ? &filetype : 'no ft') : '' | ||||
| endfunction | ||||
|  | ||||
| function! LightLineFileencoding() | ||||
| function! LightlineFileencoding() | ||||
|   return winwidth(0) > 70 ? (&fenc !=# '' ? &fenc : &enc) : '' | ||||
| endfunction | ||||
|  | ||||
| function! LightLineMode() | ||||
| function! LightlineMode() | ||||
|   let fname = expand('%:t') | ||||
|   return fname == '__Tagbar__' ? 'Tagbar' : | ||||
|         \ fname == 'ControlP' ? 'CtrlP' : | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
| " Filename: autoload/lightline.vim | ||||
| " Author: itchyny | ||||
| " License: MIT License | ||||
| " Last Change: 2016/09/04 13:01:40. | ||||
| " Last Change: 2016/10/05 08:00:00. | ||||
| " ============================================================================= | ||||
|  | ||||
| let s:save_cpo = &cpo | ||||
| @ -191,10 +191,6 @@ function! lightline#colorscheme() abort | ||||
|     let s:lightline.colorscheme = 'default' | ||||
|     let s:lightline.palette = g:lightline#colorscheme#{s:lightline.colorscheme}#palette | ||||
|   finally | ||||
|     let s:highlight = {} | ||||
|     call lightline#highlight('normal') | ||||
|     call lightline#link() | ||||
|     let s:_ = 0 | ||||
|     if has('win32') && !has('gui_running') && &t_Co < 256 | ||||
|       for u in values(s:lightline.palette) | ||||
|         for v in values(u) | ||||
| @ -204,6 +200,10 @@ function! lightline#colorscheme() abort | ||||
|         endfor | ||||
|       endfor | ||||
|     endif | ||||
|     let s:highlight = {} | ||||
|     call lightline#highlight('normal') | ||||
|     call lightline#link() | ||||
|     let s:_ = 0 | ||||
|   endtry | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -0,0 +1,36 @@ | ||||
| " ============================================================================= | ||||
| " Filename: autoload/lightline/colorscheme/Dracula.vim | ||||
| " Author: itchyny | ||||
| " License: MIT License | ||||
| " Last Change: 2016/11/06 01:08:03. | ||||
| " ============================================================================= | ||||
|  | ||||
| let s:black = [ '#282a36', 235 ] | ||||
| let s:gray = [ '#44475a', 236 ] | ||||
| let s:white = [ '#f8f8f2', 231 ] | ||||
| let s:darkblue = [ '#6272a4', 61 ] | ||||
| let s:cyan = [ '#8be9fd', 117 ] | ||||
| let s:green = [ '#50fa7b', 84 ] | ||||
| let s:orange = [ '#ffb86c', 215 ] | ||||
| let s:purple = [ '#bd93f9', 141 ] | ||||
| let s:red = [ '#ff79c6', 212 ] | ||||
| let s:yellow = [ '#f1fa8c', 228 ] | ||||
|  | ||||
| let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}} | ||||
| let s:p.normal.left = [ [ s:black, s:purple ], [ s:cyan, s:gray ] ] | ||||
| let s:p.normal.right = [ [ s:black, s:purple ], [ s:white, s:darkblue ] ] | ||||
| let s:p.inactive.right = [ [ s:black, s:gray ], [ s:white, s:black ] ] | ||||
| let s:p.inactive.left =  [ [ s:cyan, s:black ], [ s:white, s:black ] ] | ||||
| let s:p.insert.left = [ [ s:black, s:green ], [ s:cyan, s:gray ] ] | ||||
| let s:p.replace.left = [ [ s:black, s:red ], [ s:cyan, s:gray ] ] | ||||
| let s:p.visual.left = [ [ s:black, s:orange ], [ s:cyan, s:gray ] ] | ||||
| let s:p.normal.middle = [ [ s:white, s:gray ] ] | ||||
| let s:p.inactive.middle = [ [ s:white, s:gray ] ] | ||||
| let s:p.tabline.left = [ [ s:darkblue, s:gray ] ] | ||||
| let s:p.tabline.tabsel = [ [ s:cyan, s:black ] ] | ||||
| let s:p.tabline.middle = [ [ s:darkblue, s:gray ] ] | ||||
| let s:p.tabline.right = copy(s:p.normal.right) | ||||
| let s:p.normal.error = [ [ s:red, s:black ] ] | ||||
| let s:p.normal.warning = [ [ s:yellow, s:black ] ] | ||||
|  | ||||
| let g:lightline#colorscheme#Dracula#palette = lightline#colorscheme#flatten(s:p) | ||||
| @ -0,0 +1,63 @@ | ||||
| " ============================================================================= | ||||
| " Filename: autoload/lightline/colorscheme/one.vim | ||||
| " Author: Zoltan Dalmadi | ||||
| " License: MIT License | ||||
| " Last Change: 2016/11/2 17:34:27. | ||||
| " ============================================================================= | ||||
|  | ||||
| " Common colors | ||||
| let s:fg     = '#abb2bf' | ||||
| let s:blue   = '#61afef' | ||||
| let s:green  = '#98c379' | ||||
| let s:purple = '#c678dd' | ||||
| let s:red1   = '#e06c75' | ||||
| let s:red2   = '#be5046' | ||||
| let s:yellow = '#e5c07b' | ||||
|  | ||||
| let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}} | ||||
|  | ||||
| if &background ==# 'light' | ||||
|   " Light variant | ||||
|   let s:bg     = '#fafafa' | ||||
|   let s:gray1  = '#494b53' | ||||
|   let s:gray2  = '#f0f0f0' | ||||
|   let s:gray3  = '#d0d0d0' | ||||
|  | ||||
|   let s:p.normal.left     = [ [ s:bg, s:green, 'bold' ], [ s:gray1, s:gray3 ] ] | ||||
|   let s:p.normal.middle   = [ [ s:gray1, s:gray2 ] ] | ||||
|   let s:p.inactive.left   = [ [ s:bg,  s:gray3 ], [ s:bg, s:gray3 ] ] | ||||
|   let s:p.inactive.middle = [ [ s:gray3, s:gray2 ] ] | ||||
|   let s:p.inactive.right  = [ [ s:bg, s:gray3 ], [ s:bg, s:gray3 ] ] | ||||
|   let s:p.insert.left     = [ [ s:bg, s:blue, 'bold' ], [ s:gray1, s:gray3 ] ] | ||||
|   let s:p.replace.left    = [ [ s:bg, s:red1, 'bold' ], [ s:gray1, s:gray3 ] ] | ||||
|   let s:p.visual.left     = [ [ s:bg, s:purple, 'bold' ], [ s:gray1, s:gray3 ] ] | ||||
| else | ||||
|   " Dark variant | ||||
|   let s:bg     = '#282c34' | ||||
|   let s:gray1  = '#5c6370' | ||||
|   let s:gray2  = '#2c323d' | ||||
|   let s:gray3  = '#3e4452' | ||||
|  | ||||
|   let s:p.normal.left     = [ [ s:bg, s:green, 'bold' ], [ s:fg, s:gray3 ] ] | ||||
|   let s:p.normal.middle   = [ [ s:fg, s:gray2 ] ] | ||||
|   let s:p.inactive.left   = [ [ s:gray1,  s:bg ], [ s:gray1, s:bg ] ] | ||||
|   let s:p.inactive.middle = [ [ s:gray1, s:gray2 ] ] | ||||
|   let s:p.inactive.right  = [ [ s:gray1, s:bg ], [ s:gray1, s:bg ] ] | ||||
|   let s:p.insert.left     = [ [ s:bg, s:blue, 'bold' ], [ s:fg, s:gray3 ] ] | ||||
|   let s:p.replace.left    = [ [ s:bg, s:red1, 'bold' ], [ s:fg, s:gray3 ] ] | ||||
|   let s:p.visual.left     = [ [ s:bg, s:purple, 'bold' ], [ s:fg, s:gray3 ] ] | ||||
| endif | ||||
|  | ||||
| " Common | ||||
| let s:p.normal.right   = [ [ s:bg, s:green, 'bold' ], [ s:bg, s:green, 'bold' ] ] | ||||
| let s:p.normal.error   = [ [ s:red2,   s:bg ] ] | ||||
| let s:p.normal.warning = [ [ s:yellow, s:bg ] ] | ||||
| let s:p.insert.right   = [ [ s:bg, s:blue, 'bold' ], [ s:bg, s:blue, 'bold' ] ] | ||||
| let s:p.replace.right  = [ [ s:bg, s:red1, 'bold' ], [ s:bg, s:red1, 'bold' ] ] | ||||
| let s:p.visual.right   = [ [ s:bg, s:purple, 'bold' ], [ s:bg, s:purple, 'bold' ] ] | ||||
| let s:p.tabline.left   = [ [ s:bg, s:gray3 ] ] | ||||
| let s:p.tabline.tabsel = [ [ s:bg, s:purple, 'bold' ] ] | ||||
| let s:p.tabline.middle = [ [ s:gray3, s:gray2 ] ] | ||||
| let s:p.tabline.right  = copy(s:p.normal.right) | ||||
|  | ||||
| let g:lightline#colorscheme#one#palette = lightline#colorscheme#fill(s:p) | ||||
| @ -4,7 +4,7 @@ Version: 0.1 | ||||
| Author: itchyny (https://github.com/itchyny) | ||||
| License: MIT License | ||||
| Repository: https://github.com/itchyny/lightline.vim | ||||
| Last Change: 2016/09/13 23:56:56. | ||||
| Last Change: 2016/10/24 08:12:28. | ||||
|  | ||||
| CONTENTS					*lightline-contents* | ||||
|  | ||||
| @ -151,10 +151,10 @@ OPTIONS						*lightline-option* | ||||
| 			\             [ 'myreadonly', 'filename', 'modified' ] ], | ||||
| 			\ }, | ||||
| 			\ 'component_function': { | ||||
| 			\   'myreadonly': 'LightLineReadonly' | ||||
| 			\   'myreadonly': 'LightlineReadonly' | ||||
| 			\ }, | ||||
| 			\ } | ||||
| 		function! LightLineReadonly() | ||||
| 		function! LightlineReadonly() | ||||
| 			return &ft !~? 'help' && &readonly ? 'RO' : '' | ||||
| 		endfunction | ||||
| < | ||||
| @ -223,7 +223,7 @@ OPTIONS						*lightline-option* | ||||
| 		The colorscheme for lightline.vim. | ||||
| 		Currently, wombat, solarized, powerline, jellybeans, Tomorrow, | ||||
| 		Tomorrow_Night, Tomorrow_Night_Blue, Tomorrow_Night_Eighties, | ||||
| 		PaperColor, seoul256, landscape and 16color are available. | ||||
| 		PaperColor, seoul256, landscape, one, Dracula, and 16color are available. | ||||
| 		The default value is: | ||||
| > | ||||
| 		let g:lightline.colorscheme = 'default' | ||||
| @ -299,16 +299,16 @@ nice. | ||||
| 		\   'lineinfo': ' %3l:%-2v', | ||||
| 		\ }, | ||||
| 		\ 'component_function': { | ||||
| 		\   'readonly': 'LightLineReadonly', | ||||
| 		\   'fugitive': 'LightLineFugitive' | ||||
| 		\   'readonly': 'LightlineReadonly', | ||||
| 		\   'fugitive': 'LightlineFugitive' | ||||
| 		\ }, | ||||
| 		\ 'separator': { 'left': '', 'right': '' }, | ||||
| 		\ 'subseparator': { 'left': '', 'right': '' } | ||||
| 		\ } | ||||
| 	function! LightLineReadonly() | ||||
| 	function! LightlineReadonly() | ||||
| 		return &readonly ? '' : '' | ||||
| 	endfunction | ||||
| 	function! LightLineFugitive() | ||||
| 	function! LightlineFugitive() | ||||
| 		if exists('*fugitive#head') | ||||
| 			let branch = fugitive#head() | ||||
| 			return branch !=# '' ? ''.branch : '' | ||||
| @ -324,16 +324,16 @@ look nice. | ||||
| 		\   'lineinfo': '⭡ %3l:%-2v', | ||||
| 		\ }, | ||||
| 		\ 'component_function': { | ||||
| 		\   'readonly': 'LightLineReadonly', | ||||
| 		\   'fugitive': 'LightLineFugitive' | ||||
| 		\   'readonly': 'LightlineReadonly', | ||||
| 		\   'fugitive': 'LightlineFugitive' | ||||
| 		\ }, | ||||
| 		\ 'separator': { 'left': '⮀', 'right': '⮂' }, | ||||
| 		\ 'subseparator': { 'left': '⮁', 'right': '⮃' } | ||||
| 		\ } | ||||
| 	function! LightLineReadonly() | ||||
| 	function! LightlineReadonly() | ||||
| 		return &readonly ? '⭤' : '' | ||||
| 	endfunction | ||||
| 	function! LightLineFugitive() | ||||
| 	function! LightlineFugitive() | ||||
| 		if exists('*fugitive#head') | ||||
| 			let branch = fugitive#head() | ||||
| 			return branch !=# '' ? '⭠ '.branch : '' | ||||
| @ -655,22 +655,22 @@ In order to define your own component: | ||||
| 		\   'left': [ [ 'mode', 'paste' ], [ 'myfilename' ] ] | ||||
| 		\ }, | ||||
| 		\ 'component_function': { | ||||
| 		\   'myfilename': 'LightLineFilename', | ||||
| 		\   'myreadonly': 'LightLineReadonly', | ||||
| 		\   'mymodified': 'LightLineModified', | ||||
| 		\   'myfilename': 'LightlineFilename', | ||||
| 		\   'myreadonly': 'LightlineReadonly', | ||||
| 		\   'mymodified': 'LightlineModified', | ||||
| 		\ } | ||||
| 		\ } | ||||
| 	function! LightLineFilename() | ||||
| 		return ('' != LightLineReadonly() ? LightLineReadonly() . ' ' : '') . | ||||
| 	function! LightlineFilename() | ||||
| 		return ('' != LightlineReadonly() ? LightlineReadonly() . ' ' : '') . | ||||
| 		      \ (&ft == 'vimfiler' ? vimfiler#get_status_string() : | ||||
| 		      \  &ft == 'unite' ? unite#get_status_string() : | ||||
| 		      \ '' != expand('%:t') ? expand('%:t') : '[No Name]') . | ||||
| 		      \ ('' != LightLineModified() ? ' ' . LightLineModified() : '') | ||||
| 		      \ ('' != LightlineModified() ? ' ' . LightlineModified() : '') | ||||
| 	endfunction | ||||
| 	function! LightLineReadonly() | ||||
| 	function! LightlineReadonly() | ||||
| 		return &ft !~? 'help' && &readonly ? 'RO' : '' | ||||
| 	endfunction | ||||
| 	function! LightLineModified() | ||||
| 	function! LightlineModified() | ||||
| 		return &modifiable && &modified ? '+' : '' | ||||
| 	endfunction | ||||
| < | ||||
| @ -710,25 +710,25 @@ A nice example for non-patched font users. | ||||
| 		\   'left': [ [ 'mode', 'paste' ], [ 'fugitive', 'filename' ] ] | ||||
| 		\ }, | ||||
| 		\ 'component_function': { | ||||
| 		\   'fugitive': 'LightLineFugitive', | ||||
| 		\   'filename': 'LightLineFilename' | ||||
| 		\   'fugitive': 'LightlineFugitive', | ||||
| 		\   'filename': 'LightlineFilename' | ||||
| 		\ } | ||||
| 		\ } | ||||
| 	function! LightLineModified() | ||||
| 	function! LightlineModified() | ||||
| 		return &ft =~ 'help\|vimfiler' ? '' : &modified ? '+' : &modifiable ? '' : '-' | ||||
| 	endfunction | ||||
| 	function! LightLineReadonly() | ||||
| 	function! LightlineReadonly() | ||||
| 		return &ft !~? 'help\|vimfiler' && &readonly ? 'RO' : '' | ||||
| 	endfunction | ||||
| 	function! LightLineFilename() | ||||
| 		return ('' != LightLineReadonly() ? LightLineReadonly() . ' ' : '') . | ||||
| 	function! LightlineFilename() | ||||
| 		return ('' != LightlineReadonly() ? LightlineReadonly() . ' ' : '') . | ||||
| 		\ (&ft == 'vimfiler' ? vimfiler#get_status_string() : | ||||
| 		\  &ft == 'unite' ? unite#get_status_string() : | ||||
| 		\  &ft == 'vimshell' ? vimshell#get_status_string() : | ||||
| 		\ '' != expand('%:t') ? expand('%:t') : '[No Name]') . | ||||
| 		\ ('' != LightLineModified() ? ' ' . LightLineModified() : '') | ||||
| 		\ ('' != LightlineModified() ? ' ' . LightlineModified() : '') | ||||
| 	endfunction | ||||
| 	function! LightLineFugitive() | ||||
| 	function! LightlineFugitive() | ||||
| 		if &ft !~? 'vimfiler' && exists('*fugitive#head') | ||||
| 			return fugitive#head() | ||||
| 		endif | ||||
| @ -743,27 +743,27 @@ A nice example for |vim-powerline| font users: | ||||
| 		\   'left': [ [ 'mode', 'paste' ], [ 'fugitive', 'filename' ] ] | ||||
| 		\ }, | ||||
| 		\ 'component_function': { | ||||
| 		\   'fugitive': 'LightLineFugitive', | ||||
| 		\   'filename': 'LightLineFilename' | ||||
| 		\   'fugitive': 'LightlineFugitive', | ||||
| 		\   'filename': 'LightlineFilename' | ||||
| 		\ }, | ||||
| 		\ 'separator': { 'left': '⮀', 'right': '⮂' }, | ||||
| 		\ 'subseparator': { 'left': '⮁', 'right': '⮃' } | ||||
| 		\ } | ||||
| 	function! LightLineModified() | ||||
| 	function! LightlineModified() | ||||
| 		return &ft =~ 'help\|vimfiler' ? '' : &modified ? '+' : &modifiable ? '' : '-' | ||||
| 	endfunction | ||||
| 	function! LightLineReadonly() | ||||
| 	function! LightlineReadonly() | ||||
| 		return &ft !~? 'help\|vimfiler' && &readonly ? '⭤' : '' | ||||
| 	endfunction | ||||
| 	function! LightLineFilename() | ||||
| 		return ('' != LightLineReadonly() ? LightLineReadonly() . ' ' : '') . | ||||
| 	function! LightlineFilename() | ||||
| 		return ('' != LightlineReadonly() ? LightlineReadonly() . ' ' : '') . | ||||
| 		\ (&ft == 'vimfiler' ? vimfiler#get_status_string() : | ||||
| 		\  &ft == 'unite' ? unite#get_status_string() : | ||||
| 		\  &ft == 'vimshell' ? vimshell#get_status_string() : | ||||
| 		\ '' != expand('%:t') ? expand('%:t') : '[No Name]') . | ||||
| 		\ ('' != LightLineModified() ? ' ' . LightLineModified() : '') | ||||
| 		\ ('' != LightlineModified() ? ' ' . LightlineModified() : '') | ||||
| 	endfunction | ||||
| 	function! LightLineFugitive() | ||||
| 	function! LightlineFugitive() | ||||
| 		if &ft !~? 'vimfiler' && exists('*fugitive#head') | ||||
| 			let branch = fugitive#head() | ||||
| 			return branch !=# '' ? '⭠ '.branch : '' | ||||
| @ -784,12 +784,12 @@ For users who uses lots of plugins: | ||||
| 	      \   'right': [ [ 'syntastic', 'lineinfo' ], ['percent'], [ 'fileformat', 'fileencoding', 'filetype' ] ] | ||||
| 	      \ }, | ||||
| 	      \ 'component_function': { | ||||
| 	      \   'fugitive': 'LightLineFugitive', | ||||
| 	      \   'filename': 'LightLineFilename', | ||||
| 	      \   'fileformat': 'LightLineFileformat', | ||||
| 	      \   'filetype': 'LightLineFiletype', | ||||
| 	      \   'fileencoding': 'LightLineFileencoding', | ||||
| 	      \   'mode': 'LightLineMode', | ||||
| 	      \   'fugitive': 'LightlineFugitive', | ||||
| 	      \   'filename': 'LightlineFilename', | ||||
| 	      \   'fileformat': 'LightlineFileformat', | ||||
| 	      \   'filetype': 'LightlineFiletype', | ||||
| 	      \   'fileencoding': 'LightlineFileencoding', | ||||
| 	      \   'mode': 'LightlineMode', | ||||
| 	      \   'ctrlpmark': 'CtrlPMark', | ||||
| 	      \ }, | ||||
| 	      \ 'component_expand': { | ||||
| @ -801,15 +801,15 @@ For users who uses lots of plugins: | ||||
| 	      \ 'subseparator': { 'left': '|', 'right': '|' } | ||||
| 	      \ } | ||||
|  | ||||
| 	function! LightLineModified() | ||||
| 	function! LightlineModified() | ||||
| 	  return &ft =~ 'help' ? '' : &modified ? '+' : &modifiable ? '' : '-' | ||||
| 	endfunction | ||||
|  | ||||
| 	function! LightLineReadonly() | ||||
| 	function! LightlineReadonly() | ||||
| 	  return &ft !~? 'help' && &readonly ? 'RO' : '' | ||||
| 	endfunction | ||||
|  | ||||
| 	function! LightLineFilename() | ||||
| 	function! LightlineFilename() | ||||
| 	  let fname = expand('%:t') | ||||
| 	  return fname == 'ControlP' && has_key(g:lightline, 'ctrlp_item') ? g:lightline.ctrlp_item : | ||||
| 	        \ fname == '__Tagbar__' ? g:lightline.fname : | ||||
| @ -817,12 +817,12 @@ For users who uses lots of plugins: | ||||
| 	        \ &ft == 'vimfiler' ? vimfiler#get_status_string() : | ||||
| 	        \ &ft == 'unite' ? unite#get_status_string() : | ||||
| 	        \ &ft == 'vimshell' ? vimshell#get_status_string() : | ||||
| 	        \ ('' != LightLineReadonly() ? LightLineReadonly() . ' ' : '') . | ||||
| 	        \ ('' != LightlineReadonly() ? LightlineReadonly() . ' ' : '') . | ||||
| 	        \ ('' != fname ? fname : '[No Name]') . | ||||
| 	        \ ('' != LightLineModified() ? ' ' . LightLineModified() : '') | ||||
| 	        \ ('' != LightlineModified() ? ' ' . LightlineModified() : '') | ||||
| 	endfunction | ||||
|  | ||||
| 	function! LightLineFugitive() | ||||
| 	function! LightlineFugitive() | ||||
| 	  try | ||||
| 	    if expand('%:t') !~? 'Tagbar\|Gundo\|NERD' && &ft !~? 'vimfiler' && exists('*fugitive#head') | ||||
| 	      let mark = ''  " edit here for cool mark | ||||
| @ -834,19 +834,19 @@ For users who uses lots of plugins: | ||||
| 	  return '' | ||||
| 	endfunction | ||||
|  | ||||
| 	function! LightLineFileformat() | ||||
| 	function! LightlineFileformat() | ||||
| 	  return winwidth(0) > 70 ? &fileformat : '' | ||||
| 	endfunction | ||||
|  | ||||
| 	function! LightLineFiletype() | ||||
| 	function! LightlineFiletype() | ||||
| 	  return winwidth(0) > 70 ? (&filetype !=# '' ? &filetype : 'no ft') : '' | ||||
| 	endfunction | ||||
|  | ||||
| 	function! LightLineFileencoding() | ||||
| 	function! LightlineFileencoding() | ||||
| 	  return winwidth(0) > 70 ? (&fenc !=# '' ? &fenc : &enc) : '' | ||||
| 	endfunction | ||||
|  | ||||
| 	function! LightLineMode() | ||||
| 	function! LightlineMode() | ||||
| 	  let fname = expand('%:t') | ||||
| 	  return fname == '__Tagbar__' ? 'Tagbar' : | ||||
| 	        \ fname == 'ControlP' ? 'CtrlP' : | ||||
| @ -1189,10 +1189,10 @@ Problem 12:					*lightline-problem-12* | ||||
| > | ||||
| 		let g:lightline = { | ||||
| 		      \ 'component': { | ||||
| 		      \   'modified': '%#ModifiedColor#%{LightLineModified()}', | ||||
| 		      \   'modified': '%#ModifiedColor#%{LightlineModified()}', | ||||
| 		      \ } | ||||
| 		      \ } | ||||
| 		function! LightLineModified() | ||||
| 		function! LightlineModified() | ||||
| 		  let map = { 'V': 'n', "\<C-v>": 'n', 's': 'n', 'v': 'n', "\<C-s>": 'n', 'c': 'n', 'R': 'n'} | ||||
| 		  let mode = get(map, mode()[0], mode()[0]) | ||||
| 		  let bgcolor = {'n': [240, '#585858'], 'i': [31, '#0087af']} | ||||
| @ -1211,7 +1211,7 @@ Problem 13:					*lightline-problem-13* | ||||
|  | ||||
| 		Add the following settings to your .vimrc(_vimrc). | ||||
| > | ||||
| 		augroup LightLineColorscheme | ||||
| 		augroup LightlineColorscheme | ||||
| 		  autocmd! | ||||
| 		  autocmd ColorScheme * call s:lightline_update() | ||||
| 		augroup END | ||||
|  | ||||
| @ -1,4 +1,8 @@ | ||||
| Next | ||||
|     - Reuse/reopen existing window trees where possible #244 | ||||
|     - Remove NERDTree.previousBuf() | ||||
|     - Change color of arrow (Leeiio) #630 | ||||
|     - Improved a tip in README.markdown (ggicci) #628 | ||||
|     - Shorten delete confimration of empty directory to 'y' (mikeperri) #530 | ||||
|     - Fix API call to open directory tree in window (devm33) #533 | ||||
|     - Change default arrows on non-Windows platforms (gwilk) #546 | ||||
|  | ||||
| @ -101,15 +101,13 @@ Stick this in your vimrc: | ||||
| Note: Now start vim with plain `vim`, not `vim .` | ||||
|  | ||||
| --- | ||||
| > How can I open NERDTree on startup, and have my cursor start in the other window? | ||||
| > How can I open NERDTree automatically when vim starts up on opening a directory? | ||||
|  | ||||
| Stick this in your vimrc: | ||||
|     autocmd StdinReadPre * let s:std_in=1 | ||||
|     autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | endif | ||||
|  | ||||
|     autocmd vimenter * NERDTree | ||||
|     autocmd vimenter * wincmd p | ||||
| This window is tab-specific, meaning it's used by all windows in the tab. This trick also prevents NERDTree from hiding when first selecting a file. | ||||
|  | ||||
|  *via [stackoverflow/Yohann](http://stackoverflow.com/questions/4277808/nerdtree-auto-focus-to-file-when-opened-in-new-tab/19330023#19330023)* | ||||
|   | ||||
| --- | ||||
| > How can I map a specific key or shortcut to open NERDTree? | ||||
|  | ||||
| @ -134,5 +132,5 @@ See here: https://github.com/scrooloose/nerdtree/issues/433#issuecomment-9259069 | ||||
|  | ||||
| Use these variables in your vimrc. Note that below are default arrow symbols | ||||
|  | ||||
|     let g:NERDTreeDirArrowExpandable = '►' | ||||
|     let g:NERDTreeDirArrowCollapsible = '▼' | ||||
|     let g:NERDTreeDirArrowExpandable = '▸' | ||||
|     let g:NERDTreeDirArrowCollapsible = '▾' | ||||
|  | ||||
| @ -13,9 +13,37 @@ endfunction | ||||
| "FUNCTION: nerdtree#checkForBrowse(dir) {{{2 | ||||
| "inits a window tree in the current buffer if appropriate | ||||
| function! nerdtree#checkForBrowse(dir) | ||||
|     if a:dir != '' && isdirectory(a:dir) | ||||
|         call g:NERDTreeCreator.CreateWindowTree(a:dir) | ||||
|     if !isdirectory(a:dir) | ||||
|         return | ||||
|     endif | ||||
|  | ||||
|     if s:reuseWin(a:dir) | ||||
|         return | ||||
|     endif | ||||
|  | ||||
|     call g:NERDTreeCreator.CreateWindowTree(a:dir) | ||||
| endfunction | ||||
|  | ||||
| "FUNCTION: s:reuseWin(dir) {{{2 | ||||
| "finds a NERDTree buffer with root of dir, and opens it. | ||||
| function! s:reuseWin(dir) abort | ||||
|     let path = g:NERDTreePath.New(fnamemodify(a:dir, ":p")) | ||||
|  | ||||
|     for i in range(1, bufnr("$")) | ||||
|         unlet! nt | ||||
|         let nt = getbufvar(i, "NERDTree") | ||||
|         if empty(nt) | ||||
|             continue | ||||
|         endif | ||||
|  | ||||
|         if nt.isWinTree() && nt.root.path.equals(path) | ||||
|             call nt.setPreviousBuf(bufnr("#")) | ||||
|             exec "buffer " . i | ||||
|             return 1 | ||||
|         endif | ||||
|     endfor | ||||
|  | ||||
|     return 0 | ||||
| endfunction | ||||
|  | ||||
| " FUNCTION: nerdtree#completeBookmarks(A,L,P) {{{2 | ||||
|  | ||||
| @ -186,6 +186,10 @@ function! s:NERDTree.previousBuf() | ||||
|     return self._previousBuf | ||||
| endfunction | ||||
|  | ||||
| function! s:NERDTree.setPreviousBuf(bnum) | ||||
|     let self._previousBuf = a:bnum | ||||
| endfunction | ||||
|  | ||||
| "FUNCTION: s:NERDTree.render() {{{1 | ||||
| "A convenience function - since this is called often | ||||
| function! s:NERDTree.render() | ||||
|  | ||||
| @ -74,7 +74,7 @@ endfunction | ||||
| function! s:promptToRenameBuffer(bufnum, msg, newFileName) | ||||
|     echo a:msg | ||||
|     if g:NERDTreeAutoDeleteBuffer || nr2char(getchar()) ==# 'y' | ||||
|         let quotedFileName = fnameescape(a:newFilename) | ||||
|         let quotedFileName = fnameescape(a:newFileName) | ||||
|         " 1. ensure that a new buffer is loaded | ||||
|         exec "badd " . quotedFileName | ||||
|         " 2. ensure that all windows which display the just deleted filename | ||||
|  | ||||
| @ -68,8 +68,8 @@ call s:initVariable("g:NERDTreeShowLineNumbers", 0) | ||||
| call s:initVariable("g:NERDTreeSortDirs", 1) | ||||
|  | ||||
| if !nerdtree#runningWindows() | ||||
|     call s:initVariable("g:NERDTreeDirArrowExpandable", "►") | ||||
|     call s:initVariable("g:NERDTreeDirArrowCollapsible", "▼") | ||||
|     call s:initVariable("g:NERDTreeDirArrowExpandable", "▸") | ||||
|     call s:initVariable("g:NERDTreeDirArrowCollapsible", "▾") | ||||
| else | ||||
|     call s:initVariable("g:NERDTreeDirArrowExpandable", "+") | ||||
|     call s:initVariable("g:NERDTreeDirArrowCollapsible", "~") | ||||
|  | ||||
| @ -72,8 +72,8 @@ hi def link NERDTreeDir Directory | ||||
| hi def link NERDTreeUp Directory | ||||
| hi def link NERDTreeFile Normal | ||||
| hi def link NERDTreeCWD Statement | ||||
| hi def link NERDTreeOpenable Title | ||||
| hi def link NERDTreeClosable Title | ||||
| hi def link NERDTreeOpenable Directory | ||||
| hi def link NERDTreeClosable Directory | ||||
| hi def link NERDTreeIgnore ignore | ||||
| hi def link NERDTreeRO WarningMsg | ||||
| hi def link NERDTreeBookmark Statement | ||||
|  | ||||
| @ -26,20 +26,21 @@ | ||||
| 4. [FAQ](#faq)   | ||||
| 4.1. [I installed syntastic but it isn't reporting any errors...](#faqinfo)   | ||||
| 4.2. [Syntastic supports several checkers for my filetype, how do I tell it which one(s) to use?](#faqcheckers)   | ||||
| 4.3. [I have enabled multiple checkers for the current filetype. How can I display all errors from all checkers together?](#faqaggregate)   | ||||
| 4.4. [How can I pass additional arguments to a checker?](#faqargs)   | ||||
| 4.5. [I run a checker and the location list is not updated...](#faqloclist)   | ||||
| 4.5. [I run`:lopen` or `:lwindow` and the error window is empty...](#faqloclist)   | ||||
| 4.6. [How can I jump between the different errors without using the location list at the bottom of the window?](#faqlnext)   | ||||
| 4.7. [The error window is closed automatically when I `:quit` the current buffer but not when I `:bdelete` it?](#faqbdelete)   | ||||
| 4.8. [My favourite checker needs to load a configuration file from the project's root rather than the current directory...](#faqconfig)   | ||||
| 4.9. [What is the difference between syntax checkers and style checkers?](#faqstyle)   | ||||
| 4.10. [How can I check scripts written for different versions of Python?](#faqpython)   | ||||
| 4.11. [How can I check scripts written for different versions of Ruby?](#faqruby)   | ||||
| 4.12. [The `perl` checker has stopped working...](#faqperl)   | ||||
| 4.13. [What happened to the `rustc` checker?](#faqrust)   | ||||
| 4.14. [What happened to the `tsc` checker?](#faqtsc)   | ||||
| 4.15. [What happened to the `xcrun` checker?](#faqxcrun)   | ||||
| 4.3. [How can I run checkers for "foreign" filetypes against the current file?](#faqforeign)   | ||||
| 4.4. [I have enabled multiple checkers for the current filetype. How can I display all errors from all checkers together?](#faqaggregate)   | ||||
| 4.5. [How can I pass additional arguments to a checker?](#faqargs)   | ||||
| 4.6. [I run a checker and the location list is not updated...](#faqloclist)   | ||||
| 4.6. [I run`:lopen` or `:lwindow` and the error window is empty...](#faqloclist)   | ||||
| 4.7. [How can I jump between the different errors without using the location list at the bottom of the window?](#faqlnext)   | ||||
| 4.8. [The error window is closed automatically when I `:quit` the current buffer but not when I `:bdelete` it?](#faqbdelete)   | ||||
| 4.9. [My favourite checker needs to load a configuration file from the project's root rather than the current directory...](#faqconfig)   | ||||
| 4.10. [What is the difference between syntax checkers and style checkers?](#faqstyle)   | ||||
| 4.11. [How can I check scripts written for different versions of Python?](#faqpython)   | ||||
| 4.12. [How can I check scripts written for different versions of Ruby?](#faqruby)   | ||||
| 4.13. [The `perl` checker has stopped working...](#faqperl)   | ||||
| 4.14. [What happened to the `rustc` checker?](#faqrust)   | ||||
| 4.15. [What happened to the `tsc` checker?](#faqtsc)   | ||||
| 4.16. [What happened to the `xcrun` checker?](#faqxcrun)   | ||||
| 5. [Resources](#otherresources)   | ||||
|  | ||||
| - - - | ||||
| @ -65,9 +66,9 @@ MATLAB, Mercury, NASM, Nix, Objective-C, Objective-C++, OCaml, Perl, Perl | ||||
| POD, PHP, gettext Portable Object, OS X and iOS property lists, Pug (formerly | ||||
| Jade), Puppet, Python, QML, R, Racket, RDF TriG, RDF Turtle, Relax NG, | ||||
| reStructuredText, RPM spec, Ruby, SASS/SCSS, Scala, Slim, SML, Solidity, | ||||
| Sphinx, SQL, Stylus, Tcl, TeX, Texinfo, Twig, TypeScript, Vala, Verilog, | ||||
| VHDL, VimL, xHtml, XML, XSLT, XQuery, YACC, YAML, YANG data models, z80, Zope | ||||
| page templates, and Zsh. See the [manual][checkers] for details about the | ||||
| Sphinx, SQL, Stylus, Tcl, TeX, Texinfo, Twig, TypeScript, Vala, Verilog, VHDL, | ||||
| Vim help, VimL, xHtml, XML, XSLT, XQuery, YACC, YAML, YANG data models, z80, | ||||
| Zope page templates, and Zsh. See the [manual][checkers] for details about the | ||||
| corresponding supported checkers (`:help syntastic-checkers` in Vim). | ||||
|  | ||||
| A number of third-party Vim plugins also provide checkers for syntastic, for | ||||
| @ -264,13 +265,36 @@ For example to run `phpcs` and `phpmd`: | ||||
| ``` | ||||
|  | ||||
| This works for any checkers available for the current filetype, even if they | ||||
| aren't listed in `g:syntastic_<filetype>_checkers`.  You can't run checkers for | ||||
| "foreign" filetypes though (e.g. you can't run, say, a Python checker if the | ||||
| filetype of the current file is `php`). | ||||
| aren't listed in `g:syntastic_<filetype>_checkers`. | ||||
|  | ||||
| <a name="faqforeign"></a> | ||||
|  | ||||
| __4.3. Q. How can I run checkers for "foreign" filetypes against the current | ||||
| file?__ | ||||
|  | ||||
| A. You need to qualify the name of the "foreign" checker with the name | ||||
| of its filetype. For example to check `tex` files with the checker | ||||
| `language_check` (which normally acts only on files of type `text`), you can | ||||
| add `text/language_check` to the list fo checkers for `tex`: | ||||
| ```vim | ||||
| let g:syntastic_tex_checkers = ['lacheck', 'text/language_check'] | ||||
| ``` | ||||
|  | ||||
| This also works with `:SyntasticCheck`, e.g. the following command runs | ||||
| `text/language_check` against the current file regardless of the current | ||||
| filetype: | ||||
| ```vim | ||||
| :SyntasticCheck text/language_check | ||||
| ``` | ||||
|  | ||||
| Of course, the checkers specified this way need to be known to syntastic, and | ||||
| they need to be shown as available when you run `:SyntasticInfo`. You can't | ||||
| just make up a combination of a filetype and a program name and expect it to | ||||
| work as a checker. | ||||
|  | ||||
| <a name="faqaggregate"></a> | ||||
|  | ||||
| __4.3. Q. I have enabled multiple checkers for the current filetype. How can I | ||||
| __4.4. Q. I have enabled multiple checkers for the current filetype. How can I | ||||
| display all errors from all checkers together?__ | ||||
|  | ||||
| A. Set `g:syntastic_aggregate_errors` to 1 in your `vimrc`: | ||||
| @ -282,7 +306,7 @@ See `:help syntastic-aggregating-errors` for more details. | ||||
|  | ||||
| <a name="faqargs"></a> | ||||
|  | ||||
| __4.4. Q. How can I pass additional arguments to a checker?__ | ||||
| __4.5. Q. How can I pass additional arguments to a checker?__ | ||||
|  | ||||
| A. In most cases a command line is constructed using an internal function | ||||
| named `makeprgBuild()`, which provides a number of options that allow you to | ||||
| @ -306,8 +330,8 @@ list of options should be included in the [manual][checkers] | ||||
|  | ||||
| <a name="faqloclist"></a> | ||||
|  | ||||
| __4.5. Q. I run a checker and the location list is not updated...__   | ||||
| __4.5. Q. I run`:lopen` or `:lwindow` and the error window is empty...__ | ||||
| __4.6. Q. I run a checker and the location list is not updated...__   | ||||
| __4.6. 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` | ||||
| command, in order to minimise conflicts with other plugins. If you want the | ||||
| @ -319,7 +343,7 @@ let g:syntastic_always_populate_loc_list = 1 | ||||
|  | ||||
| <a name="faqlnext"></a> | ||||
|  | ||||
| __4.6. Q. How can I jump between the different errors without using the location | ||||
| __4.7. Q. How can I jump between the different errors without using the location | ||||
| list at the bottom of the window?__ | ||||
|  | ||||
| A. Vim provides several built-in commands for this. See `:help :lnext` and | ||||
| @ -331,7 +355,7 @@ mappings (among other things). | ||||
|  | ||||
| <a name="faqbdelete"></a> | ||||
|  | ||||
| __4.7. Q. The error window is closed automatically when I `:quit` the current buffer | ||||
| __4.8. Q. The error window is closed automatically when I `:quit` the current buffer | ||||
| but not when I `:bdelete` it?__ | ||||
|  | ||||
| A. There is no safe way to handle that situation automatically, but you can | ||||
| @ -343,7 +367,7 @@ cabbrev <silent> bd <C-r>=(getcmdtype()==#':' && getcmdpos()==1 ? 'lclose\|bdele | ||||
|  | ||||
| <a name="faqconfig"></a> | ||||
|  | ||||
| __4.8. My favourite checker needs to load a configuration file from the | ||||
| __4.9. My favourite checker needs to load a configuration file from the | ||||
| project's root rather than the current directory...__ | ||||
|  | ||||
| A. You can set up an `autocmd` to search for the configuration file in the | ||||
| @ -363,7 +387,7 @@ autocmd FileType javascript let b:syntastic_javascript_jscs_args = | ||||
|  | ||||
| <a name="faqstyle"></a> | ||||
|  | ||||
| __4.9. Q. What is the difference between syntax checkers and style checkers?__ | ||||
| __4.10. Q. What is the difference between syntax checkers and style checkers?__ | ||||
|  | ||||
| A. The errors and warnings they produce are highlighted differently and can | ||||
| be filtered by different rules, but otherwise the distinction is pretty much | ||||
| @ -393,7 +417,7 @@ See `:help syntastic_quiet_messages` for more information. | ||||
|  | ||||
| <a name="faqpython"></a> | ||||
|  | ||||
| __4.10. Q. How can I check scripts written for different versions of Python?__ | ||||
| __4.11. Q. How can I check scripts written for different versions of Python?__ | ||||
|  | ||||
| A. Install a Python version manager such as [virtualenv][virtualenv] | ||||
| or [pyenv][pyenv], activate the environment for the relevant version | ||||
| @ -409,7 +433,7 @@ scripts. | ||||
|  | ||||
| <a name="faqruby"></a> | ||||
|  | ||||
| __4.11. Q. How can I check scripts written for different versions of Ruby?__ | ||||
| __4.12. Q. How can I check scripts written for different versions of Ruby?__ | ||||
|  | ||||
| A. Install a Ruby version manager such as [rvm][rvm] or [rbenv][rbenv], | ||||
| activate the environment for the relevant version of Ruby, and install in it | ||||
| @ -424,7 +448,7 @@ scripts. | ||||
|  | ||||
| <a name="faqperl"></a> | ||||
|  | ||||
| __4.12. Q. The `perl` checker has stopped working...__ | ||||
| __4.13. Q. The `perl` checker has stopped working...__ | ||||
|  | ||||
| A. The `perl` checker runs `perl -c` against your file, which in turn | ||||
| __executes__ any `BEGIN`, `UNITCHECK`, and `CHECK` blocks, and any `use` | ||||
| @ -440,14 +464,14 @@ let g:syntastic_enable_perl_checker = 1 | ||||
|  | ||||
| <a name="faqrust"></a> | ||||
|  | ||||
| __4.13. Q. What happened to the `rustc` checker?__ | ||||
| __4.14. Q. What happened to the `rustc` checker?__ | ||||
|  | ||||
| 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. | ||||
|  | ||||
| <a name="faqtsc"></a> | ||||
|  | ||||
| __4.14. Q. What happened to the `tsc` checker?__ | ||||
| __4.15. Q. What happened to the `tsc` checker?__ | ||||
|  | ||||
| A. It didn't meet people's expectations and it has been removed. The plugin | ||||
| [tsuquyomi][tsuquyomi] comes packaged with a checker for TypeScript. If you | ||||
| @ -455,7 +479,7 @@ install this plugin the checker should be picked up automatically by syntastic. | ||||
|  | ||||
| <a name="faqxcrun"></a> | ||||
|  | ||||
| __4.15. Q. What happened to the `xcrun` checker?__ | ||||
| __4.16. Q. What happened to the `xcrun` checker?__ | ||||
|  | ||||
| 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 | ||||
|  | ||||
| @ -21,7 +21,7 @@ function! syntastic#log#warn(msg) abort " {{{2 | ||||
| endfunction " }}}2 | ||||
|  | ||||
| function! syntastic#log#error(msg) abort " {{{2 | ||||
|     execute "normal \<Esc>" | ||||
|     execute 'normal! \<Esc>' | ||||
|     echohl ErrorMsg | ||||
|     echomsg 'syntastic: error: ' . a:msg | ||||
|     echohl None | ||||
| @ -68,7 +68,7 @@ function! syntastic#log#debug(level, msg, ...) abort " {{{2 | ||||
|     let leader = s:_log_timestamp() | ||||
|     call s:_logRedirect(1) | ||||
|  | ||||
|     if a:0 > 0 | ||||
|     if a:0 | ||||
|         " filter out dictionary functions | ||||
|         echomsg leader . a:msg . ' ' . | ||||
|             \ strtrans(string(type(a:1) == type({}) || type(a:1) == type([]) ? | ||||
|  | ||||
| @ -102,6 +102,10 @@ function! syntastic#util#rmrf(what) abort " {{{2 | ||||
|     endif | ||||
| endfunction " }}}2 | ||||
|  | ||||
| function! syntastic#util#getbufvar(buf, name, ...) abort " {{{2 | ||||
|     return a:0 ? s:_getbufvar(a:buf, a:name, a:1) : getbufvar(a:buf, a:name) | ||||
| endfunction " }}}2 | ||||
|  | ||||
| " Search the first 5 lines of the file for a magic number and return a map | ||||
| " containing the args and the executable | ||||
| " | ||||
| @ -126,9 +130,19 @@ function! syntastic#util#parseShebang() abort " {{{2 | ||||
|     return { 'exe': '', 'args': [] } | ||||
| endfunction " }}}2 | ||||
|  | ||||
| " Get the value of a Vim variable.  Allow buffer variables to override global ones. | ||||
| function! syntastic#util#bufRawVar(buf, name, ...) abort " {{{2 | ||||
|     return s:_getbufvar(a:buf, a:name, get(g:, a:name, a:0 ? a:1 : '')) | ||||
| endfunction "}}}2 | ||||
|  | ||||
| " Get the value of a syntastic variable.  Allow buffer variables to override global ones. | ||||
| function! syntastic#util#bufVar(buf, name, ...) abort " {{{2 | ||||
|     return call('syntastic#util#bufRawVar', [a:buf, 'syntastic_' . a:name] + a:000) | ||||
| endfunction "}}}2 | ||||
|  | ||||
| " Get the value of a Vim variable.  Allow local variables to override global ones. | ||||
| function! syntastic#util#rawVar(name, ...) abort " {{{2 | ||||
|     return get(b:, a:name, get(g:, a:name, a:0 > 0 ? a:1 : '')) | ||||
|     return get(b:, a:name, get(g:, a:name, a:0 ? a:1 : '')) | ||||
| endfunction " }}}2 | ||||
|  | ||||
| " Get the value of a syntastic variable.  Allow local variables to override global ones. | ||||
| @ -165,11 +179,6 @@ function! syntastic#util#compareLexi(a, b) abort " {{{2 | ||||
|     return 0 | ||||
| endfunction " }}}2 | ||||
|  | ||||
| " strwidth() was added in Vim 7.3; if it doesn't exist, we use strlen() | ||||
| " and hope for the best :) | ||||
| let s:_width = function(exists('*strwidth') ? 'strwidth' : 'strlen') | ||||
| lockvar s:_width | ||||
|  | ||||
| function! syntastic#util#screenWidth(str, tabstop) abort " {{{2 | ||||
|     let chunks = split(a:str, "\t", 1) | ||||
|     let width = s:_width(chunks[-1]) | ||||
| @ -391,9 +400,6 @@ function! syntastic#util#setWids() abort " {{{2 | ||||
|     endfor | ||||
| endfunction " }}}2 | ||||
|  | ||||
| let s:_str2float = function(exists('*str2float') ? 'str2float' : 'str2nr') | ||||
| lockvar s:_str2float | ||||
|  | ||||
| function! syntastic#util#str2float(val) abort " {{{2 | ||||
|     return s:_str2float(a:val) | ||||
| endfunction " }}}2 | ||||
| @ -515,6 +521,11 @@ function! s:_translateElement(key, term) abort " {{{2 | ||||
|     return ret | ||||
| endfunction " }}}2 | ||||
|  | ||||
| " strwidth() was added in Vim 7.3; if it doesn't exist, we use strlen() | ||||
| " and hope for the best :) | ||||
| let s:_width = function(exists('*strwidth') ? 'strwidth' : 'strlen') | ||||
| lockvar s:_width | ||||
|  | ||||
| " @vimlint(EVL103, 1, a:flags) | ||||
| function! s:_delete_dumb(what, flags) abort " {{{2 | ||||
|     if !exists('s:rmrf') | ||||
| @ -561,6 +572,9 @@ function! s:_rmrf(what) abort " {{{2 | ||||
|     endif | ||||
| endfunction " }}}2 | ||||
|  | ||||
| let s:_str2float = function(exists('*str2float') ? 'str2float' : 'str2nr') | ||||
| lockvar s:_str2float | ||||
|  | ||||
| function! s:_float2str_smart(val) abort " {{{2 | ||||
|     return printf('%.1f', a:val) | ||||
| endfunction " }}}2 | ||||
| @ -572,6 +586,18 @@ endfunction " }}}2 | ||||
| let s:_float2str = function(has('float') ? 's:_float2str_smart' : 's:_float2str_dumb') | ||||
| lockvar s:_float2str | ||||
|  | ||||
| function! s:_getbufvar_dumb(buf, name, ...) abort " {{{2 | ||||
|     let ret = getbufvar(a:buf, a:name) | ||||
|     if a:0 && type(ret) == type('') && ret ==# '' | ||||
|         unlet! ret | ||||
|         let ret = a:1 | ||||
|     endif | ||||
|     return ret | ||||
| endfunction "}}}2 | ||||
|  | ||||
| let s:_getbufvar = function(v:version > 703 || (v:version == 703 && has('patch831')) ? 'getbufvar' : 's:_getbufvar_dumb') | ||||
| lockvar s:_getbufvar | ||||
|  | ||||
| " }}}1 | ||||
|  | ||||
| let &cpo = s:save_cpo | ||||
|  | ||||
| @ -117,6 +117,7 @@ SYNTAX CHECKERS BY LANGUAGE                          *syntastic-checkers-lang* | ||||
|     Vala.....................................|syntastic-checkers-vala| | ||||
|     Verilog..................................|syntastic-checkers-verilog| | ||||
|     VHDL.....................................|syntastic-checkers-vhdl| | ||||
|     Vim help.................................|syntastic-checkers-help| | ||||
|     VimL.....................................|syntastic-checkers-vim| | ||||
|  | ||||
|     xHTML....................................|syntastic-checkers-xhtml| | ||||
| @ -353,6 +354,7 @@ SYNTAX CHECKERS FOR ASCIIDOC                     *syntastic-checkers-asciidoc* | ||||
| The following checkers are available for AsciiDoc (filetype "asciidoc"): | ||||
|  | ||||
|     1. Asciidoc.................|syntastic-asciidoc-asciidoc| | ||||
|     2. proselint................|syntastic-asciidoc-proselint| | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 1. Asciidoc                                      *syntastic-asciidoc-asciidoc* | ||||
| @ -374,6 +376,27 @@ Checker options~ | ||||
| This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 2. proselint                                    *syntastic-asciidoc-proselint* | ||||
|  | ||||
| Name:        proselint | ||||
| Maintainer:  LCD 47 <lcd047@gmail.com> | ||||
|  | ||||
| "proselint" is a linter for prose. See the page for details: | ||||
|  | ||||
|     http://proselint.com/ | ||||
|  | ||||
| Checker options~ | ||||
|  | ||||
| This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| See also: |syntastic-help-proselint|, |syntastic-html-proselint|, | ||||
| |syntastic-markdown-proselint|, |syntastic-nroff-proselint|, | ||||
| |syntastic-pod-proselint|, |syntastic-rst-proselint|, | ||||
| |syntastic-tex-proselint|, |syntastic-texinfo-proselint|, | ||||
| |syntastic-text-proselint|, |syntastic-xhtml-proselint|. | ||||
|  | ||||
| ============================================================================== | ||||
| SYNTAX CHECKERS FOR ASSEMBLY LANGUAGES                *syntastic-checkers-asm* | ||||
|  | ||||
| @ -2586,10 +2609,12 @@ The following checkers are available for HTML (filetype "html"): | ||||
|     1. ESLint...................|syntastic-html-eslint| | ||||
|     2. gjslint..................|syntastic-html-gjslint| | ||||
|     3. HTML tidy................|syntastic-html-tidy| | ||||
|     4. JSHint...................|syntastic-html-jshint| | ||||
|     5. textlint.................|syntastic-html-textlint| | ||||
|     6. Validator................|syntastic-html-validator| | ||||
|     7. W3.......................|syntastic-html-w3| | ||||
|     4. HTMLHint.................|syntastic-html-htmlhint| | ||||
|     5. JSHint...................|syntastic-html-jshint| | ||||
|     6. proselint................|syntastic-html-proselint| | ||||
|     7. textlint.................|syntastic-html-textlint| | ||||
|     8. Validator................|syntastic-html-validator| | ||||
|     9. W3.......................|syntastic-html-w3| | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 1. ESLint                                              *syntastic-html-eslint* | ||||
| @ -2679,7 +2704,25 @@ List of additional empty tags, to be added to "--new-empty-tags". | ||||
| See also: |syntastic-xhtml-tidy|. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 4. jshint                                              *syntastic-html-jshint* | ||||
| 4. HTMLHint                                          *syntastic-html-htmlhint* | ||||
|  | ||||
| Name:        HTMLHint | ||||
| Maintainer:  LCD 47 <lcd047@gmail.com> | ||||
|  | ||||
| "JSHint" is a static code analysis tool for HTML. See the project's page for | ||||
| details: | ||||
|  | ||||
|     http://htmlhint.com/ | ||||
|  | ||||
| Syntastic requires "HTMLHint" version 0.9.13 or later. | ||||
|  | ||||
| Checker options~ | ||||
|  | ||||
| This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 5. jshint                                              *syntastic-html-jshint* | ||||
|  | ||||
| Name:        JSHint | ||||
| Maintainer:  LCD 47 <lcd047@gmail.com> | ||||
| @ -2725,7 +2768,28 @@ in "JSHint". If that is undesirable, your only other option is to leave | ||||
| See also: |syntastic-javascript-jshint|, |syntastic-xhtml-jshint|. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 5. textlint                                          *syntastic-html-textlint* | ||||
| 6. proselint                                        *syntastic-html-proselint* | ||||
|  | ||||
| Name:        proselint | ||||
| Maintainer:  LCD 47 <lcd047@gmail.com> | ||||
|  | ||||
| "proselint" is a linter for prose. See the page for details: | ||||
|  | ||||
|     http://proselint.com/ | ||||
|  | ||||
| Checker options~ | ||||
|  | ||||
| This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| See also: |syntastic-asciidoc-proselint|, |syntastic-help-proselint|, | ||||
| |syntastic-markdown-proselint|, |syntastic-nroff-proselint|, | ||||
| |syntastic-pod-proselint|, |syntastic-rst-proselint|, | ||||
| |syntastic-tex-proselint|, |syntastic-texinfo-proselint|, | ||||
| |syntastic-text-proselint|, |syntastic-xhtml-proselint|. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 7. textlint                                          *syntastic-html-textlint* | ||||
|  | ||||
| Name:        textlint | ||||
| Maintainer:  LCD 47 <lcd047@gmail.com> | ||||
| @ -2750,7 +2814,7 @@ work: | ||||
| See also: |syntastic-markdown-textlint|, |syntastic-text-textlint|. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 6. Validator                                        *syntastic-html-validator* | ||||
| 8. Validator                                        *syntastic-html-validator* | ||||
|  | ||||
| Name:        validator | ||||
| Maintainer:  LCD 47 <lcd047@gmail.com> | ||||
| @ -2823,7 +2887,7 @@ You can lookup the meaning of these codes in cURL's manual: | ||||
|     http://curl.haxx.se/docs/manpage.html#EXIT | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 7. W3                                                      *syntastic-html-w3* | ||||
| 9. W3                                                      *syntastic-html-w3* | ||||
|  | ||||
| Name:        w3 | ||||
| Maintainer:  Martin Grenfell <martin.grenfell@gmail.com> | ||||
| @ -2949,6 +3013,14 @@ Name:        javac | ||||
| Maintainers: Jochen Keil <jochen.keil@gmail.com> | ||||
|              Dmitry Geurkov <d.geurkov@gmail.com> | ||||
|  | ||||
| Note~ | ||||
|  | ||||
| This checker is not suitable for use with large Java projects. The design | ||||
| of "javac" makes this checker prone to running into various limitations of | ||||
| your shell, Vim, and your Java compiler. You are strongly advised to use | ||||
| something like Eclim (http://eclim.org/) instead of syntastic for projects of | ||||
| any substantial size or complexity. | ||||
|  | ||||
| Commands~ | ||||
|  | ||||
| The following commands are available: | ||||
| @ -3684,7 +3756,8 @@ SYNTAX CHECKERS FOR MARKDOWN                     *syntastic-checkers-markdown* | ||||
| The following checkers are available for Markdown (filetype "markdown"): | ||||
|  | ||||
|     1. Markdown lint tool.......|syntastic-markdown-mdl| | ||||
|     2. textlint.................|syntastic-markdown-textlint| | ||||
|     2. proselint................|syntastic-markdown-proselint| | ||||
|     3. textlint.................|syntastic-markdown-textlint| | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 1. Markdown lint tool                                 *syntastic-markdown-mdl* | ||||
| @ -3721,7 +3794,28 @@ to a set of valid "markdownlint-cli" options): > | ||||
|     let g:syntastic_markdown_mdl_args = "" | ||||
| < | ||||
| ------------------------------------------------------------------------------ | ||||
| 2. textlint                                      *syntastic-markdown-textlint* | ||||
| 2. proselint                                    *syntastic-markdown-proselint* | ||||
|  | ||||
| Name:        proselint | ||||
| Maintainer:  LCD 47 <lcd047@gmail.com> | ||||
|  | ||||
| "proselint" is a linter for prose. See the page for details: | ||||
|  | ||||
|     http://proselint.com/ | ||||
|  | ||||
| Checker options~ | ||||
|  | ||||
| This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| See also: |syntastic-asciidoc-proselint|, |syntastic-help-proselint|, | ||||
| |syntastic-html-proselint|, |syntastic-nroff-proselint|, | ||||
| |syntastic-pod-proselint|, |syntastic-rst-proselint|, | ||||
| |syntastic-tex-proselint|, |syntastic-texinfo-proselint|, | ||||
| |syntastic-text-proselint|, |syntastic-xhtml-proselint|. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 3. textlint                                      *syntastic-markdown-textlint* | ||||
|  | ||||
| Name:        textlint | ||||
| Maintainer:  LCD 47 <lcd047@gmail.com> | ||||
| @ -3836,6 +3930,7 @@ The following checkers are available for nroff (filetype "nroff"): | ||||
|  | ||||
|     1. Igor.....................|syntastic-nroff-igor| | ||||
|     2. mandoc...................|syntastic-nroff-mandoc| | ||||
|     3. proselint................|syntastic-nroff-proselint| | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 1. Igor                                                 *syntastic-nroff-igor* | ||||
| @ -3875,6 +3970,27 @@ Checker options~ | ||||
| This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 3. proselint                                       *syntastic-nroff-proselint* | ||||
|  | ||||
| Name:        proselint | ||||
| Maintainer:  LCD 47 <lcd047@gmail.com> | ||||
|  | ||||
| "proselint" is a linter for prose. See the page for details: | ||||
|  | ||||
|     http://proselint.com/ | ||||
|  | ||||
| Checker options~ | ||||
|  | ||||
| This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| See also: |syntastic-asciidoc-proselint|, |syntastic-help-proselint|, | ||||
| |syntastic-html-proselint|, |syntastic-markdown-proselint|, | ||||
| |syntastic-pod-proselint|, |syntastic-rst-proselint|, | ||||
| |syntastic-tex-proselint|, |syntastic-texinfo-proselint|, | ||||
| |syntastic-text-proselint|, |syntastic-xhtml-proselint|. | ||||
|  | ||||
| ============================================================================== | ||||
| SYNTAX CHECKERS FOR OBJECTIVE-C                      *syntastic-checkers-objc* | ||||
|  | ||||
| @ -4362,6 +4478,7 @@ SYNTAX CHECKERS FOR POD                               *syntastic-checkers-pod* | ||||
| The following checkers are available for POD (filetype "pod"): | ||||
|  | ||||
|     1. Pod::Checker.............|syntastic-pod-podchecker| | ||||
|     2. proselint................|syntastic-pod-proselint| | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 1. Pod::Checker                                     *syntastic-pod-podchecker* | ||||
| @ -4381,6 +4498,27 @@ accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| See also: |syntastic-perl-podchecker|. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 2. proselint                                         *syntastic-pod-proselint* | ||||
|  | ||||
| Name:        proselint | ||||
| Maintainer:  LCD 47 <lcd047@gmail.com> | ||||
|  | ||||
| "proselint" is a linter for prose. See the page for details: | ||||
|  | ||||
|     http://proselint.com/ | ||||
|  | ||||
| Checker options~ | ||||
|  | ||||
| This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| See also: |syntastic-asciidoc-proselint|, |syntastic-help-proselint|, | ||||
| |syntastic-html-proselint|, |syntastic-markdown-proselint|, | ||||
| |syntastic-nroff-proselint|, |syntastic-rst-proselint|, | ||||
| |syntastic-tex-proselint|, |syntastic-texinfo-proselint|, | ||||
| |syntastic-text-proselint|, |syntastic-xhtml-proselint|. | ||||
|  | ||||
| ============================================================================== | ||||
| SYNTAX CHECKERS FOR PUG (FORMERLY JADE)               *syntastic-checkers-pug* | ||||
|  | ||||
| @ -5034,12 +5172,34 @@ SYNTAX CHECKERS FOR RESTRUCTUREDTEXT                  *syntastic-checkers-rst* | ||||
|  | ||||
| The following checkers are available for reStructuredText (filetype "rst"): | ||||
|  | ||||
|     1. rst2pseudoxml............|syntastic-rst-rst2pseudoxml| | ||||
|     2. rstcheck.................|syntastic-rst-rstcheck| | ||||
|     3. Sphinx...................|syntastic-rst-sphinx| | ||||
|     1. proselint................|syntastic-rst-proselint| | ||||
|     2. rst2pseudoxml............|syntastic-rst-rst2pseudoxml| | ||||
|     3. rstcheck.................|syntastic-rst-rstcheck| | ||||
|     4. Sphinx...................|syntastic-rst-sphinx| | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 1. rst2pseudoxml                                 *syntastic-rst-rst2pseudoxml* | ||||
| 1. proselint                                         *syntastic-rst-proselint* | ||||
|  | ||||
| Name:        proselint | ||||
| Maintainer:  LCD 47 <lcd047@gmail.com> | ||||
|  | ||||
| "proselint" is a linter for prose. See the page for details: | ||||
|  | ||||
|     http://proselint.com/ | ||||
|  | ||||
| Checker options~ | ||||
|  | ||||
| This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| See also: |syntastic-asciidoc-proselint|, |syntastic-help-proselint|, | ||||
| |syntastic-html-proselint|, |syntastic-markdown-proselint|, | ||||
| |syntastic-nroff-proselint|, |syntastic-pod-proselint|, | ||||
| |syntastic-tex-proselint|, |syntastic-texinfo-proselint|, | ||||
| |syntastic-text-proselint|, |syntastic-xhtml-proselint|. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 2. rst2pseudoxml                                 *syntastic-rst-rst2pseudoxml* | ||||
|  | ||||
| Name:        rst2pseudoxml | ||||
| Maintainer:  James Rowe <jnrowe@gmail.com> | ||||
| @ -5057,7 +5217,7 @@ This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 2. rstcheck                                           *syntastic-rst-rstcheck* | ||||
| 3. rstcheck                                           *syntastic-rst-rstcheck* | ||||
|  | ||||
| Name:        rstcheck | ||||
| Maintainer:  Steven Myint <git@stevenmyint.com> | ||||
| @ -5073,7 +5233,7 @@ This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 3. Sphinx                                               *syntastic-rst-sphinx* | ||||
| 4. Sphinx                                               *syntastic-rst-sphinx* | ||||
|  | ||||
| Name:        sphinx | ||||
| Maintainer:  Buck Evan <buck@yelp.com> | ||||
| @ -5892,6 +6052,7 @@ The following checkers are available for TeX (filetype "tex"): | ||||
|  | ||||
|     1. ChkTeX...................|syntastic-tex-chktex| | ||||
|     2. lacheck..................|syntastic-tex-lacheck| | ||||
|     3. proselint................|syntastic-tex-proselint| | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 1. ChkTeX                                               *syntastic-tex-chktex* | ||||
| @ -5937,12 +6098,34 @@ Limitations~ | ||||
| At the time of this writing "lacheck" can't expand "\def" commands. As a | ||||
| result, most "\input" commands using macros are signaled as errors. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 3. proselint                                         *syntastic-tex-proselint* | ||||
|  | ||||
| Name:        proselint | ||||
| Maintainer:  LCD 47 <lcd047@gmail.com> | ||||
|  | ||||
| "proselint" is a linter for prose. See the page for details: | ||||
|  | ||||
|     http://proselint.com/ | ||||
|  | ||||
| Checker options~ | ||||
|  | ||||
| This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| See also: |syntastic-asciidoc-proselint|, |syntastic-help-proselint|, | ||||
| |syntastic-html-proselint|, |syntastic-markdown-proselint|, | ||||
| |syntastic-nroff-proselint|, |syntastic-pod-proselint|, | ||||
| |syntastic-rst-proselint|, |syntastic-texinfo-proselint|, | ||||
| |syntastic-text-proselint|, |syntastic-xhtml-proselint|. | ||||
|  | ||||
| ============================================================================== | ||||
| SYNTAX CHECKERS FOR TEXINFO                       *syntastic-checkers-texinfo* | ||||
|  | ||||
| The following checkers are available for Texinfo (filetype "texinfo"): | ||||
|  | ||||
|     1. Makeinfo.................|syntastic-texinfo-makeinfo| | ||||
|     2. proselint................|syntastic-texinfo-proselint| | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 1. Makeinfo                                       *syntastic-texinfo-makeinfo* | ||||
| @ -5960,6 +6143,27 @@ Checker options~ | ||||
| This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 2. proselint                                     *syntastic-texinfo-proselint* | ||||
|  | ||||
| Name:        proselint | ||||
| Maintainer:  LCD 47 <lcd047@gmail.com> | ||||
|  | ||||
| "proselint" is a linter for prose. See the page for details: | ||||
|  | ||||
|     http://proselint.com/ | ||||
|  | ||||
| Checker options~ | ||||
|  | ||||
| This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| See also: |syntastic-asciidoc-proselint|, |syntastic-help-proselint|, | ||||
| |syntastic-html-proselint|, |syntastic-markdown-proselint|, | ||||
| |syntastic-nroff-proselint|, |syntastic-pod-proselint|, | ||||
| |syntastic-rst-proselint|, |syntastic-tex-proselint|, | ||||
| |syntastic-text-proselint|, |syntastic-xhtml-proselint|. | ||||
|  | ||||
| ============================================================================== | ||||
| SYNTAX CHECKERS FOR TEXT                             *syntastic-checkers-text* | ||||
|  | ||||
| @ -5968,7 +6172,8 @@ The following checkers are available for plain text (filetype "text"): | ||||
|     1. atdtool..................|syntastic-text-atdtool| | ||||
|     2. Igor.....................|syntastic-text-igor| | ||||
|     3. language-check...........|syntastic-text-language_check| | ||||
|     4. textlint.................|syntastic-text-textlint| | ||||
|     4. proselint................|syntastic-text-proselint| | ||||
|     5. textlint.................|syntastic-text-textlint| | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 1. atdtool                                            *syntastic-text-atdtool* | ||||
| @ -6031,7 +6236,28 @@ This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 4. textlint                                          *syntastic-text-textlint* | ||||
| 4. proselint                                        *syntastic-text-proselint* | ||||
|  | ||||
| Name:        proselint | ||||
| Maintainer:  LCD 47 <lcd047@gmail.com> | ||||
|  | ||||
| "proselint" is a linter for prose. See the page for details: | ||||
|  | ||||
|     http://proselint.com/ | ||||
|  | ||||
| Checker options~ | ||||
|  | ||||
| This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| See also: |syntastic-asciidoc-proselint|, |syntastic-help-proselint|, | ||||
| |syntastic-html-proselint|, |syntastic-markdown-proselint|, | ||||
| |syntastic-nroff-proselint|, |syntastic-pod-proselint|, | ||||
| |syntastic-rst-proselint|, |syntastic-tex-proselint|, | ||||
| |syntastic-texinfo-proselint|, |syntastic-xhtml-proselint|. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 5. textlint                                          *syntastic-text-textlint* | ||||
|  | ||||
| Name:        textlint | ||||
| Maintainer:  LCD 47 <lcd047@gmail.com> | ||||
| @ -6394,6 +6620,34 @@ Checker options~ | ||||
| This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| ============================================================================== | ||||
| SYNTAX CHECKERS FOR VIM HELP                         *syntastic-checkers-help* | ||||
|  | ||||
| The following checkers are available for Vim help (filetype "help"): | ||||
|  | ||||
|     1. proselint................|syntastic-help-proselint| | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 1. proselint                                        *syntastic-help-proselint* | ||||
|  | ||||
| Name:        proselint | ||||
| Maintainer:  LCD 47 <lcd047@gmail.com> | ||||
|  | ||||
| "proselint" is a linter for prose. See the page for details: | ||||
|  | ||||
|     http://proselint.com/ | ||||
|  | ||||
| Checker options~ | ||||
|  | ||||
| This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| See also: |syntastic-asciidoc-proselint|, |syntastic-html-proselint|, | ||||
| |syntastic-markdown-proselint|, |syntastic-nroff-proselint|, | ||||
| |syntastic-pod-proselint|, |syntastic-rst-proselint|, | ||||
| |syntastic-tex-proselint|, |syntastic-texinfo-proselint|, | ||||
| |syntastic-text-proselint|, |syntastic-xhtml-proselint|. | ||||
|  | ||||
| ============================================================================== | ||||
| SYNTAX CHECKERS FOR VIML                              *syntastic-checkers-vim* | ||||
|  | ||||
| @ -6479,6 +6733,7 @@ The following checkers are available for xHTML (filetype "xhtml"): | ||||
|  | ||||
|     1. HTML Tidy................|syntastic-xhtml-tidy| | ||||
|     2. jshint...................|syntastic-xhtml-jshint| | ||||
|     3. proselint................|syntastic-xhtml-proselint| | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 1. HTML tidy                                            *syntastic-xhtml-tidy* | ||||
| @ -6553,6 +6808,27 @@ in "JSHint". If that is undesirable, your only other option is to leave | ||||
| < | ||||
| See also: |syntastic-html-jshint|, |syntastic-javascript-jshint|. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 3. proselint                                       *syntastic-xhtml-proselint* | ||||
|  | ||||
| Name:        proselint | ||||
| Maintainer:  LCD 47 <lcd047@gmail.com> | ||||
|  | ||||
| "proselint" is a linter for prose. See the page for details: | ||||
|  | ||||
|     http://proselint.com/ | ||||
|  | ||||
| Checker options~ | ||||
|  | ||||
| This checker is initialised using the "makeprgBuild()" function and thus it | ||||
| accepts the standard options described at |syntastic-config-makeprg|. | ||||
|  | ||||
| See also: |syntastic-asciidoc-proselint|, |syntastic-help-proselint|, | ||||
| |syntastic-html-proselint|, |syntastic-markdown-proselint|, | ||||
| |syntastic-nroff-proselint|, |syntastic-pod-proselint|, | ||||
| |syntastic-rst-proselint|, |syntastic-tex-proselint|, | ||||
| |syntastic-texinfo-proselint|, |syntastic-text-proselint|. | ||||
|  | ||||
| ============================================================================== | ||||
| SYNTAX CHECKERS FOR XML                               *syntastic-checkers-xml* | ||||
|  | ||||
|  | ||||
| @ -48,19 +48,20 @@ CONTENTS                                                  *syntastic-contents* | ||||
|     7.Compatibility with other software............|syntastic-compatibility| | ||||
|         7.1.airline................................|syntastic-airline| | ||||
|         7.2.The csh and tcsh shells................|syntastic-csh| | ||||
|         7.3.Eclim..................................|syntastic-eclim| | ||||
|         7.4.ferret.................................|syntastic-ferret| | ||||
|         7.5.The fish shell.........................|syntastic-fish| | ||||
|         7.6.The fizsh shell........................|syntastic-fizsh| | ||||
|         7.7.flagship...............................|syntastic-flagship| | ||||
|         7.8.powerline..............................|syntastic-powerline| | ||||
|         7.9.The PowerShell shell...................|syntastic-powershell| | ||||
|         7.10.python-mode...........................|syntastic-pymode| | ||||
|         7.11.vim-auto-save.........................|syntastic-vim-auto-save| | ||||
|         7.12.vim-go................................|syntastic-vim-go| | ||||
|         7.13.vim-virtualenv........................|syntastic-vim-virtualenv| | ||||
|         7.14.YouCompleteMe.........................|syntastic-ycm| | ||||
|         7.15.The zsh shell and MacVim..............|syntastic-zsh| | ||||
|         7.3.EasyGrep...............................|syntastic-easygrep| | ||||
|         7.4.Eclim..................................|syntastic-eclim| | ||||
|         7.5.ferret.................................|syntastic-ferret| | ||||
|         7.6.The fish shell.........................|syntastic-fish| | ||||
|         7.7.The fizsh shell........................|syntastic-fizsh| | ||||
|         7.8.flagship...............................|syntastic-flagship| | ||||
|         7.9.powerline..............................|syntastic-powerline| | ||||
|         7.10.The PowerShell shell..................|syntastic-powershell| | ||||
|         7.11.python-mode...........................|syntastic-pymode| | ||||
|         7.12.vim-auto-save.........................|syntastic-vim-auto-save| | ||||
|         7.13.vim-go................................|syntastic-vim-go| | ||||
|         7.14.vim-virtualenv........................|syntastic-vim-virtualenv| | ||||
|         7.15.YouCompleteMe.........................|syntastic-ycm| | ||||
|         7.16.The zsh shell and MacVim..............|syntastic-zsh| | ||||
|     8.About........................................|syntastic-about| | ||||
|     9.License......................................|syntastic-license| | ||||
|  | ||||
| @ -301,12 +302,22 @@ the order specified. The set by |'syntastic_aggregate_errors'| still apply. | ||||
| Example: > | ||||
|     :SyntasticCheck flake8 pylint | ||||
| < | ||||
| You can also run checkers for filetypes different from the current filetype | ||||
| by qualifying their names with their respective filetypes, like this: | ||||
| "<filetype>/<checker>". | ||||
|  | ||||
| Example: > | ||||
|     :SyntasticCheck lacheck text/language_check | ||||
| < | ||||
| :SyntasticInfo                                                *:SyntasticInfo* | ||||
|  | ||||
| The command takes an optional argument, and outputs information about the | ||||
| checkers available for the filetype named by said argument, or for the current | ||||
| filetype if no argument was provided. | ||||
|  | ||||
| Example: > | ||||
|     :SyntasticInfo python | ||||
| < | ||||
| :SyntasticReset                                              *:SyntasticReset* | ||||
|  | ||||
| Resets the list of errors and turns off all error notifiers. | ||||
| @ -761,6 +772,10 @@ If neither |'g:syntastic_<filetype>_checkers'| nor |'b:syntastic_checkers'| | ||||
| is set, a default list of checker is used. Beware however that this list | ||||
| deliberately kept minimal, for performance reasons. | ||||
|  | ||||
| You can specify checkers for other filetypes anywhere in these lists, by | ||||
| qualifying their names with their respective filetypes: > | ||||
|     let g:syntastic_tex_checkers = ["lacheck", "text/language_check"] | ||||
| < | ||||
| Take a look elsewhere in this manual to find out what checkers and filetypes | ||||
| are supported by syntastic: |syntastic-checkers|. | ||||
|  | ||||
| @ -854,9 +869,8 @@ omitting the filename from the command line: > | ||||
|     let g:syntastic_sml_smlnj_fname = "" | ||||
| < | ||||
|                                             *syntastic-config-no-makeprgbuild* | ||||
| For checkers that do not use the "makeprgBuild()" function you will have to | ||||
| look at the source code of the checker in question. If there are specific | ||||
| options that can be set they are normally documented in this manual (see | ||||
| For checkers that do not use the "makeprgBuild()" function any specific | ||||
| options that can be set should be documented in this manual (see | ||||
| |syntastic-checkers|). | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| @ -1017,7 +1031,16 @@ such as "zsh", "bash", "ksh", or even the original Bourne "sh": > | ||||
|     let g:syntastic_shell = "/bin/sh" | ||||
| < | ||||
| ------------------------------------------------------------------------------ | ||||
| 7.3. Eclim                                                   *syntastic-eclim* | ||||
| 7.3. EasyGrep                                             *syntastic-easygrep* | ||||
|  | ||||
| The "EasyGrep" Vim plugin (https://github.com/dkprice/vim-easygrep) can use | ||||
| either |quickfix| lists, or location lists (see |location-list|). Syntastic can | ||||
| be run along with "EasyGrep" provided that the latter is configured to use | ||||
| |quickfix| lists (which is the default at the time of this writing): > | ||||
|     let g:EasyGrepWindow = 0 | ||||
| < | ||||
| ------------------------------------------------------------------------------ | ||||
| 7.4. Eclim                                                   *syntastic-eclim* | ||||
|  | ||||
| Syntastic can be used together with "Eclim" (see http://eclim.org/). However, | ||||
| by default Eclim disables syntastic's checks for the filetypes it supports, in | ||||
| @ -1030,7 +1053,7 @@ run Eclim's validation for others. Please consult Eclim's documentation for | ||||
| details. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 7.4. ferret                                                 *syntastic-ferret* | ||||
| 7.5. ferret                                                 *syntastic-ferret* | ||||
|  | ||||
| At the time of this writing syntastic conflicts with the "ferret" Vim plugin | ||||
| (https://github.com/wincent/ferret). The "ferret" plugin assumes control over | ||||
| @ -1038,7 +1061,7 @@ loclist windows even when configured to use |quickfix| lists. This interferes | ||||
| with syntastic's functioning. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 7.5. The fish shell                                           *syntastic-fish* | ||||
| 7.6. The fish shell                                           *syntastic-fish* | ||||
|  | ||||
| At the time of this writing the "fish" shell (see http://fishshell.com/) | ||||
| doesn't support the standard UNIX syntax for file redirections, and thus it | ||||
| @ -1048,7 +1071,7 @@ original Bourne "sh": > | ||||
|     let g:syntastic_shell = "/bin/sh" | ||||
| < | ||||
| ------------------------------------------------------------------------------ | ||||
| 7.6. The fizsh shell                                         *syntastic-fizsh* | ||||
| 7.7. The fizsh shell                                         *syntastic-fizsh* | ||||
|  | ||||
| Using syntastic with the "fizsh" shell (see https://github.com/zsh-users/fizsh) | ||||
| is possible, but potentially problematic. In order to do it you'll need to set | ||||
| @ -1061,7 +1084,7 @@ interactive features of "fizsh". Using a more traditional shell such as "zsh", | ||||
|     let g:syntastic_shell = "/bin/sh" | ||||
| < | ||||
| ------------------------------------------------------------------------------ | ||||
| 7.7. flagship                                             *syntastic-flagship* | ||||
| 7.8. flagship                                             *syntastic-flagship* | ||||
|  | ||||
| The "flagship" Vim plugin (https://github.com/tpope/vim-flagship) has its | ||||
| own mechanism of showing flags on the |'statusline'|. To allow "flagship" | ||||
| @ -1071,7 +1094,7 @@ described in the |syntastic-statusline-flag| section above: > | ||||
|     autocmd User Flags call Hoist("window", "SyntasticStatuslineFlag") | ||||
| < | ||||
| ------------------------------------------------------------------------------ | ||||
| 7.8. powerline                                           *syntastic-powerline* | ||||
| 7.9. powerline                                           *syntastic-powerline* | ||||
|  | ||||
| The "powerline" Vim plugin (https://github.com/powerline/powerline) comes | ||||
| packaged with a syntastic segment. To customize this segment create a file | ||||
| @ -1088,7 +1111,7 @@ packaged with a syntastic segment. To customize this segment create a file | ||||
|     } | ||||
| < | ||||
| ------------------------------------------------------------------------------ | ||||
| 7.9. The PowerShell shell                               *syntastic-powershell* | ||||
| 7.10. The PowerShell shell                              *syntastic-powershell* | ||||
|  | ||||
| At the time of this writing syntastic is not compatible with using | ||||
| "PowerShell" (https://msdn.microsoft.com/en-us/powershell) as Vim's 'shell'. | ||||
| @ -1099,7 +1122,7 @@ You may still run Vim from "PowerShell", but you do have to point Vim's | ||||
|     set shell=/bin/sh | ||||
| < | ||||
| ------------------------------------------------------------------------------ | ||||
| 7.10. python-mode                                           *syntastic-pymode* | ||||
| 7.11. python-mode                                           *syntastic-pymode* | ||||
|  | ||||
| Syntastic can be used along with the "python-mode" Vim plugin (see | ||||
| https://github.com/klen/python-mode). However, they both run syntax checks by | ||||
| @ -1110,14 +1133,14 @@ for python in syntastic (see |'syntastic_mode_map'|), or disable lint checks in | ||||
|     let g:pymode_lint_on_write = 0 | ||||
| < | ||||
| ------------------------------------------------------------------------------ | ||||
| 7.11. vim-auto-save                                  *syntastic-vim-auto-save* | ||||
| 7.12. vim-auto-save                                  *syntastic-vim-auto-save* | ||||
|  | ||||
| Syntastic can be used together with the "vim-auto-save" Vim plugin (see | ||||
| https://github.com/907th/vim-auto-save). However, syntastic checks in active | ||||
| mode only work with "vim-auto-save" version 0.1.7 or later. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 7.12. vim-go                                                *syntastic-vim-go* | ||||
| 7.13. vim-go                                                *syntastic-vim-go* | ||||
|  | ||||
| Syntastic can be used along with the "vim-go" Vim plugin (see | ||||
| https://github.com/fatih/vim-go). However, both "vim-go" and syntastic run | ||||
| @ -1134,7 +1157,7 @@ stick with |quickfix| lists: > | ||||
|     let g:go_list_type = "quickfix" | ||||
| < | ||||
| ------------------------------------------------------------------------------ | ||||
| 7.13. vim-virtualenv                                *syntastic-vim-virtualenv* | ||||
| 7.14. vim-virtualenv                                *syntastic-vim-virtualenv* | ||||
|  | ||||
| At the time of this writing, syntastic can't run checkers installed | ||||
| in Python virtual environments activated by "vim-virtualenv" (see | ||||
| @ -1142,7 +1165,7 @@ https://github.com/jmcantrell/vim-virtualenv). This is a limitation of | ||||
| "vim-virtualenv". | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
| 7.14. YouCompleteMe                                            *syntastic-ycm* | ||||
| 7.15. YouCompleteMe                                            *syntastic-ycm* | ||||
|  | ||||
| Syntastic can be used together with the "YouCompleteMe" Vim plugin (see | ||||
| http://valloric.github.io/YouCompleteMe/). However, by default "YouCompleteMe" | ||||
| @ -1153,7 +1176,7 @@ have to set |g:ycm_show_diagnostics_ui| to 0. E.g.: > | ||||
|     let g:ycm_show_diagnostics_ui = 0 | ||||
| < | ||||
| ------------------------------------------------------------------------------ | ||||
| 7.15. The zsh shell and MacVim                                 *syntastic-zsh* | ||||
| 7.16. The zsh shell and MacVim                                 *syntastic-zsh* | ||||
|  | ||||
| If you're running MacVim together with the "zsh" shell (http://www.zsh.org/) | ||||
| you need to be aware that MacVim does not source your .zshrc file, but will | ||||
|  | ||||
| @ -19,7 +19,7 @@ if has('reltime') | ||||
|     lockvar! g:_SYNTASTIC_START | ||||
| endif | ||||
|  | ||||
| let g:_SYNTASTIC_VERSION = '3.7.0-226' | ||||
| let g:_SYNTASTIC_VERSION = '3.8.0-3' | ||||
| lockvar g:_SYNTASTIC_VERSION | ||||
|  | ||||
| " Sanity checks {{{1 | ||||
| @ -57,7 +57,7 @@ elseif executable('uname') | ||||
|     try | ||||
|         let g:_SYNTASTIC_UNAME = split(syntastic#util#system('uname'), "\n")[0] | ||||
|     catch /\m^Vim\%((\a\+)\)\=:E484/ | ||||
|         call syntastic#log#error("your shell " .  syntastic#util#var('shell') . " can't handle traditional UNIX syntax for redirections") | ||||
|         call syntastic#log#error("can't run external programs (misconfigured shell options?)") | ||||
|         finish | ||||
|     catch /\m^Vim\%((\a\+)\)\=:E684/ | ||||
|         let g:_SYNTASTIC_UNAME = 'Unknown' | ||||
| @ -136,9 +136,9 @@ let s:_DEBUG_DUMP_OPTIONS = [ | ||||
|         \ 'shellxquote' | ||||
|     \ ] | ||||
| for s:feature in [ | ||||
|         \ 'shellxescape', | ||||
|         \ 'shellslash', | ||||
|         \ 'autochdir', | ||||
|         \ 'shellslash', | ||||
|         \ 'shellxescape', | ||||
|     \ ] | ||||
|  | ||||
|     if exists('+' . s:feature) | ||||
| @ -178,11 +178,20 @@ let s:_quit_pre = [] | ||||
| " @vimlint(EVL103, 1, a:cmdLine) | ||||
| " @vimlint(EVL103, 1, a:argLead) | ||||
| function! s:CompleteCheckerName(argLead, cmdLine, cursorPos) abort " {{{2 | ||||
|     let checker_names = [] | ||||
|     for ft in s:_resolve_filetypes([]) | ||||
|         call extend(checker_names, s:registry.getNamesOfAvailableCheckers(ft)) | ||||
|     endfor | ||||
|     return join(checker_names, "\n") | ||||
|     let names = [] | ||||
|  | ||||
|     let sep_idx = stridx(a:argLead, '/') | ||||
|     if sep_idx >= 1 | ||||
|         let ft = a:argLead[: sep_idx-1] | ||||
|         call extend(names, map( s:registry.getNamesOfAvailableCheckers(ft), 'ft . "/" . v:val' )) | ||||
|     else | ||||
|         for ft in s:registry.resolveFiletypes(&filetype) | ||||
|             call extend(names, s:registry.getNamesOfAvailableCheckers(ft)) | ||||
|         endfor | ||||
|         call extend(names, map( copy(s:registry.getKnownFiletypes()), 'v:val . "/"' )) | ||||
|     endif | ||||
|  | ||||
|     return join(names, "\n") | ||||
| endfunction " }}}2 | ||||
| " @vimlint(EVL103, 0, a:cursorPos) | ||||
| " @vimlint(EVL103, 0, a:cmdLine) | ||||
| @ -220,7 +229,7 @@ endfunction " }}}2 | ||||
|  | ||||
| function! SyntasticInfo(...) abort " {{{2 | ||||
|     call s:modemap.modeInfo(a:000) | ||||
|     call s:registry.echoInfoFor(s:_resolve_filetypes(a:000)) | ||||
|     call s:registry.echoInfoFor(a:000) | ||||
|     call s:_explain_skip(a:000) | ||||
|     call syntastic#log#debugShowOptions(g:_SYNTASTIC_DEBUG_TRACE, s:_DEBUG_DUMP_OPTIONS) | ||||
|     call syntastic#log#debugDump(g:_SYNTASTIC_DEBUG_VARIABLES) | ||||
| @ -312,7 +321,7 @@ function! s:BufEnterHook(fname) abort " {{{2 | ||||
|         " TODO: this is needed because in recent versions of Vim lclose | ||||
|         " can no longer be called from BufWinLeave | ||||
|         " TODO: at this point there is no b:syntastic_loclist | ||||
|         let loclist = filter(copy(getloclist(0)), 'v:val["valid"] == 1') | ||||
|         let loclist = filter(copy(getloclist(0)), 'v:val["valid"]') | ||||
|         let owner = str2nr(getbufvar(buf, 'syntastic_owner_buffer')) | ||||
|         let buffers = syntastic#util#unique(map(loclist, 'v:val["bufnr"]') + (owner ? [owner] : [])) | ||||
|         if !empty(get(w:, 'syntastic_loclist_set', [])) && !empty(loclist) && empty(filter( buffers, 'syntastic#util#bufIsActive(v:val)' )) | ||||
| @ -384,14 +393,12 @@ function! s:UpdateErrors(buf, auto_invoked, checker_names) abort " {{{2 | ||||
|         return | ||||
|     endif | ||||
|  | ||||
|     let run_checks = !a:auto_invoked || s:modemap.doAutoChecking() | ||||
|     let run_checks = !a:auto_invoked || s:modemap.doAutoChecking(a:buf) | ||||
|     if run_checks | ||||
|         call s:CacheErrors(a:buf, a:checker_names) | ||||
|         call syntastic#util#setLastTick(a:buf) | ||||
|     else | ||||
|         if a:auto_invoked | ||||
|             return | ||||
|         endif | ||||
|     elseif a:auto_invoked | ||||
|         return | ||||
|     endif | ||||
|  | ||||
|     let loclist = g:SyntasticLoclist.current(a:buf) | ||||
| @ -453,20 +460,17 @@ function! s:CacheErrors(buf, checker_names) abort " {{{2 | ||||
|         call syntastic#log#debug(g:_SYNTASTIC_DEBUG_TRACE, 'getcwd() = ' . string(getcwd())) | ||||
|         " }}}3 | ||||
|  | ||||
|         let filetypes = s:_resolve_filetypes([]) | ||||
|         let aggregate_errors = syntastic#util#var('aggregate_errors') || len(filetypes) > 1 | ||||
|         let clist = s:registry.getCheckers(getbufvar(a:buf, '&filetype'), a:checker_names) | ||||
|  | ||||
|         let aggregate_errors = | ||||
|             \ syntastic#util#var('aggregate_errors') || len(syntastic#util#unique(map(copy(clist), 'v:val.getFiletype()'))) > 1 | ||||
|         let decorate_errors = aggregate_errors && syntastic#util#var('id_checkers') | ||||
|         let sort_aggregated_errors = aggregate_errors && syntastic#util#var('sort_aggregated_errors') | ||||
|  | ||||
|         let clist = [] | ||||
|         for type in filetypes | ||||
|             call extend(clist, s:registry.getCheckers(type, a:checker_names)) | ||||
|         endfor | ||||
|  | ||||
|         let names = [] | ||||
|         let unavailable_checkers = 0 | ||||
|         for checker in clist | ||||
|             let cname = checker.getFiletype() . '/' . checker.getName() | ||||
|             let cname = checker.getCName() | ||||
|             if !checker.isAvailable() | ||||
|                 call syntastic#log#debug(g:_SYNTASTIC_DEBUG_TRACE, 'CacheErrors: Checker ' . cname . ' is not available') | ||||
|                 let unavailable_checkers += 1 | ||||
| @ -687,11 +691,6 @@ endfunction " }}}2 | ||||
|  | ||||
| " Utilities {{{1 | ||||
|  | ||||
| function! s:_resolve_filetypes(filetypes) abort " {{{2 | ||||
|     let type = len(a:filetypes) ? a:filetypes[0] : &filetype | ||||
|     return split( get(g:syntastic_filetype_map, type, type), '\m\.' ) | ||||
| endfunction " }}}2 | ||||
|  | ||||
| function! s:_ignore_file(filename) abort " {{{2 | ||||
|     let fname = fnamemodify(a:filename, ':p') | ||||
|     for pattern in g:syntastic_ignore_files | ||||
|  | ||||
| @ -15,7 +15,7 @@ function! g:SyntasticChecker.New(args, ...) abort " {{{2 | ||||
|  | ||||
|     if a:0 | ||||
|         " redirected checker | ||||
|         let newObj._exec = get(a:args, 'exec', a:1['_exec']) | ||||
|         let newObj._exec_default = get(a:args, 'exec', a:1['_exec_default']) | ||||
|  | ||||
|         let filetype = a:1['_filetype'] | ||||
|         let name = a:1['_name'] | ||||
| @ -31,7 +31,10 @@ function! g:SyntasticChecker.New(args, ...) abort " {{{2 | ||||
|             let newObj._enable = a:1['_enable'] | ||||
|         endif | ||||
|     else | ||||
|         let newObj._exec = get(a:args, 'exec', newObj._name) | ||||
|         let newObj._exec_default = get(a:args, 'exec', newObj._name) | ||||
|         if newObj._exec_default ==# '' | ||||
|             let newObj._exec_default = '<dummy>' | ||||
|         endif | ||||
|         let prefix = 'SyntaxCheckers_' . newObj._filetype . '_' . newObj._name . '_' | ||||
|  | ||||
|         if has_key(a:args, 'enable') | ||||
| @ -62,23 +65,24 @@ function! g:SyntasticChecker.getName() abort " {{{2 | ||||
|     return self._name | ||||
| endfunction " }}}2 | ||||
|  | ||||
| function! g:SyntasticChecker.getCName() abort " {{{2 | ||||
|     return self._filetype . '/' . self._name | ||||
| endfunction " }}}2 | ||||
|  | ||||
| " Synchronise _exec with user's setting.  Force re-validation if needed. | ||||
| " | ||||
| " XXX: This function must be called at least once before calling either | ||||
| " getExec() or getExecEscaped().  Normally isAvailable() does that for you | ||||
| " automatically, but you should keep still this in mind if you change the | ||||
| " current checker workflow. | ||||
| function! g:SyntasticChecker.syncExec() abort " {{{2 | ||||
|     let user_exec = | ||||
|         \ expand( exists('b:syntastic_' . self._name . '_exec') ? b:syntastic_{self._name}_exec : | ||||
|         \ syntastic#util#var(self._filetype . '_' . self._name . '_exec'), 1 ) | ||||
|  | ||||
|     if user_exec !=# '' && user_exec !=# self._exec | ||||
|         let self._exec = user_exec | ||||
|         if has_key(self, '_available') | ||||
|             " we have a new _exec on the block, it has to be validated | ||||
|             call remove(self, '_available') | ||||
|         endif | ||||
| function! g:SyntasticChecker.syncExec(...) abort " {{{2 | ||||
|     if a:0 | ||||
|         let self._exec = a:1 | ||||
|     else | ||||
|         let suffix = self._name . '_exec' | ||||
|         let self._exec = expand( | ||||
|             \ syntastic#util#var(self._filetype . '_' . suffix, | ||||
|             \ syntastic#util#var(suffix, self._exec_default)), 1 ) | ||||
|     endif | ||||
| endfunction " }}}2 | ||||
|  | ||||
| @ -92,7 +96,7 @@ endfunction " }}}2 | ||||
|  | ||||
| function! g:SyntasticChecker.getLocListRaw() abort " {{{2 | ||||
|     let checker_start = reltime() | ||||
|     let name = self._filetype . '/' . self._name | ||||
|     let name = self.getCName() | ||||
|  | ||||
|     if has_key(self, '_enable') | ||||
|         let status = syntastic#util#var(self._enable, -1) | ||||
| @ -150,7 +154,7 @@ function! g:SyntasticChecker.getVersion(...) abort " {{{2 | ||||
|             call self.setVersion(parsed_ver) | ||||
|         else | ||||
|             call syntastic#log#ndebug(g:_SYNTASTIC_DEBUG_LOCLIST, 'checker output:', split(version_output, "\n", 1)) | ||||
|             call syntastic#log#error("checker " . self._filetype . "/" . self._name . ": can't parse version string (abnormal termination?)") | ||||
|             call syntastic#log#error("checker " . self.getCName() . ": can't parse version string (abnormal termination?)") | ||||
|         endif | ||||
|     endif | ||||
|     return get(self, '_version', []) | ||||
| @ -164,8 +168,8 @@ function! g:SyntasticChecker.setVersion(version) abort " {{{2 | ||||
| endfunction " }}}2 | ||||
|  | ||||
| function! g:SyntasticChecker.log(msg, ...) abort " {{{2 | ||||
|     let leader = self._filetype . '/' . self._name . ': ' | ||||
|     if a:0 > 0 | ||||
|     let leader = self.getCName() . ': ' | ||||
|     if a:0 | ||||
|         call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, leader . a:msg, a:1) | ||||
|     else | ||||
|         call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, leader . a:msg) | ||||
| @ -187,10 +191,15 @@ endfunction " }}}2 | ||||
|  | ||||
| function! g:SyntasticChecker.isAvailable() abort " {{{2 | ||||
|     call self.syncExec() | ||||
|  | ||||
|     if !has_key(self, '_available') | ||||
|         let self._available = self._isAvailableFunc() | ||||
|         let self._available = {} | ||||
|     endif | ||||
|     return self._available | ||||
|     if !has_key(self._available, self._exec) | ||||
|         let self._available[self._exec] = self._isAvailableFunc() | ||||
|     endif | ||||
|  | ||||
|     return self._available[self._exec] | ||||
| endfunction " }}}2 | ||||
|  | ||||
| function! g:SyntasticChecker.isDisabled() abort " {{{2 | ||||
|  | ||||
| @ -10,7 +10,7 @@ let g:SyntasticLoclist = {} | ||||
| function! g:SyntasticLoclist.New(rawLoclist) abort " {{{2 | ||||
|     let newObj = copy(self) | ||||
|  | ||||
|     let llist = filter(copy(a:rawLoclist), 'v:val["valid"] == 1') | ||||
|     let llist = filter(copy(a:rawLoclist), 'v:val["valid"]') | ||||
|  | ||||
|     for e in llist | ||||
|         if get(e, 'type', '') ==# '' | ||||
| @ -28,8 +28,8 @@ function! g:SyntasticLoclist.New(rawLoclist) abort " {{{2 | ||||
| endfunction " }}}2 | ||||
|  | ||||
| function! g:SyntasticLoclist.current(...) abort " {{{2 | ||||
|     let buf = a:0 > 1 ? a:1 : bufnr('') | ||||
|     let loclist = getbufvar(buf, 'syntastic_loclist') | ||||
|     let buf = a:0 ? a:1 : bufnr('') | ||||
|     let loclist = syntastic#util#getbufvar(buf, 'syntastic_loclist', {}) | ||||
|     if type(loclist) != type({}) || empty(loclist) | ||||
|         unlet! loclist | ||||
|         let loclist = g:SyntasticLoclist.New([]) | ||||
| @ -281,7 +281,7 @@ endfunction " }}}2 | ||||
| " | ||||
| "would return all errors for buffer 10. | ||||
| " | ||||
| "Note that all comparisons are done with ==? | ||||
| "Note that all string comparisons are done with ==? | ||||
| function! g:SyntasticLoclist.filter(filters) abort " {{{2 | ||||
|     let conditions = values(map(copy(a:filters), 's:_translate(v:key, v:val)')) | ||||
|     let filter = len(conditions) == 1 ? | ||||
|  | ||||
| @ -29,7 +29,8 @@ function! g:SyntasticModeMap.synch() abort " {{{2 | ||||
| endfunction " }}}2 | ||||
|  | ||||
| function! g:SyntasticModeMap.allowsAutoChecking(filetype) abort " {{{2 | ||||
|     let fts = split(a:filetype, '\m\.') | ||||
|     let registry = g:SyntasticRegistry.Instance() | ||||
|     let fts = registry.resolveFiletypes(a:filetype) | ||||
|  | ||||
|     if self.isPassive() | ||||
|         return self._isOneFiletypeActive(fts) | ||||
| @ -38,13 +39,13 @@ function! g:SyntasticModeMap.allowsAutoChecking(filetype) abort " {{{2 | ||||
|     endif | ||||
| endfunction " }}}2 | ||||
|  | ||||
| function! g:SyntasticModeMap.doAutoChecking() abort " {{{2 | ||||
|     let local_mode = get(b:, 'syntastic_mode', '') | ||||
| function! g:SyntasticModeMap.doAutoChecking(buf) abort " {{{2 | ||||
|     let local_mode = getbufvar(a:buf, 'syntastic_mode') | ||||
|     if local_mode ==# 'active' || local_mode ==# 'passive' | ||||
|         return local_mode ==# 'active' | ||||
|     endif | ||||
|  | ||||
|     return self.allowsAutoChecking(&filetype) | ||||
|     return self.allowsAutoChecking(getbufvar(a:buf, '&filetype')) | ||||
| endfunction " }}}2 | ||||
|  | ||||
| function! g:SyntasticModeMap.isPassive() abort " {{{2 | ||||
| @ -96,7 +97,7 @@ function! g:SyntasticModeMap.modeInfo(filetypes) abort " {{{2 | ||||
|             echomsg 'Local mode: ' . b:syntastic_mode | ||||
|         endif | ||||
|  | ||||
|         echomsg 'The current file will ' . (self.doAutoChecking() ? '' : 'not ') . 'be checked automatically' | ||||
|         echomsg 'The current file will ' . (self.doAutoChecking(bufnr('')) ? '' : 'not ') . 'be checked automatically' | ||||
|     endif | ||||
| endfunction " }}}2 | ||||
|  | ||||
|  | ||||
| @ -43,6 +43,7 @@ let s:_DEFAULT_CHECKERS = { | ||||
|         \ 'handlebars':    ['handlebars'], | ||||
|         \ 'haskell':       ['hdevtools', 'hlint'], | ||||
|         \ 'haxe':          ['haxe'], | ||||
|         \ 'help':          [], | ||||
|         \ 'hss':           ['hss'], | ||||
|         \ 'html':          ['tidy'], | ||||
|         \ 'jade':          ['jade_lint'], | ||||
| @ -188,24 +189,39 @@ endfunction " }}}2 | ||||
| " not checked for availability (that is, the corresponding IsAvailable() are | ||||
| " not run). | ||||
| function! g:SyntasticRegistry.getCheckers(ftalias, hints_list) abort " {{{2 | ||||
|     let ft = s:_normalise_filetype(a:ftalias) | ||||
|     call self._loadCheckersFor(ft, 0) | ||||
|  | ||||
|     let checkers_map = self._checkerMap[ft] | ||||
|     if empty(checkers_map) | ||||
|         return [] | ||||
|     endif | ||||
|  | ||||
|     call self._checkDeprecation(ft) | ||||
|     let ftlist = self.resolveFiletypes(a:ftalias) | ||||
|  | ||||
|     let names = | ||||
|         \ !empty(a:hints_list) ? syntastic#util#unique(a:hints_list) : | ||||
|         \ exists('b:syntastic_checkers') ? b:syntastic_checkers : | ||||
|         \ exists('g:syntastic_' . ft . '_checkers') ? g:syntastic_{ft}_checkers : | ||||
|         \ get(s:_DEFAULT_CHECKERS, ft, 0) | ||||
|         \ !empty(a:hints_list) ? a:hints_list : | ||||
|         \ exists('b:syntastic_checkers') ? b:syntastic_checkers : [] | ||||
|  | ||||
|     return type(names) == type([]) ? | ||||
|         \ self._filterCheckersByName(checkers_map, names) : [checkers_map[keys(checkers_map)[0]]] | ||||
|     let cnames = [] | ||||
|     if !empty(names) | ||||
|         for name in names | ||||
|             if name !~# '/' | ||||
|                 for ft in ftlist | ||||
|                     call add(cnames, ft . '/' . name) | ||||
|                 endfor | ||||
|             else | ||||
|                 call add(cnames, name) | ||||
|             endif | ||||
|         endfor | ||||
|     else | ||||
|         for ft in ftlist | ||||
|             call self._sanityCheck(ft) | ||||
|             let defs = | ||||
|                 \ exists('g:syntastic_' . ft . '_checkers') ? g:syntastic_{ft}_checkers : | ||||
|                 \ get(s:_DEFAULT_CHECKERS, ft, []) | ||||
|             call extend(cnames, map(copy(defs), 'stridx(v:val, "/") < 0 ? ft . "/" . v:val : v:val' )) | ||||
|         endfor | ||||
|     endif | ||||
|     let cnames = syntastic#util#unique(cnames) | ||||
|  | ||||
|     for ft in syntastic#util#unique(map( copy(cnames), 'v:val[: stridx(v:val, "/")-1]' )) | ||||
|         call self._loadCheckersFor(ft, 0) | ||||
|     endfor | ||||
|  | ||||
|     return self._filterCheckersByName(cnames) | ||||
| endfunction " }}}2 | ||||
|  | ||||
| " Same as getCheckers(), but keep only the available checkers.  This runs the | ||||
| @ -242,8 +258,12 @@ function! g:SyntasticRegistry.getNamesOfAvailableCheckers(ftalias) abort " {{{2 | ||||
|     return keys(filter( copy(self._checkerMap[ft]), 'v:val.isAvailable()' )) | ||||
| endfunction " }}}2 | ||||
|  | ||||
| function! g:SyntasticRegistry.resolveFiletypes(ftalias) abort " {{{2 | ||||
|     return map(split( get(g:syntastic_filetype_map, a:ftalias, a:ftalias), '\m\.' ), 's:_normalise_filetype(v:val)') | ||||
| endfunction " }}}2 | ||||
|  | ||||
| function! g:SyntasticRegistry.echoInfoFor(ftalias_list) abort " {{{2 | ||||
|     let ft_list = syntastic#util#unique(map( copy(a:ftalias_list), 's:_normalise_filetype(v:val)' )) | ||||
|     let ft_list = syntastic#util#unique(self.resolveFiletypes(empty(a:ftalias_list) ? &filetype : a:ftalias_list[0])) | ||||
|     if len(ft_list) != 1 | ||||
|         let available = [] | ||||
|         let active = [] | ||||
| @ -257,8 +277,8 @@ function! g:SyntasticRegistry.echoInfoFor(ftalias_list) abort " {{{2 | ||||
|     else | ||||
|         let ft = ft_list[0] | ||||
|         let available = self.getNamesOfAvailableCheckers(ft) | ||||
|         let active = map(self.getCheckersAvailable(ft, []), 'v:val.getName()') | ||||
|         let disabled = map(self.getCheckersDisabled(ft, []), 'v:val.getName()') | ||||
|         let active = map(self.getCheckersAvailable(ft, []), 'ft ==# v:val.getFiletype() ? v:val.getName() : v:val.getCName()') | ||||
|         let disabled = map(self.getCheckersDisabled(ft, []), 'ft ==# v:val.getFiletype() ? v:val.getName() : v:val.getCName()') | ||||
|     endif | ||||
|  | ||||
|     let cnt = len(available) | ||||
| @ -274,7 +294,7 @@ function! g:SyntasticRegistry.echoInfoFor(ftalias_list) abort " {{{2 | ||||
|     let cnt = len(disabled) | ||||
|     let plural = cnt != 1 ? 's' : '' | ||||
|     if len(disabled) | ||||
|         let cklist = join(sort(disabled)) | ||||
|         let cklist = join(sort(disabled, 's:_compare_checker_names')) | ||||
|         echomsg 'Checker' . plural . ' disabled for security reasons: ' . cklist | ||||
|     endif | ||||
|  | ||||
| @ -321,8 +341,20 @@ function! g:SyntasticRegistry._registerChecker(checker) abort " {{{2 | ||||
|     let self._checkerMap[ft][name] = a:checker | ||||
| endfunction " }}}2 | ||||
|  | ||||
| function! g:SyntasticRegistry._filterCheckersByName(checkers_map, list) abort " {{{2 | ||||
|     return filter( map(copy(a:list), 'get(a:checkers_map, v:val, {})'), '!empty(v:val)' ) | ||||
| function! g:SyntasticRegistry._findChecker(cname) abort " {{{2 | ||||
|     let sep_idx = stridx(a:cname, '/') | ||||
|     if sep_idx > 0 | ||||
|         let ft = a:cname[: sep_idx-1] | ||||
|         let name = a:cname[sep_idx+1 :] | ||||
|     else | ||||
|         let ft = &filetype | ||||
|         let name = a:cname | ||||
|     endif | ||||
|     return get(self._checkerMap[ft], name, {}) | ||||
| endfunction "}}}2 | ||||
|  | ||||
| function! g:SyntasticRegistry._filterCheckersByName(cnames) abort " {{{2 | ||||
|     return filter( map(copy(a:cnames), 'self._findChecker(v:val)'), '!empty(v:val)' ) | ||||
| endfunction " }}}2 | ||||
|  | ||||
| function! g:SyntasticRegistry._loadCheckersFor(filetype, force) abort " {{{2 | ||||
| @ -338,7 +370,14 @@ function! g:SyntasticRegistry._loadCheckersFor(filetype, force) abort " {{{2 | ||||
| endfunction " }}}2 | ||||
|  | ||||
| " Check for obsolete variable g:syntastic_<filetype>_checker | ||||
| function! g:SyntasticRegistry._checkDeprecation(filetype) abort " {{{2 | ||||
| function! g:SyntasticRegistry._sanityCheck(filetype) abort " {{{2 | ||||
|     if exists('g:syntastic_' . a:filetype . '_checkers') && | ||||
|         \ type(g:syntastic_{a:filetype}_checkers) != type([]) | ||||
|  | ||||
|         unlet! g:syntastic_{a:filetype}_checkers | ||||
|         call syntastic#log#error('variable g:syntastic_' . a:filetype . '_checkers has to be a list of strings') | ||||
|     endif | ||||
|  | ||||
|     if exists('g:syntastic_' . a:filetype . '_checker') && | ||||
|         \ !exists('g:syntastic_' . a:filetype . '_checkers') && | ||||
|         \ type(g:syntastic_{a:filetype}_checker) == type('') | ||||
| @ -375,6 +414,26 @@ function! s:_disabled_by_ycm(filetype) abort " {{{2 | ||||
|     return index(s:_YCM_TYPES, a:filetype) >= 0 | ||||
| endfunction " }}}2 | ||||
|  | ||||
| function! s:_compare_checker_names(a, b) abort " {{{2 | ||||
|     if a:a ==# a:b | ||||
|         return 0 | ||||
|     endif | ||||
|  | ||||
|     if stridx(a:a, '/') < 0 | ||||
|         if stridx(a:b, '/') < 0 | ||||
|             return a:a < a:b ? -1 : 1 | ||||
|         else | ||||
|             return -1 | ||||
|         endif | ||||
|     else | ||||
|         if stridx(a:b, '/') < 0 | ||||
|             return 1 | ||||
|         else | ||||
|             return a:a < a:b ? -1 : 1 | ||||
|         endif | ||||
|     endif | ||||
| endfunction " }}}2 | ||||
|  | ||||
| " }}}1 | ||||
|  | ||||
| " vim: set sw=4 sts=4 et fdm=marker: | ||||
|  | ||||
| @ -0,0 +1,23 @@ | ||||
| "============================================================================ | ||||
| "File:        proselint.vim | ||||
| "Description: Syntax checking plugin for syntastic | ||||
| "Maintainer:  LCD 47 <lcd047 at gmail dot com> | ||||
| "License:     This program is free software. It comes without any warranty, | ||||
| "             to the extent permitted by applicable law. You can redistribute | ||||
| "             it and/or modify it under the terms of the Do What The Fuck You | ||||
| "             Want To Public License, Version 2, as published by Sam Hocevar. | ||||
| "             See http://sam.zoy.org/wtfpl/COPYING for more details. | ||||
| " | ||||
| "============================================================================ | ||||
|  | ||||
| if exists('g:loaded_syntastic_asciidoc_proselint_checker') | ||||
|     finish | ||||
| endif | ||||
| let g:loaded_syntastic_asciidoc_proselint_checker = 1 | ||||
|  | ||||
| call g:SyntasticRegistry.CreateAndRegisterChecker({ | ||||
|     \ 'filetype': 'asciidoc', | ||||
|     \ 'name': 'proselint', | ||||
|     \ 'redirect': 'text/proselint'}) | ||||
|  | ||||
| " vim: set sw=4 sts=4 et fdm=marker: | ||||
| @ -1,94 +0,0 @@ | ||||
| "============================================================================ | ||||
| "File:        ghc-mod.vim | ||||
| "Description: Syntax checking plugin for syntastic.vim | ||||
| "Maintainer:  Anthony Carapetis <anthony.carapetis at gmail dot com> | ||||
| "License:     This program is free software. It comes without any warranty, | ||||
| "             to the extent permitted by applicable law. You can redistribute | ||||
| "             it and/or modify it under the terms of the Do What The Fuck You | ||||
| "             Want To Public License, Version 2, as published by Sam Hocevar. | ||||
| "             See http://sam.zoy.org/wtfpl/COPYING for more details. | ||||
| " | ||||
| "============================================================================ | ||||
|  | ||||
| if exists('g:loaded_syntastic_haskell_ghc_mod_checker') | ||||
|     finish | ||||
| endif | ||||
| let g:loaded_syntastic_haskell_ghc_mod_checker = 1 | ||||
|  | ||||
| let s:ghc_mod_new = -1 | ||||
|  | ||||
| let s:save_cpo = &cpo | ||||
| set cpo&vim | ||||
|  | ||||
| function! SyntaxCheckers_haskell_ghc_mod_IsAvailable() dict " {{{1 | ||||
|     if !executable(self.getExec()) | ||||
|         return 0 | ||||
|     endif | ||||
|  | ||||
|     " ghc-mod 5.0.0 and later needs the "version" command to print the | ||||
|     " version.  But the "version" command appeared in 4.1.0.  Thus, we need to | ||||
|     " know the version in order to know how to find out the version. :) | ||||
|  | ||||
|     " Try "ghc-mod version". | ||||
|     let version_output = split(syntastic#util#system(self.getExecEscaped() . ' version'), '\n', 1) | ||||
|     let ver = filter(copy(version_output), 'v:val =~# ''\m\sversion''') | ||||
|     if !len(ver) | ||||
|         " That didn't work.  Try "ghc-mod" alone. | ||||
|         let version_output = split(syntastic#util#system(self.getExecEscaped()), '\n', 1) | ||||
|         let ver = filter(copy(version_output), 'v:val =~# ''\m\sversion''') | ||||
|     endif | ||||
|     let parsed_ver = len(ver) ? syntastic#util#parseVersion(ver[0]) : [] | ||||
|  | ||||
|     if len(parsed_ver) | ||||
|         " Encouraged by the great success in finding out the version, now we | ||||
|         " need either a Vim that can handle NULs in system() output, or a | ||||
|         " ghc-mod that has the "--boundary" option. | ||||
|         call self.setVersion(parsed_ver) | ||||
|         let s:ghc_mod_new = syntastic#util#versionIsAtLeast(parsed_ver, [2, 1, 2]) | ||||
|     else | ||||
|         call syntastic#log#ndebug(g:_SYNTASTIC_DEBUG_LOCLIST, 'checker output:', version_output) | ||||
|         call syntastic#log#error("checker haskell/ghc_mod: can't parse version string (abnormal termination?)") | ||||
|         let s:ghc_mod_new = -1 | ||||
|     endif | ||||
|  | ||||
|     " ghc-mod 5.4.0 wants to run in the root directory of the project; | ||||
|     " syntastic can't cope with the resulting complications | ||||
|     " | ||||
|     " References: | ||||
|     " https://hackage.haskell.org/package/ghc-mod-5.4.0.0/changelog | ||||
|     let s:ghc_mod_bailout = syntastic#util#versionIsAtLeast(parsed_ver, [5, 4]) | ||||
|  | ||||
|     return (s:ghc_mod_new >= 0) && (v:version >= 704 || s:ghc_mod_new) && !s:ghc_mod_bailout | ||||
| endfunction " }}}1 | ||||
|  | ||||
| function! SyntaxCheckers_haskell_ghc_mod_GetLocList() dict " {{{1 | ||||
|     let makeprg = self.makeprgBuild({ | ||||
|         \ 'exe': self.getExecEscaped() . ' check' . (s:ghc_mod_new ? ' --boundary=""' : '') }) | ||||
|  | ||||
|     let errorformat = | ||||
|         \ '%-G%\s%#,' . | ||||
|         \ '%f:%l:%c:%trror: %m,' . | ||||
|         \ '%f:%l:%c:%tarning: %m,'. | ||||
|         \ '%f:%l:%c: %trror: %m,' . | ||||
|         \ '%f:%l:%c: %tarning: %m,' . | ||||
|         \ '%f:%l:%c:%m,' . | ||||
|         \ '%E%f:%l:%c:,' . | ||||
|         \ '%Z%m' | ||||
|  | ||||
|     return SyntasticMake({ | ||||
|         \ 'makeprg': makeprg, | ||||
|         \ 'errorformat': errorformat, | ||||
|         \ 'preprocess': 'iconv', | ||||
|         \ 'postprocess': ['compressWhitespace'], | ||||
|         \ 'returns': [0] }) | ||||
| endfunction " }}}1 | ||||
|  | ||||
| call g:SyntasticRegistry.CreateAndRegisterChecker({ | ||||
|     \ 'filetype': 'haskell', | ||||
|     \ 'name': 'ghc_mod', | ||||
|     \ 'exec': 'ghc-mod' }) | ||||
|  | ||||
| let &cpo = s:save_cpo | ||||
| unlet s:save_cpo | ||||
|  | ||||
| " vim: set sw=4 sts=4 et fdm=marker: | ||||
| @ -0,0 +1,23 @@ | ||||
| "============================================================================ | ||||
| "File:        proselint.vim | ||||
| "Description: Syntax checking plugin for syntastic | ||||
| "Maintainer:  LCD 47 <lcd047 at gmail dot com> | ||||
| "License:     This program is free software. It comes without any warranty, | ||||
| "             to the extent permitted by applicable law. You can redistribute | ||||
| "             it and/or modify it under the terms of the Do What The Fuck You | ||||
| "             Want To Public License, Version 2, as published by Sam Hocevar. | ||||
| "             See http://sam.zoy.org/wtfpl/COPYING for more details. | ||||
| " | ||||
| "============================================================================ | ||||
|  | ||||
| if exists('g:loaded_syntastic_help_proselint_checker') | ||||
|     finish | ||||
| endif | ||||
| let g:loaded_syntastic_help_proselint_checker = 1 | ||||
|  | ||||
| call g:SyntasticRegistry.CreateAndRegisterChecker({ | ||||
|     \ 'filetype': 'help', | ||||
|     \ 'name': 'proselint', | ||||
|     \ 'redirect': 'text/proselint'}) | ||||
|  | ||||
| " vim: set sw=4 sts=4 et fdm=marker: | ||||
| @ -0,0 +1,46 @@ | ||||
| "============================================================================ | ||||
| "File:        html.vim | ||||
| "Description: Syntax checking plugin for syntastic | ||||
| "Maintainer:  LCD 47 <lcd047 at gmail dot com> | ||||
| "License:     This program is free software. It comes without any warranty, | ||||
| "             to the extent permitted by applicable law. You can redistribute | ||||
| "             it and/or modify it under the terms of the Do What The Fuck You | ||||
| "             Want To Public License, Version 2, as published by Sam Hocevar. | ||||
| "             See http://sam.zoy.org/wtfpl/COPYING for more details. | ||||
| " | ||||
| "============================================================================ | ||||
|  | ||||
| if exists('g:loaded_syntastic_html_htmlhint_checker') | ||||
|     finish | ||||
| endif | ||||
| let g:loaded_syntastic_html_htmlhint_checker = 1 | ||||
|  | ||||
| let s:save_cpo = &cpo | ||||
| set cpo&vim | ||||
|  | ||||
| function! SyntaxCheckers_html_htmlhint_IsAvailable() dict | ||||
|     if !executable(self.getExec()) | ||||
|         return 0 | ||||
|     endif | ||||
|     return syntastic#util#versionIsAtLeast(self.getVersion(), [0, 9, 13]) | ||||
| endfunction | ||||
|  | ||||
| function! SyntaxCheckers_html_htmlhint_GetLocList() dict | ||||
|     let makeprg = self.makeprgBuild({ 'args_before': '--format unix' }) | ||||
|  | ||||
|     let errorformat = '%f:%l:%c: %m' | ||||
|  | ||||
|     return SyntasticMake({ | ||||
|         \ 'makeprg': makeprg, | ||||
|         \ 'errorformat': errorformat, | ||||
|         \ 'returns': [0, 1] }) | ||||
| endfunction | ||||
|  | ||||
| call g:SyntasticRegistry.CreateAndRegisterChecker({ | ||||
|     \ 'filetype': 'html', | ||||
|     \ 'name': 'htmlhint'}) | ||||
|  | ||||
| let &cpo = s:save_cpo | ||||
| unlet s:save_cpo | ||||
|  | ||||
| " vim: set sw=4 sts=4 et fdm=marker: | ||||
| @ -0,0 +1,23 @@ | ||||
| "============================================================================ | ||||
| "File:        proselint.vim | ||||
| "Description: Syntax checking plugin for syntastic | ||||
| "Maintainer:  LCD 47 <lcd047 at gmail dot com> | ||||
| "License:     This program is free software. It comes without any warranty, | ||||
| "             to the extent permitted by applicable law. You can redistribute | ||||
| "             it and/or modify it under the terms of the Do What The Fuck You | ||||
| "             Want To Public License, Version 2, as published by Sam Hocevar. | ||||
| "             See http://sam.zoy.org/wtfpl/COPYING for more details. | ||||
| " | ||||
| "============================================================================ | ||||
|  | ||||
| if exists('g:loaded_syntastic_html_proselint_checker') | ||||
|     finish | ||||
| endif | ||||
| let g:loaded_syntastic_html_proselint_checker = 1 | ||||
|  | ||||
| call g:SyntasticRegistry.CreateAndRegisterChecker({ | ||||
|     \ 'filetype': 'html', | ||||
|     \ 'name': 'proselint', | ||||
|     \ 'redirect': 'text/proselint'}) | ||||
|  | ||||
| " vim: set sw=4 sts=4 et fdm=marker: | ||||
| @ -0,0 +1,23 @@ | ||||
| "============================================================================ | ||||
| "File:        proselint.vim | ||||
| "Description: Syntax checking plugin for syntastic | ||||
| "Maintainer:  LCD 47 <lcd047 at gmail dot com> | ||||
| "License:     This program is free software. It comes without any warranty, | ||||
| "             to the extent permitted by applicable law. You can redistribute | ||||
| "             it and/or modify it under the terms of the Do What The Fuck You | ||||
| "             Want To Public License, Version 2, as published by Sam Hocevar. | ||||
| "             See http://sam.zoy.org/wtfpl/COPYING for more details. | ||||
| " | ||||
| "============================================================================ | ||||
|  | ||||
| if exists('g:loaded_syntastic_markdown_proselint_checker') | ||||
|     finish | ||||
| endif | ||||
| let g:loaded_syntastic_markdown_proselint_checker = 1 | ||||
|  | ||||
| call g:SyntasticRegistry.CreateAndRegisterChecker({ | ||||
|     \ 'filetype': 'markdown', | ||||
|     \ 'name': 'proselint', | ||||
|     \ 'redirect': 'text/proselint'}) | ||||
|  | ||||
| " vim: set sw=4 sts=4 et fdm=marker: | ||||
| @ -20,7 +20,7 @@ set cpo&vim | ||||
|  | ||||
| function! SyntaxCheckers_nasm_nasm_GetLocList() dict | ||||
|     let makeprg = self.makeprgBuild({ | ||||
|         \ 'args_after': '-X gnu -f elf' . | ||||
|         \ 'args_after': '-X gnu' . | ||||
|         \       ' -I ' . syntastic#util#shescape(expand('%:p:h', 1) . syntastic#util#Slash()) . | ||||
|         \       ' ' . syntastic#c#NullOutput() }) | ||||
|  | ||||
|  | ||||
| @ -0,0 +1,23 @@ | ||||
| "============================================================================ | ||||
| "File:        proselint.vim | ||||
| "Description: Syntax checking plugin for syntastic | ||||
| "Maintainer:  LCD 47 <lcd047 at gmail dot com> | ||||
| "License:     This program is free software. It comes without any warranty, | ||||
| "             to the extent permitted by applicable law. You can redistribute | ||||
| "             it and/or modify it under the terms of the Do What The Fuck You | ||||
| "             Want To Public License, Version 2, as published by Sam Hocevar. | ||||
| "             See http://sam.zoy.org/wtfpl/COPYING for more details. | ||||
| " | ||||
| "============================================================================ | ||||
|  | ||||
| if exists('g:loaded_syntastic_nroff_proselint_checker') | ||||
|     finish | ||||
| endif | ||||
| let g:loaded_syntastic_nroff_proselint_checker = 1 | ||||
|  | ||||
| call g:SyntasticRegistry.CreateAndRegisterChecker({ | ||||
|     \ 'filetype': 'nroff', | ||||
|     \ 'name': 'proselint', | ||||
|     \ 'redirect': 'text/proselint'}) | ||||
|  | ||||
| " vim: set sw=4 sts=4 et fdm=marker: | ||||
| @ -0,0 +1,23 @@ | ||||
| "============================================================================ | ||||
| "File:        proselint.vim | ||||
| "Description: Syntax checking plugin for syntastic | ||||
| "Maintainer:  LCD 47 <lcd047 at gmail dot com> | ||||
| "License:     This program is free software. It comes without any warranty, | ||||
| "             to the extent permitted by applicable law. You can redistribute | ||||
| "             it and/or modify it under the terms of the Do What The Fuck You | ||||
| "             Want To Public License, Version 2, as published by Sam Hocevar. | ||||
| "             See http://sam.zoy.org/wtfpl/COPYING for more details. | ||||
| " | ||||
| "============================================================================ | ||||
|  | ||||
| if exists('g:loaded_syntastic_pod_proselint_checker') | ||||
|     finish | ||||
| endif | ||||
| let g:loaded_syntastic_pod_proselint_checker = 1 | ||||
|  | ||||
| call g:SyntasticRegistry.CreateAndRegisterChecker({ | ||||
|     \ 'filetype': 'pod', | ||||
|     \ 'name': 'proselint', | ||||
|     \ 'redirect': 'text/proselint'}) | ||||
|  | ||||
| " vim: set sw=4 sts=4 et fdm=marker: | ||||
| @ -0,0 +1,23 @@ | ||||
| "============================================================================ | ||||
| "File:        proselint.vim | ||||
| "Description: Syntax checking plugin for syntastic | ||||
| "Maintainer:  LCD 47 <lcd047 at gmail dot com> | ||||
| "License:     This program is free software. It comes without any warranty, | ||||
| "             to the extent permitted by applicable law. You can redistribute | ||||
| "             it and/or modify it under the terms of the Do What The Fuck You | ||||
| "             Want To Public License, Version 2, as published by Sam Hocevar. | ||||
| "             See http://sam.zoy.org/wtfpl/COPYING for more details. | ||||
| " | ||||
| "============================================================================ | ||||
|  | ||||
| if exists('g:loaded_syntastic_rst_proselint_checker') | ||||
|     finish | ||||
| endif | ||||
| let g:loaded_syntastic_rst_proselint_checker = 1 | ||||
|  | ||||
| call g:SyntasticRegistry.CreateAndRegisterChecker({ | ||||
|     \ 'filetype': 'rst', | ||||
|     \ 'name': 'proselint', | ||||
|     \ 'redirect': 'text/proselint'}) | ||||
|  | ||||
| " vim: set sw=4 sts=4 et fdm=marker: | ||||
| @ -0,0 +1,23 @@ | ||||
| "============================================================================ | ||||
| "File:        proselint.vim | ||||
| "Description: Syntax checking plugin for syntastic | ||||
| "Maintainer:  LCD 47 <lcd047 at gmail dot com> | ||||
| "License:     This program is free software. It comes without any warranty, | ||||
| "             to the extent permitted by applicable law. You can redistribute | ||||
| "             it and/or modify it under the terms of the Do What The Fuck You | ||||
| "             Want To Public License, Version 2, as published by Sam Hocevar. | ||||
| "             See http://sam.zoy.org/wtfpl/COPYING for more details. | ||||
| " | ||||
| "============================================================================ | ||||
|  | ||||
| if exists('g:loaded_syntastic_tex_proselint_checker') | ||||
|     finish | ||||
| endif | ||||
| let g:loaded_syntastic_tex_proselint_checker = 1 | ||||
|  | ||||
| call g:SyntasticRegistry.CreateAndRegisterChecker({ | ||||
|     \ 'filetype': 'tex', | ||||
|     \ 'name': 'proselint', | ||||
|     \ 'redirect': 'text/proselint'}) | ||||
|  | ||||
| " vim: set sw=4 sts=4 et fdm=marker: | ||||
| @ -0,0 +1,23 @@ | ||||
| "============================================================================ | ||||
| "File:        proselint.vim | ||||
| "Description: Syntax checking plugin for syntastic | ||||
| "Maintainer:  LCD 47 <lcd047 at gmail dot com> | ||||
| "License:     This program is free software. It comes without any warranty, | ||||
| "             to the extent permitted by applicable law. You can redistribute | ||||
| "             it and/or modify it under the terms of the Do What The Fuck You | ||||
| "             Want To Public License, Version 2, as published by Sam Hocevar. | ||||
| "             See http://sam.zoy.org/wtfpl/COPYING for more details. | ||||
| " | ||||
| "============================================================================ | ||||
|  | ||||
| if exists('g:loaded_syntastic_texinfo_proselint_checker') | ||||
|     finish | ||||
| endif | ||||
| let g:loaded_syntastic_texinfo_proselint_checker = 1 | ||||
|  | ||||
| call g:SyntasticRegistry.CreateAndRegisterChecker({ | ||||
|     \ 'filetype': 'texinfo', | ||||
|     \ 'name': 'proselint', | ||||
|     \ 'redirect': 'text/proselint'}) | ||||
|  | ||||
| " vim: set sw=4 sts=4 et fdm=marker: | ||||
| @ -0,0 +1,45 @@ | ||||
| "============================================================================ | ||||
| "File:        proselint.vim | ||||
| "Description: Syntax checking plugin for syntastic | ||||
| "Maintainer:  LCD 47 <lcd047 at gmail dot com> | ||||
| "License:     This program is free software. It comes without any warranty, | ||||
| "             to the extent permitted by applicable law. You can redistribute | ||||
| "             it and/or modify it under the terms of the Do What The Fuck You | ||||
| "             Want To Public License, Version 2, as published by Sam Hocevar. | ||||
| "             See http://sam.zoy.org/wtfpl/COPYING for more details. | ||||
| " | ||||
| "============================================================================ | ||||
|  | ||||
| if exists('g:loaded_syntastic_text_proselint_checker') | ||||
|     finish | ||||
| endif | ||||
| let g:loaded_syntastic_text_proselint_checker = 1 | ||||
|  | ||||
| if !exists('g:syntastic_text_proselint_sort') | ||||
|     let g:syntastic_text_proselint_sort = 1 | ||||
| endif | ||||
|  | ||||
| let s:save_cpo = &cpo | ||||
| set cpo&vim | ||||
|  | ||||
| function! SyntaxCheckers_text_proselint_GetLocList() dict | ||||
|     let makeprg = self.makeprgBuild({}) | ||||
|  | ||||
|     let errorformat = '%f:%l:%c: %m' | ||||
|  | ||||
|     return SyntasticMake({ | ||||
|         \ 'makeprg': makeprg, | ||||
|         \ 'errorformat': errorformat, | ||||
|         \ 'defaults': { 'type': 'W', 'subtype': 'Style' }, | ||||
|         \ 'preprocess': 'iconv', | ||||
|         \ 'returns': [0, 1] }) | ||||
| endfunction | ||||
|  | ||||
| call g:SyntasticRegistry.CreateAndRegisterChecker({ | ||||
|     \ 'filetype': 'text', | ||||
|     \ 'name': 'proselint'}) | ||||
|  | ||||
| let &cpo = s:save_cpo | ||||
| unlet s:save_cpo | ||||
|  | ||||
| " vim: set sw=4 sts=4 et fdm=marker: | ||||
| @ -99,8 +99,7 @@ endfunction " }}}2 | ||||
|  | ||||
| call g:SyntasticRegistry.CreateAndRegisterChecker({ | ||||
|     \ 'filetype': 'vim', | ||||
|     \ 'name': 'vimlint', | ||||
|     \ 'exec': '' }) | ||||
|     \ 'name': 'vimlint' }) | ||||
|  | ||||
| let &cpo = s:save_cpo | ||||
| unlet s:save_cpo | ||||
|  | ||||
| @ -0,0 +1,23 @@ | ||||
| "============================================================================ | ||||
| "File:        proselint.vim | ||||
| "Description: Syntax checking plugin for syntastic | ||||
| "Maintainer:  LCD 47 <lcd047 at gmail dot com> | ||||
| "License:     This program is free software. It comes without any warranty, | ||||
| "             to the extent permitted by applicable law. You can redistribute | ||||
| "             it and/or modify it under the terms of the Do What The Fuck You | ||||
| "             Want To Public License, Version 2, as published by Sam Hocevar. | ||||
| "             See http://sam.zoy.org/wtfpl/COPYING for more details. | ||||
| " | ||||
| "============================================================================ | ||||
|  | ||||
| if exists('g:loaded_syntastic_xhtml_proselint_checker') | ||||
|     finish | ||||
| endif | ||||
| let g:loaded_syntastic_xhtml_proselint_checker = 1 | ||||
|  | ||||
| call g:SyntasticRegistry.CreateAndRegisterChecker({ | ||||
|     \ 'filetype': 'xhtml', | ||||
|     \ 'name': 'proselint', | ||||
|     \ 'redirect': 'text/proselint'}) | ||||
|  | ||||
| " vim: set sw=4 sts=4 et fdm=marker: | ||||
							
								
								
									
										1
									
								
								sources_non_forked/tabular/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								sources_non_forked/tabular/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| /doc/tags | ||||
							
								
								
									
										24
									
								
								sources_non_forked/tabular/LICENSE.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								sources_non_forked/tabular/LICENSE.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | ||||
| Copyright (c) 2016, Matthew J. Wozniski | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|     * Redistributions of source code must retain the above copyright notice, | ||||
|       this list of conditions and the following disclaimer. | ||||
|     * Redistributions in binary form must reproduce the above copyright | ||||
|       notice, this list of conditions and the following disclaimer in the | ||||
|       documentation and/or other materials provided with the distribution. | ||||
|     * The names of the contributors may not be used to endorse or promote | ||||
|       products derived from this software without specific prior written | ||||
|       permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY EXPRESS | ||||
| OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | ||||
| OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||||
| NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY DIRECT, INDIRECT, | ||||
| INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, | ||||
| OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||||
| LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||
| NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||||
| EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
							
								
								
									
										29
									
								
								sources_non_forked/tabular/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								sources_non_forked/tabular/README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | ||||
| Tabular | ||||
| ============== | ||||
| Sometimes, it's useful to line up text.  Naturally, it's nicer to have the | ||||
| computer do this for you, since aligning things by hand quickly becomes | ||||
| unpleasant.  While there are other plugins for aligning text, the ones I've | ||||
| tried are either impossibly difficult to understand and use, or too simplistic | ||||
| to handle complicated tasks.  This plugin aims to make the easy things easy | ||||
| and the hard things possible, without providing an unnecessarily obtuse | ||||
| interface.  It's still a work in progress, and criticisms are welcome. | ||||
|  | ||||
| See [Aligning Text with Tabular.vim](http://vimcasts.org/episodes/aligning-text-with-tabular-vim/) | ||||
| for a screencast that shows how Tabular.vim works. | ||||
|  | ||||
| See [doc/Tabular.txt](http://raw.github.com/godlygeek/tabular/master/doc/Tabular.txt) | ||||
| for detailed documentation. | ||||
|  | ||||
| Installation | ||||
| ============== | ||||
| If you don't have a preferred installation method, I recommend installing | ||||
| [pathogen.vim](https://github.com/tpope/vim-pathogen), and then simply | ||||
| copy and paste: | ||||
|  | ||||
|     mkdir -p ~/.vim/bundle | ||||
|     cd ~/.vim/bundle | ||||
|     git clone git://github.com/godlygeek/tabular.git | ||||
|  | ||||
| Once help tags have been generated (either using Pathogen's `:Helptags` | ||||
| command, or by pointing vim's `:helptags` command at the directory where you | ||||
| installed Tabular), you can view the manual with `:help tabular`. | ||||
							
								
								
									
										73
									
								
								sources_non_forked/tabular/after/plugin/TabularMaps.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								sources_non_forked/tabular/after/plugin/TabularMaps.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,73 @@ | ||||
| " Copyright (c) 2016, Matthew J. Wozniski | ||||
| " All rights reserved. | ||||
| " | ||||
| " Redistribution and use in source and binary forms, with or without | ||||
| " modification, are permitted provided that the following conditions are met: | ||||
| "     * Redistributions of source code must retain the above copyright notice, | ||||
| "       this list of conditions and the following disclaimer. | ||||
| "     * Redistributions in binary form must reproduce the above copyright | ||||
| "       notice, this list of conditions and the following disclaimer in the | ||||
| "       documentation and/or other materials provided with the distribution. | ||||
| "     * The names of the contributors may not be used to endorse or promote | ||||
| "       products derived from this software without specific prior written | ||||
| "       permission. | ||||
| " | ||||
| " THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY EXPRESS | ||||
| " OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | ||||
| " OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||||
| " NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY DIRECT, INDIRECT, | ||||
| " INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
| " LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, | ||||
| " OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||||
| " LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||
| " NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||||
| " EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| if !exists(':Tabularize') || get(g:, 'no_default_tabular_maps', 0) | ||||
|   finish " Tabular.vim wasn't loaded or the default maps are unwanted | ||||
| endif | ||||
|  | ||||
| let s:save_cpo = &cpo | ||||
| set cpo&vim | ||||
|  | ||||
| AddTabularPattern!  assignment      /[|&+*/%<>=!~-]\@<!\([<>!=]=\|=\~\)\@![|&+*/%<>=!~-]*=/l1r1 | ||||
| AddTabularPattern!  two_spaces      /  /l0 | ||||
|  | ||||
| AddTabularPipeline! multiple_spaces /  / map(a:lines, "substitute(v:val, '   *', '  ', 'g')") | tabular#TabularizeStrings(a:lines, '  ', 'l0') | ||||
|  | ||||
| AddTabularPipeline! argument_list   /(.*)/ map(a:lines, 'substitute(v:val, ''\s*\([(,)]\)\s*'', ''\1'', ''g'')') | ||||
|                                        \ | tabular#TabularizeStrings(a:lines, '[(,)]', 'l0') | ||||
|                                        \ | map(a:lines, 'substitute(v:val, ''\(\s*\),'', '',\1 '', "g")') | ||||
|                                        \ | map(a:lines, 'substitute(v:val, ''\s*)'', ")", "g")') | ||||
|  | ||||
| function! SplitCDeclarations(lines) | ||||
|   let rv = [] | ||||
|   for line in a:lines | ||||
|     " split the line into declaractions | ||||
|     let split = split(line, '\s*[,;]\s*') | ||||
|     " separate the type from the first declaration | ||||
|     let type = substitute(split[0], '\%(\%([&*]\s*\)*\)\=\k\+$', '', '') | ||||
|     " add the ; back on every declaration | ||||
|     call map(split, 'v:val . ";"') | ||||
|     " add the first element to the return as-is, and remove it from the list | ||||
|     let rv += [ remove(split, 0) ] | ||||
|     " transform the other elements by adding the type on at the beginning | ||||
|     call map(split, 'type . v:val') | ||||
|     " and add them all to the return | ||||
|     let rv += split | ||||
|   endfor | ||||
|   return rv | ||||
| endfunction | ||||
|  | ||||
| AddTabularPipeline! split_declarations /,.*;/ SplitCDeclarations(a:lines) | ||||
|  | ||||
| AddTabularPattern! ternary_operator /^.\{-}\zs?\|:/l1 | ||||
|  | ||||
| AddTabularPattern! cpp_io /<<\|>>/l1 | ||||
|  | ||||
| AddTabularPattern! pascal_assign /:=/l1 | ||||
|  | ||||
| AddTabularPattern! trailing_c_comments /\/\*\|\*\/\|\/\//l1 | ||||
|  | ||||
| let &cpo = s:save_cpo | ||||
| unlet s:save_cpo | ||||
							
								
								
									
										409
									
								
								sources_non_forked/tabular/autoload/tabular.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										409
									
								
								sources_non_forked/tabular/autoload/tabular.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,409 @@ | ||||
| " Tabular:     Align columnar data using regex-designated column boundaries | ||||
| " Maintainer:  Matthew Wozniski (godlygeek@gmail.com) | ||||
| " Date:        Thu, 03 May 2012 20:49:32 -0400 | ||||
| " Version:     1.0 | ||||
| " | ||||
| " Long Description: | ||||
| " Sometimes, it's useful to line up text.  Naturally, it's nicer to have the | ||||
| " computer do this for you, since aligning things by hand quickly becomes | ||||
| " unpleasant.  While there are other plugins for aligning text, the ones I've | ||||
| " tried are either impossibly difficult to understand and use, or too simplistic | ||||
| " to handle complicated tasks.  This plugin aims to make the easy things easy | ||||
| " and the hard things possible, without providing an unnecessarily obtuse | ||||
| " interface.  It's still a work in progress, and criticisms are welcome. | ||||
| " | ||||
| " License: | ||||
| " Copyright (c) 2012, Matthew J. Wozniski | ||||
| " All rights reserved. | ||||
| " | ||||
| " Redistribution and use in source and binary forms, with or without | ||||
| " modification, are permitted provided that the following conditions are met: | ||||
| "     * Redistributions of source code must retain the above copyright notice, | ||||
| "       this list of conditions and the following disclaimer. | ||||
| "     * Redistributions in binary form must reproduce the above copyright | ||||
| "       notice, this list of conditions and the following disclaimer in the | ||||
| "       documentation and/or other materials provided with the distribution. | ||||
| "     * The names of the contributors may not be used to endorse or promote | ||||
| "       products derived from this software without specific prior written | ||||
| "       permission. | ||||
| " | ||||
| " THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY EXPRESS | ||||
| " OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | ||||
| " OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||||
| " NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY DIRECT, INDIRECT, | ||||
| " INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
| " LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, | ||||
| " OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||||
| " LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||
| " NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||||
| " EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| " Stupid vimscript crap                                                   {{{1 | ||||
| let s:savecpo = &cpo | ||||
| set cpo&vim | ||||
|  | ||||
| " Private Functions                                                       {{{1 | ||||
|  | ||||
| " Return the number of bytes in a string after expanding tabs to spaces.  {{{2 | ||||
| " This expansion is done based on the current value of 'tabstop' | ||||
| if exists('*strdisplaywidth') | ||||
|   " Needs vim 7.3 | ||||
|   let s:Strlen = function("strdisplaywidth") | ||||
| else | ||||
|   function! s:Strlen(string) | ||||
|     " Implement the tab handling part of strdisplaywidth for vim 7.2 and | ||||
|     " earlier - not much that can be done about handling doublewidth | ||||
|     " characters. | ||||
|     let rv = 0 | ||||
|     let i = 0 | ||||
|  | ||||
|     for char in split(a:string, '\zs') | ||||
|       if char == "\t" | ||||
|         let rv += &ts - i | ||||
|         let i = 0 | ||||
|       else | ||||
|         let rv += 1 | ||||
|         let i = (i + 1) % &ts | ||||
|       endif | ||||
|     endfor | ||||
|  | ||||
|     return rv | ||||
|   endfunction | ||||
| endif | ||||
|  | ||||
| " Align a string within a field                                           {{{2 | ||||
| " These functions do not trim leading and trailing spaces. | ||||
|  | ||||
| " Right align 'string' in a field of size 'fieldwidth' | ||||
| function! s:Right(string, fieldwidth) | ||||
|   let spaces = a:fieldwidth - s:Strlen(a:string) | ||||
|   return matchstr(a:string, '^\s*') . repeat(" ", spaces) . substitute(a:string, '^\s*', '', '') | ||||
| endfunction | ||||
|  | ||||
| " Left align 'string' in a field of size 'fieldwidth' | ||||
| function! s:Left(string, fieldwidth) | ||||
|   let spaces = a:fieldwidth - s:Strlen(a:string) | ||||
|   return a:string . repeat(" ", spaces) | ||||
| endfunction | ||||
|  | ||||
| " Center align 'string' in a field of size 'fieldwidth' | ||||
| function! s:Center(string, fieldwidth) | ||||
|   let spaces = a:fieldwidth - s:Strlen(a:string) | ||||
|   let right = spaces / 2 | ||||
|   let left = right + (right * 2 != spaces) | ||||
|   return repeat(" ", left) . a:string . repeat(" ", right) | ||||
| endfunction | ||||
|  | ||||
| " Remove spaces around a string                                           {{{2 | ||||
|  | ||||
| " Remove all trailing spaces from a string. | ||||
| function! s:StripTrailingSpaces(string) | ||||
|   return matchstr(a:string, '^.\{-}\ze\s*$') | ||||
| endfunction | ||||
|  | ||||
| " Remove all leading spaces from a string. | ||||
| function! s:StripLeadingSpaces(string) | ||||
|   return matchstr(a:string, '^\s*\zs.*$') | ||||
| endfunction | ||||
|  | ||||
| " Split a string into fields and delimiters                               {{{2 | ||||
| " Like split(), but include the delimiters as elements | ||||
| " All odd numbered elements are delimiters | ||||
| " All even numbered elements are non-delimiters (including zero) | ||||
| function! s:SplitDelim(string, delim) | ||||
|   let rv = [] | ||||
|   let beg = 0 | ||||
|  | ||||
|   let len = len(a:string) | ||||
|   let searchoff = 0 | ||||
|  | ||||
|   while 1 | ||||
|     let mid = match(a:string, a:delim, beg + searchoff, 1) | ||||
|     if mid == -1 || mid == len | ||||
|       break | ||||
|     endif | ||||
|  | ||||
|     let matchstr = matchstr(a:string, a:delim, beg + searchoff, 1) | ||||
|     let length = strlen(matchstr) | ||||
|  | ||||
|     if length == 0 && beg == mid | ||||
|       " Zero-length match for a zero-length delimiter - advance past it | ||||
|       let searchoff += 1 | ||||
|       continue | ||||
|     endif | ||||
|  | ||||
|     if beg == mid | ||||
|       let rv += [ "" ] | ||||
|     else | ||||
|       let rv += [ a:string[beg : mid-1] ] | ||||
|     endif | ||||
|  | ||||
|     let rv += [ matchstr ] | ||||
|  | ||||
|     let beg = mid + length | ||||
|     let searchoff = 0 | ||||
|   endwhile | ||||
|  | ||||
|   let rv += [ strpart(a:string, beg) ] | ||||
|  | ||||
|   return rv | ||||
| endfunction | ||||
|  | ||||
| " Replace lines from `start' to `start + len - 1' with the given strings. {{{2 | ||||
| " If more lines are needed to show all strings, they will be added. | ||||
| " If there are too few strings to fill all lines, lines will be removed. | ||||
| function! s:SetLines(start, len, strings) | ||||
|   if a:start > line('$') + 1 || a:start < 1 | ||||
|     throw "Invalid start line!" | ||||
|   endif | ||||
|  | ||||
|   if len(a:strings) > a:len | ||||
|     let fensave = &fen | ||||
|     let view = winsaveview() | ||||
|     call append(a:start + a:len - 1, repeat([''], len(a:strings) - a:len)) | ||||
|     call winrestview(view) | ||||
|     let &fen = fensave | ||||
|   elseif len(a:strings) < a:len | ||||
|     let fensave = &fen | ||||
|     let view = winsaveview() | ||||
|     sil exe (a:start + len(a:strings)) . ',' .  (a:start + a:len - 1) . 'd_' | ||||
|     call winrestview(view) | ||||
|     let &fen = fensave | ||||
|   endif | ||||
|  | ||||
|   call setline(a:start, a:strings) | ||||
| endfunction | ||||
|  | ||||
| " Runs the given commandstring argument as an expression.                 {{{2 | ||||
| " The commandstring expression is expected to reference the a:lines argument. | ||||
| " If the commandstring expression returns a list the items of that list will | ||||
| " replace the items in a:lines, otherwise the expression is assumed to have | ||||
| " modified a:lines itself. | ||||
| function! s:FilterString(lines, commandstring) | ||||
|   exe 'let rv = ' . a:commandstring | ||||
|  | ||||
|   if type(rv) == type(a:lines) && rv isnot a:lines | ||||
|     call filter(a:lines, 0) | ||||
|     call extend(a:lines, rv) | ||||
|   endif | ||||
| endfunction | ||||
|  | ||||
| " Public API                                                              {{{1 | ||||
|  | ||||
| if !exists("g:tabular_default_format") | ||||
|   let g:tabular_default_format = "l1" | ||||
| endif | ||||
|  | ||||
| let s:formatelempat = '\%([lrc]\d\+\)' | ||||
|  | ||||
| function! tabular#ElementFormatPattern() | ||||
|   return s:formatelempat | ||||
| endfunction | ||||
|  | ||||
| " Given a list of strings and a delimiter, split each string on every | ||||
| " occurrence of the delimiter pattern, format each element according to either | ||||
| " the provided format (optional) or the default format, and join them back | ||||
| " together with enough space padding to guarantee that the nth delimiter of | ||||
| " each string is aligned. | ||||
| function! tabular#TabularizeStrings(strings, delim, ...) | ||||
|   if a:0 > 1 | ||||
|     echoerr "TabularizeStrings accepts only 2 or 3 arguments (got ".(a:0+2).")" | ||||
|     return 1 | ||||
|   endif | ||||
|  | ||||
|   let formatstr = (a:0 ? a:1 : g:tabular_default_format) | ||||
|  | ||||
|   if formatstr !~? s:formatelempat . '\+' | ||||
|     echoerr "Tabular: Invalid format \"" . formatstr . "\" specified!" | ||||
|     return 1 | ||||
|   endif | ||||
|  | ||||
|   let format = split(formatstr, s:formatelempat . '\zs') | ||||
|  | ||||
|   let lines = map(a:strings, 's:SplitDelim(v:val, a:delim)') | ||||
|  | ||||
|   " Strip spaces | ||||
|   "   - Only from non-delimiters; spaces in delimiters must have been matched | ||||
|   "     intentionally | ||||
|   "   - Don't strip leading spaces from the first element; we like indenting. | ||||
|   for line in lines | ||||
|     if len(line) == 1 && s:do_gtabularize | ||||
|       continue " Leave non-matching lines unchanged for GTabularize | ||||
|     endif | ||||
|  | ||||
|     if line[0] !~ '^\s*$' | ||||
|       let line[0] = s:StripTrailingSpaces(line[0]) | ||||
|     endif | ||||
|     if len(line) >= 3 | ||||
|       for i in range(2, len(line)-1, 2) | ||||
|         let line[i] = s:StripLeadingSpaces(s:StripTrailingSpaces(line[i])) | ||||
|       endfor | ||||
|     endif | ||||
|   endfor | ||||
|  | ||||
|   " Find the max length of each field | ||||
|   let maxes = [] | ||||
|   for line in lines | ||||
|     if len(line) == 1 && s:do_gtabularize | ||||
|       continue " non-matching lines don't affect field widths for GTabularize | ||||
|     endif | ||||
|  | ||||
|     for i in range(len(line)) | ||||
|       if i == len(maxes) | ||||
|         let maxes += [ s:Strlen(line[i]) ] | ||||
|       else | ||||
|         let maxes[i] = max( [ maxes[i], s:Strlen(line[i]) ] ) | ||||
|       endif | ||||
|     endfor | ||||
|   endfor | ||||
|  | ||||
|   let lead_blank = empty(filter(copy(lines), 'v:val[0] =~ "\\S"')) | ||||
|  | ||||
|   " Concatenate the fields, according to the format pattern. | ||||
|   for idx in range(len(lines)) | ||||
|     let line = lines[idx] | ||||
|  | ||||
|     if len(line) == 1 && s:do_gtabularize | ||||
|       let lines[idx] = line[0] " GTabularize doesn't change non-matching lines | ||||
|       continue | ||||
|     endif | ||||
|  | ||||
|     for i in range(len(line)) | ||||
|       let how = format[i % len(format)][0] | ||||
|       let pad = format[i % len(format)][1:-1] | ||||
|  | ||||
|       if how =~? 'l' | ||||
|         let field = s:Left(line[i], maxes[i]) | ||||
|       elseif how =~? 'r' | ||||
|         let field = s:Right(line[i], maxes[i]) | ||||
|       elseif how =~? 'c' | ||||
|         let field = s:Center(line[i], maxes[i]) | ||||
|       endif | ||||
|  | ||||
|       let line[i] = field . (lead_blank && i == 0 ? '' : repeat(" ", pad)) | ||||
|     endfor | ||||
|  | ||||
|     let lines[idx] = s:StripTrailingSpaces(join(line, '')) | ||||
|   endfor | ||||
| endfunction | ||||
|  | ||||
| " Apply 0 or more filters, in sequence, to selected text in the buffer    {{{2 | ||||
| " The lines to be filtered are determined as follows: | ||||
| "   If the function is called with a range containing multiple lines, then | ||||
| "     those lines will be used as the range. | ||||
| "   If the function is called with no range or with a range of 1 line, then | ||||
| "     if GTabularize mode is being used, | ||||
| "       the range will not be adjusted | ||||
| "     if "includepat" is not specified, | ||||
| "       that 1 line will be filtered, | ||||
| "     if "includepat" is specified and that line does not match it, | ||||
| "       no lines will be filtered | ||||
| "     if "includepat" is specified and that line does match it, | ||||
| "       all contiguous lines above and below the specified line matching the | ||||
| "       pattern will be filtered. | ||||
| " | ||||
| " The remaining arguments must each be a filter to apply to the text. | ||||
| " Each filter must either be a String evaluating to a function to be called. | ||||
| function! tabular#PipeRange(includepat, ...) range | ||||
|   exe a:firstline . ',' . a:lastline | ||||
|       \ . 'call tabular#PipeRangeWithOptions(a:includepat, a:000, {})' | ||||
| endfunction | ||||
|  | ||||
| " Extended version of tabular#PipeRange, which | ||||
| " 1) Takes the list of filters as an explicit list rather than as varargs | ||||
| " 2) Supports passing a dictionary of options to control the routine. | ||||
| "    Currently, the only supported option is 'mode', which determines whether | ||||
| "    to behave as :Tabularize or as :GTabularize | ||||
| " This allows me to add new features here without breaking API compatibility | ||||
| " in the future. | ||||
| function! tabular#PipeRangeWithOptions(includepat, filterlist, options) range | ||||
|   let top = a:firstline | ||||
|   let bot = a:lastline | ||||
|  | ||||
|   let s:do_gtabularize = (get(a:options, 'mode', '') ==# 'GTabularize') | ||||
|  | ||||
|   if !s:do_gtabularize | ||||
|     " In the default mode, apply range extension logic | ||||
|     if a:includepat != '' && top == bot | ||||
|       if top < 0 || top > line('$') || getline(top) !~ a:includepat | ||||
|         return | ||||
|       endif | ||||
|       while top > 1 && getline(top-1) =~ a:includepat | ||||
|         let top -= 1 | ||||
|       endwhile | ||||
|       while bot < line('$') && getline(bot+1) =~ a:includepat | ||||
|         let bot += 1 | ||||
|       endwhile | ||||
|     endif | ||||
|   endif | ||||
|  | ||||
|   let lines = map(range(top, bot), 'getline(v:val)') | ||||
|  | ||||
|   for filter in a:filterlist | ||||
|     if type(filter) != type("") | ||||
|       echoerr "PipeRange: Bad filter: " . string(filter) | ||||
|     endif | ||||
|  | ||||
|     call s:FilterString(lines, filter) | ||||
|  | ||||
|     unlet filter | ||||
|   endfor | ||||
|  | ||||
|   call s:SetLines(top, bot - top + 1, lines) | ||||
| endfunction | ||||
|  | ||||
| " Part of the public interface so interested pipelines can query this and | ||||
| " adjust their behavior appropriately. | ||||
| function! tabular#DoGTabularize() | ||||
|   return s:do_gtabularize | ||||
| endfunction | ||||
|  | ||||
| function! s:SplitDelimTest(string, delim, expected) | ||||
|   let result = s:SplitDelim(a:string, a:delim) | ||||
|  | ||||
|   if result !=# a:expected | ||||
|     echomsg 'Test failed!' | ||||
|     echomsg '  string=' . string(a:string) . '  delim=' . string(a:delim) | ||||
|     echomsg '  Returned=' . string(result) | ||||
|     echomsg '  Expected=' . string(a:expected) | ||||
|   endif | ||||
| endfunction | ||||
|  | ||||
| function! tabular#SplitDelimUnitTest() | ||||
|   let assignment = '[|&+*/%<>=!~-]\@<!\([<>!=]=\|=\~\)\@![|&+*/%<>=!~-]*=' | ||||
|   let two_spaces = '  ' | ||||
|   let ternary_operator = '^.\{-}\zs?\|:' | ||||
|   let cpp_io = '<<\|>>' | ||||
|   let pascal_assign = ':=' | ||||
|   let trailing_c_comments = '\/\*\|\*\/\|\/\/' | ||||
|  | ||||
|   call s:SplitDelimTest('a+=b',    assignment, ['a', '+=', 'b']) | ||||
|   call s:SplitDelimTest('a-=b',    assignment, ['a', '-=', 'b']) | ||||
|   call s:SplitDelimTest('a!=b',    assignment, ['a!=b']) | ||||
|   call s:SplitDelimTest('a==b',    assignment, ['a==b']) | ||||
|   call s:SplitDelimTest('a&=b',    assignment, ['a', '&=', 'b']) | ||||
|   call s:SplitDelimTest('a|=b',    assignment, ['a', '|=', 'b']) | ||||
|   call s:SplitDelimTest('a=b=c',   assignment, ['a', '=', 'b', '=', 'c']) | ||||
|  | ||||
|   call s:SplitDelimTest('a  b  c', two_spaces, ['a', '  ', 'b', '  ', 'c']) | ||||
|   call s:SplitDelimTest('a b   c', two_spaces, ['a b', '  ', ' c']) | ||||
|   call s:SplitDelimTest('ab    c', two_spaces, ['ab', '  ', '', '  ', 'c']) | ||||
|  | ||||
|   call s:SplitDelimTest('a?b:c',   ternary_operator, ['a', '?', 'b', ':', 'c']) | ||||
|  | ||||
|   call s:SplitDelimTest('a<<b<<c', cpp_io, ['a', '<<', 'b', '<<', 'c']) | ||||
|  | ||||
|   call s:SplitDelimTest('a:=b=c',  pascal_assign, ['a', ':=', 'b=c']) | ||||
|  | ||||
|   call s:SplitDelimTest('x//foo',  trailing_c_comments, ['x', '//', 'foo']) | ||||
|   call s:SplitDelimTest('x/*foo*/',trailing_c_comments, ['x', '/*', 'foo', '*/', '']) | ||||
|  | ||||
|   call s:SplitDelimTest('#ab#cd#ef', '[^#]*', ['#', 'ab', '#', 'cd', '#', 'ef', '']) | ||||
|   call s:SplitDelimTest('#ab#cd#ef', '#\zs',  ['#', '', 'ab#', '', 'cd#', '', 'ef']) | ||||
| endfunction | ||||
|  | ||||
| " Stupid vimscript crap, part 2                                           {{{1 | ||||
| let &cpo = s:savecpo | ||||
| unlet s:savecpo | ||||
|  | ||||
| " vim:set sw=2 sts=2 fdm=marker: | ||||
							
								
								
									
										260
									
								
								sources_non_forked/tabular/doc/Tabular.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										260
									
								
								sources_non_forked/tabular/doc/Tabular.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,260 @@ | ||||
| *Tabular.txt*   Configurable, flexible, intuitive text aligning | ||||
|  | ||||
|                                                        *tabular* *tabular.vim* | ||||
|  | ||||
|        #|#|#|#|#|          #|                  #|                     ~ | ||||
|            #|      #|#|#|  #|#|#|    #|    #|  #|    #|#|#|  #|  #|#| ~ | ||||
|            #|    #|    #|  #|    #|  #|    #|  #|  #|    #|  #|#|     ~ | ||||
|            #|    #|    #|  #|    #|  #|    #|  #|  #|    #|  #|       ~ | ||||
|            #|      #|#|#|  #|#|#|      #|#|#|  #|    #|#|#|  #|       ~ | ||||
|  | ||||
|                                                   For Vim version 7.0 or newer | ||||
|  | ||||
|                                By Matt Wozniski | ||||
|                                 mjw@drexel.edu | ||||
|  | ||||
|                                Reference Manual ~ | ||||
|  | ||||
|                                                                  *tabular-toc* | ||||
|  | ||||
| 1. Description                                           |tabular-intro| | ||||
| 2. Walkthrough                                           |tabular-walkthrough| | ||||
| 3. Scripting                                             |tabular-scripting| | ||||
|  | ||||
| The functionality mentioned here is a plugin, see |add-plugin|. | ||||
| You can avoid loading this plugin by setting the "Tabular_loaded" global | ||||
| variable in your |vimrc| file: > | ||||
|     :let g:tabular_loaded = 1 | ||||
|  | ||||
| ============================================================================== | ||||
| 1. Description                                                 *tabular-intro* | ||||
|  | ||||
| Sometimes, it's useful to line up text.  Naturally, it's nicer to have the | ||||
| computer do this for you, since aligning things by hand quickly becomes | ||||
| unpleasant.  While there are other plugins for aligning text, the ones I've | ||||
| tried are either impossibly difficult to understand and use, or too simplistic | ||||
| to handle complicated tasks.  This plugin aims to make the easy things easy | ||||
| and the hard things possible, without providing an unnecessarily obtuse | ||||
| interface.  It's still a work in progress, and criticisms are welcome. | ||||
|  | ||||
| ============================================================================== | ||||
| 2. Walkthrough                             *tabular-walkthrough* *:Tabularize* | ||||
|  | ||||
| Tabular's commands are based largely on regular expressions.  The basic | ||||
| technique used by Tabular is taking some regex to match field delimiters, | ||||
| splitting the input lines at those delimiters, trimming unnecessary spaces | ||||
| from the non-delimiter parts, padding the non-delimiter parts of the lines | ||||
| with spaces to make them the same length, and joining things back together | ||||
| again. | ||||
|  | ||||
| For instance, consider starting with the following lines: | ||||
| > | ||||
|     Some short phrase,some other phrase | ||||
|     A much longer phrase here,and another long phrase | ||||
| < | ||||
| Let's say we want to line these lines up at the commas.  We can tell | ||||
| Tabularize to do this by passing a pattern matching , to the Tabularize | ||||
| command: | ||||
| > | ||||
|   :Tabularize /, | ||||
|  | ||||
|     Some short phrase         , some other phrase | ||||
|     A much longer phrase here , and another long phrase | ||||
| < | ||||
| I encourage you to try copying those lines to another buffer and trying to | ||||
| call :Tabularize.  You'll want to take notice of two things quickly: First, | ||||
| instead of requiring a range, Tabularize tries to figure out what you want to | ||||
| happen.  Since it knows that you want to act on lines matching a comma, it | ||||
| will look upwards and downwards for lines around the current line that match a | ||||
| comma, and consider all contiguous lines matching the pattern to be the range | ||||
| to be acted upon.  You can always override this by specifying a range, though. | ||||
|  | ||||
| The second thing you should notice is that you'll almost certainly be able to | ||||
| abbreviate :Tabularize to :Tab - using this form in mappings and scripts is | ||||
| discouraged as it will make conflicts with other scripts more likely, but for | ||||
| interactive use it's a nice timesaver.  Another convenience feature is that | ||||
| running :Tabularize without providing a new pattern will cause it to reuse the | ||||
| last pattern it was called with. | ||||
|  | ||||
| So, anyway, now the commas line up.  Splitting the lines on commas, Tabular | ||||
| realized that 'Some short phrase' would need to be padded with spaces to match | ||||
| the length of 'A much longer phrase here', and it did that before joining the | ||||
| lines back together.  You'll also notice that, in addition to the spaces | ||||
| inserting for padding, extra spaces were inserted between fields.  That's | ||||
| because by default, Tabular prints things left-aligned with one space between | ||||
| fields.  If you wanted to print things right-aligned with no spaces between | ||||
| fields, you would provide a different format to the Tabularize command: | ||||
| > | ||||
|   :Tabularize /,/r0 | ||||
|  | ||||
|             Some short phrase,      some other phrase | ||||
|     A much longer phrase here,and another long phrase | ||||
| < | ||||
| A format specifier is either l, r, or c, followed by one or more digits.  If | ||||
| the letter is l, the field will be left aligned, similarly for r and right | ||||
| aligning and c and center aligning.  The number following the letter is the | ||||
| number of spaces padding to insert before the start of the next field. | ||||
| Multiple format specifiers can be added to the same command - each field will | ||||
| be printed with the next format specifier in the list; when they all have been | ||||
| used the first will be used again, and so on.  So, the last command right | ||||
| aligned every field, then inserted 0 spaces of padding before the next field. | ||||
| What if we wanted to right align the text before the comma, and left align the | ||||
| text after the comma?  The command would look like this: | ||||
| > | ||||
|   :Tabularize /,/r1c1l0 | ||||
|  | ||||
|             Some short phrase , some other phrase | ||||
|     A much longer phrase here , and another long phrase | ||||
| < | ||||
| That command would be read as "Align the matching text, splitting fields on | ||||
| commas.  Print everything before the first comma right aligned, then 1 space, | ||||
| then the comma center aligned, then 1 space, then everything after the comma | ||||
| left aligned."  Notice that the alignment of the field the comma is in is | ||||
| irrelevant - since it's only 1 cell wide, it looks the same whether it's right, | ||||
| left, or center aligned.  Also notice that the 0 padding spaces specified for | ||||
| the 3rd field are unused - but they would be used if there were enough fields | ||||
| to require looping through the fields again.  For instance: | ||||
| > | ||||
|     abc,def,ghi | ||||
|     a,b | ||||
|     a,b,c | ||||
|  | ||||
|   :Tabularize /,/r1c1l0 | ||||
|  | ||||
|     abc , def, ghi | ||||
|       a , b | ||||
|       a , b  ,  c | ||||
| < | ||||
| Notice that now, the format pattern has been reused; field 4 (the second comma) | ||||
| is right aligned, field 5 is center aligned.  No spaces were inserted between | ||||
| the 3rd field (containing "def") and the 4th field (the second comma) because | ||||
| the format specified 'l0'. | ||||
|  | ||||
| But, what if you only wanted to act on the first comma on the line, rather than | ||||
| all of the commas on the line?  Let's say we want everything before the first | ||||
| comma right aligned, then the comma, then everything after the comma left | ||||
| aligned: | ||||
| > | ||||
|     abc,def,ghi | ||||
|     a,b | ||||
|     a,b,c | ||||
|  | ||||
|   :Tabularize /^[^,]*\zs,/r0c0l0 | ||||
|  | ||||
|     abc,def,ghi | ||||
|       a,b | ||||
|       a,b,c | ||||
| < | ||||
| Here, we used a Vim regex that would only match the first comma on the line. | ||||
| It matches the beginning of the line, followed by all the non-comma characters | ||||
| up to the first comma, and then forgets about what it matched so far and | ||||
| pretends that the match starts exactly at the comma. | ||||
|  | ||||
| But, now that this command does exactly what we want it to, it's become pretty | ||||
| unwieldy.  It would be unpleasant to need to type that more than once or | ||||
| twice.  The solution is to assign a name to it. | ||||
| > | ||||
|   :AddTabularPattern first_comma /^[^,]*\zs,/r0c0l0 | ||||
| < | ||||
| Now, typing ":Tabularize first_comma" will do the same thing as typing the | ||||
| whole pattern out each time.  Of course this is more useful if you store the | ||||
| name in a file to be used later. | ||||
|  | ||||
| NOTE: In order to make these new commands available every time vim starts, | ||||
| you'll need to put those new commands into a .vim file in a plugin directory | ||||
| somewhere in your 'runtimepath'.  In order to make sure that Tabular.vim has | ||||
| already been loaded before your file tries to use :AddTabularPattern or | ||||
| :AddTabularPipeline, the new file should be installed in an after/plugin | ||||
| directory in 'runtimepath'.  In general, it will be safe to find out where the | ||||
| TabularMaps.vim plugin was installed, and place other files extending | ||||
| Tabular.vim in the same directory as TabularMaps.vim.  For more information, | ||||
| and some suggested best practices, check out the |tabular-scripting| section. | ||||
|  | ||||
| Lastly, we'll approach the case where tabular cannot achieve your desired goal | ||||
| just by splitting lines appart, trimming whitespace, padding with whitespace, | ||||
| and rejoining the lines.  As an example, consider the multiple_spaces command | ||||
| from TabularMaps.vim.  The goal is to split using two or more spaces as a | ||||
| field delimiter, and join fields back together, properly lined up, with only | ||||
| two spaces between the end of each field and the beginning of the next. | ||||
| Unfortunately, Tabular can't do this with only the commands we know so far: | ||||
| > | ||||
|   :Tabularize /  / | ||||
| < | ||||
| The above function won't work, because it will consider "a    b" as 5 fields | ||||
| delimited by two pairs of 2 spaces ( 'a', '  ', '', '  ', 'b' ) instead of as | ||||
| 3 fields delimited by one set of 2 or more spaces ( 'a', '    ', 'b' ). | ||||
| > | ||||
|   :Tabularize /  \+/ | ||||
| < | ||||
| The above function won't work either, because it will leave the delimiter as 4 | ||||
| spaces when used against "a    b", meaning that we would fail at our goal of | ||||
| collapsing everything down to two spaces between fields.  So, we need a new | ||||
| command to get around this: | ||||
| > | ||||
|   :AddTabularPipeline multiple_spaces / \{2,}/ | ||||
|     \ map(a:lines, "substitute(v:val, ' \{2,}', '  ', 'g')") | ||||
|     \   | tabular#TabularizeStrings(a:lines, '  ', 'l0') | ||||
| < | ||||
| Yeah.  I know it looks complicated.  Bear with me.  I probably will try to add | ||||
| in some shortcuts for this syntax, but this verbose will be guaranteed to | ||||
| always work. | ||||
|  | ||||
| You should already recognize the name being assigned.  The next thing to | ||||
| happen is / \{2,}/ which is a pattern specifying which lines should | ||||
| automatically be included in the range when no range is given.  Without this, | ||||
| there would be no pattern to use for extending the range.  Everything after | ||||
| that is a | separated list of expressions to be evaluated.  In the context in | ||||
| which they will be evaluated, a:lines will be set to a List of Strings | ||||
| containing the text of the lines being filtered as they procede through the | ||||
| pipeline you've set up.  The \ at the start of the lines are just vim's line | ||||
| continuation marker; you needn't worry much about them.  So, the first | ||||
| expression in the pipeline transforms each line by replacing every instance of | ||||
| 2 or more spaces with exactly two spaces.  The second command in the pipeline | ||||
| performs the equivalent of ":Tabularize /  /l0"; the only difference is that | ||||
| it is operating on a List of Strings rather than text in the buffer.  At the | ||||
| end of the pipeline, the Strings in the modified a:lines (or the return value | ||||
| of the last expression in the pipeline, if it returns a List) will replace the | ||||
| chosen range. | ||||
|  | ||||
| ============================================================================== | ||||
| 3. Extending                                               *tabular-scripting* | ||||
|  | ||||
| As mentioned above, the most important consideration when extending Tabular | ||||
| with new maps or commands is that your plugin must be loaded after Tabular.vim | ||||
| has finished loading, and only if Tabular.vim has loaded successfully.  The | ||||
| easiest approach to making sure it loads after Tabular.vim is simply putting | ||||
| the new file (we'll call it "tabular_extra.vim" as an example) into an | ||||
| "after/plugin/" directory in 'runtimepath', for instance: | ||||
| > | ||||
|   ~/.vim/after/plugin/tabular_extra.vim | ||||
| < | ||||
| The default set of mappings, found in "TabularMaps.vim", is installed in | ||||
| the after/plugin/ subdirectory of whatever directory Tabular was installed to. | ||||
|  | ||||
| The other important consideration is making sure that your commands are only | ||||
| called if Tabular.vim was actually loaded.  The easiest way to do this is by | ||||
| checking for the existence of the :Tabularize command at the start of your | ||||
| plugin.  A short example plugin would look like this: | ||||
| > | ||||
|   " after/plugin/my_tabular_commands.vim | ||||
|   " Provides extra :Tabularize commands | ||||
|  | ||||
|   if !exists(':Tabularize') | ||||
|     finish " Give up here; the Tabular plugin musn't have been loaded | ||||
|   endif | ||||
|  | ||||
|   " Make line wrapping possible by resetting the 'cpo' option, first saving it | ||||
|   let s:save_cpo = &cpo | ||||
|   set cpo&vim | ||||
|  | ||||
|   AddTabularPattern! asterisk /*/l1 | ||||
|  | ||||
|   AddTabularPipeline! remove_leading_spaces /^ / | ||||
|                   \ map(a:lines, "substitute(v:val, '^ *', '', '')") | ||||
|  | ||||
|   " Restore the saved value of 'cpo' | ||||
|   let &cpo = s:save_cpo | ||||
|   unlet s:save_cpo | ||||
| < | ||||
| ============================================================================== | ||||
| vim:tw=78:fo=tcq2:isk=!-~,^*,^\|,^\":ts=8:ft=help:norl: | ||||
							
								
								
									
										346
									
								
								sources_non_forked/tabular/plugin/Tabular.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										346
									
								
								sources_non_forked/tabular/plugin/Tabular.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,346 @@ | ||||
| " Tabular:     Align columnar data using regex-designated column boundaries | ||||
| " Maintainer:  Matthew Wozniski (godlygeek@gmail.com) | ||||
| " Date:        Thu, 03 May 2012 20:49:32 -0400 | ||||
| " Version:     1.0 | ||||
| " | ||||
| " Long Description: | ||||
| " Sometimes, it's useful to line up text.  Naturally, it's nicer to have the | ||||
| " computer do this for you, since aligning things by hand quickly becomes | ||||
| " unpleasant.  While there are other plugins for aligning text, the ones I've | ||||
| " tried are either impossibly difficult to understand and use, or too simplistic | ||||
| " to handle complicated tasks.  This plugin aims to make the easy things easy | ||||
| " and the hard things possible, without providing an unnecessarily obtuse | ||||
| " interface.  It's still a work in progress, and criticisms are welcome. | ||||
| " | ||||
| " License: | ||||
| " Copyright (c) 2012, Matthew J. Wozniski | ||||
| " All rights reserved. | ||||
| " | ||||
| " Redistribution and use in source and binary forms, with or without | ||||
| " modification, are permitted provided that the following conditions are met: | ||||
| "     * Redistributions of source code must retain the above copyright notice, | ||||
| "       this list of conditions and the following disclaimer. | ||||
| "     * Redistributions in binary form must reproduce the above copyright | ||||
| "       notice, this list of conditions and the following disclaimer in the | ||||
| "       documentation and/or other materials provided with the distribution. | ||||
| "     * The names of the contributors may not be used to endorse or promote | ||||
| "       products derived from this software without specific prior written | ||||
| "       permission. | ||||
| " | ||||
| " THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY EXPRESS | ||||
| " OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | ||||
| " OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||||
| " NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY DIRECT, INDIRECT, | ||||
| " INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
| " LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, | ||||
| " OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||||
| " LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||
| " NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||||
| " EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| " Abort if running in vi-compatible mode or the user doesn't want us. | ||||
| if &cp || exists('g:tabular_loaded') | ||||
|   if &cp && &verbose | ||||
|     echo "Not loading Tabular in compatible mode." | ||||
|   endif | ||||
|   finish | ||||
| endif | ||||
|  | ||||
| let g:tabular_loaded = 1 | ||||
|  | ||||
| " Stupid vimscript crap                                                   {{{1 | ||||
| let s:savecpo = &cpo | ||||
| set cpo&vim | ||||
|  | ||||
| " Private Things                                                          {{{1 | ||||
|  | ||||
| " Dictionary of command name to command | ||||
| let s:TabularCommands = {} | ||||
|  | ||||
| " Generate tab completion list for :Tabularize                            {{{2 | ||||
| " Return a list of commands that match the command line typed so far. | ||||
| " NOTE: Tries to handle commands with spaces in the name, but Vim doesn't seem | ||||
| "       to handle that terribly well... maybe I should give up on that. | ||||
| function! s:CompleteTabularizeCommand(argstart, cmdline, cursorpos) | ||||
|   let names = keys(s:TabularCommands) | ||||
|   if exists("b:TabularCommands") | ||||
|     let names += keys(b:TabularCommands) | ||||
|   endif | ||||
|  | ||||
|   let cmdstart = substitute(a:cmdline, '^\s*\S\+\s*', '', '') | ||||
|  | ||||
|   return filter(names, 'v:val =~# ''^\V'' . escape(cmdstart, ''\'')') | ||||
| endfunction | ||||
|  | ||||
| " Choose the proper command map from the given command line               {{{2 | ||||
| " Returns [ command map, command line with leading <buffer> removed ] | ||||
| function! s:ChooseCommandMap(commandline) | ||||
|   let map = s:TabularCommands | ||||
|   let cmd = a:commandline | ||||
|  | ||||
|   if cmd =~# '^<buffer>\s\+' | ||||
|     if !exists('b:TabularCommands') | ||||
|       let b:TabularCommands = {} | ||||
|     endif | ||||
|     let map = b:TabularCommands | ||||
|     let cmd = substitute(cmd, '^<buffer>\s\+', '', '') | ||||
|   endif | ||||
|  | ||||
|   return [ map, cmd ] | ||||
| endfunction | ||||
|  | ||||
| " Parse '/pattern/format' into separate pattern and format parts.         {{{2 | ||||
| " If parsing fails, return [ '', '' ] | ||||
| function! s:ParsePattern(string) | ||||
|   if a:string[0] != '/' | ||||
|     return ['',''] | ||||
|   endif | ||||
|  | ||||
|   let pat = '\\\@<!\%(\\\\\)\{-}\zs/' . tabular#ElementFormatPattern() . '*$' | ||||
|   let format = matchstr(a:string[1:-1], pat) | ||||
|   if !empty(format) | ||||
|     let format = format[1 : -1] | ||||
|     let pattern = a:string[1 : -len(format) - 2] | ||||
|   else | ||||
|     let pattern = a:string[1 : -1] | ||||
|   endif | ||||
|  | ||||
|   return [pattern, format] | ||||
| endfunction | ||||
|  | ||||
| " Split apart a list of | separated expressions.                          {{{2 | ||||
| function! s:SplitCommands(string) | ||||
|   if a:string =~ '^\s*$' | ||||
|     return [] | ||||
|   endif | ||||
|  | ||||
|   let end = match(a:string, "[\"'|]") | ||||
|  | ||||
|   " Loop until we find a delimiting | or end-of-string | ||||
|   while end != -1 && (a:string[end] != '|' || a:string[end+1] == '|') | ||||
|     if a:string[end] == "'" | ||||
|       let end = match(a:string, "'", end+1) + 1 | ||||
|       if end == 0 | ||||
|         throw "No matching end single quote" | ||||
|       endif | ||||
|     elseif a:string[end] == '"' | ||||
|       " Find a " preceded by an even number of \ (or 0) | ||||
|       let pattern = '\%(\\\@<!\%(\\\\\)*\)\@<="' | ||||
|       let end = matchend(a:string, pattern, end+1) + 1 | ||||
|       if end == 0 | ||||
|         throw "No matching end double quote" | ||||
|       endif | ||||
|     else " Found || | ||||
|       let end += 2 | ||||
|     endif | ||||
|  | ||||
|     let end = match(a:string, "[\"'|]", end) | ||||
|   endwhile | ||||
|  | ||||
|   if end == 0 || a:string[0 : end - (end > 0)] =~ '^\s*$' | ||||
|     throw "Empty element" | ||||
|   endif | ||||
|  | ||||
|   if end == -1 | ||||
|     let rv = [ a:string ] | ||||
|   else | ||||
|     let rv = [ a:string[0 : end-1] ] + s:SplitCommands(a:string[end+1 : -1]) | ||||
|   endif | ||||
|  | ||||
|   return rv | ||||
| endfunction | ||||
|  | ||||
| " Public Things                                                           {{{1 | ||||
|  | ||||
| " Command associating a command name with a simple pattern command        {{{2 | ||||
| " AddTabularPattern[!] [<buffer>] name /pattern[/format] | ||||
| " | ||||
| " If <buffer> is provided, the command will only be available in the current | ||||
| " buffer, and will be used instead of any global command with the same name. | ||||
| " | ||||
| " If a command with the same name and scope already exists, it is an error, | ||||
| " unless the ! is provided, in which case the existing command will be | ||||
| " replaced. | ||||
| " | ||||
| " pattern is a regex describing the delimiter to be used. | ||||
| " | ||||
| " format describes the format pattern to be used.  The default will be used if | ||||
| " none is provided. | ||||
| com! -nargs=+ -bang AddTabularPattern | ||||
|    \ call AddTabularPattern(<q-args>, <bang>0) | ||||
|  | ||||
| function! AddTabularPattern(command, force) | ||||
|   try | ||||
|     let [ commandmap, rest ] = s:ChooseCommandMap(a:command) | ||||
|  | ||||
|     let name = matchstr(rest, '.\{-}\ze\s*/') | ||||
|     let pattern = substitute(rest, '.\{-}\s*\ze/', '', '') | ||||
|  | ||||
|     let [ pattern, format ] = s:ParsePattern(pattern) | ||||
|  | ||||
|     if empty(name) || empty(pattern) | ||||
|       throw "Invalid arguments!" | ||||
|     endif | ||||
|  | ||||
|     if !a:force && has_key(commandmap, name) | ||||
|       throw string(name) . " is already defined, use ! to overwrite." | ||||
|     endif | ||||
|  | ||||
|     let command = "tabular#TabularizeStrings(a:lines, " . string(pattern) | ||||
|  | ||||
|     if !empty(format) | ||||
|       let command .=  ", " . string(format) | ||||
|     endif | ||||
|  | ||||
|     let command .= ")" | ||||
|  | ||||
|     let commandmap[name] = { 'pattern' : pattern, 'commands' : [ command ] } | ||||
|   catch | ||||
|     echohl ErrorMsg | ||||
|     echomsg "AddTabularPattern: " . v:exception | ||||
|     echohl None | ||||
|   endtry | ||||
| endfunction | ||||
|  | ||||
| " Command associating a command name with a pipeline of functions         {{{2 | ||||
| " AddTabularPipeline[!] [<buffer>] name /pattern/ func [ | func2 [ | func3 ] ] | ||||
| " | ||||
| " If <buffer> is provided, the command will only be available in the current | ||||
| " buffer, and will be used instead of any global command with the same name. | ||||
| " | ||||
| " If a command with the same name and scope already exists, it is an error, | ||||
| " unless the ! is provided, in which case the existing command will be | ||||
| " replaced. | ||||
| " | ||||
| " pattern is a regex that will be used to determine which lines will be | ||||
| " filtered.  If the cursor line doesn't match the pattern, using the command | ||||
| " will be a no-op, otherwise the cursor and all contiguous lines matching the | ||||
| " pattern will be filtered. | ||||
| " | ||||
| " Each 'func' argument represents a function to be called.  This function | ||||
| " will have access to a:lines, a List containing one String per line being | ||||
| " filtered. | ||||
| com! -nargs=+ -bang AddTabularPipeline | ||||
|    \ call AddTabularPipeline(<q-args>, <bang>0) | ||||
|  | ||||
| function! AddTabularPipeline(command, force) | ||||
|   try | ||||
|     let [ commandmap, rest ] = s:ChooseCommandMap(a:command) | ||||
|  | ||||
|     let name = matchstr(rest, '.\{-}\ze\s*/') | ||||
|     let pattern = substitute(rest, '.\{-}\s*\ze/', '', '') | ||||
|  | ||||
|     let commands = matchstr(pattern, '^/.\{-}\\\@<!\%(\\\\\)\{-}/\zs.*') | ||||
|     let pattern = matchstr(pattern, '/\zs.\{-}\\\@<!\%(\\\\\)\{-}\ze/') | ||||
|  | ||||
|     if empty(name) || empty(pattern) | ||||
|       throw "Invalid arguments!" | ||||
|     endif | ||||
|  | ||||
|     if !a:force && has_key(commandmap, name) | ||||
|       throw string(name) . " is already defined, use ! to overwrite." | ||||
|     endif | ||||
|  | ||||
|     let commandlist = s:SplitCommands(commands) | ||||
|  | ||||
|     if empty(commandlist) | ||||
|       throw "Must provide a list of functions!" | ||||
|     endif | ||||
|  | ||||
|     let commandmap[name] = { 'pattern' : pattern, 'commands' : commandlist } | ||||
|   catch | ||||
|     echohl ErrorMsg | ||||
|     echomsg "AddTabularPipeline: " . v:exception | ||||
|     echohl None | ||||
|   endtry | ||||
| endfunction | ||||
|  | ||||
| " Tabularize /pattern[/format]                                            {{{2 | ||||
| " Tabularize name | ||||
| " | ||||
| " Align text, either using the given pattern, or the command associated with | ||||
| " the given name. | ||||
| com! -nargs=* -range -complete=customlist,<SID>CompleteTabularizeCommand | ||||
|    \ Tabularize <line1>,<line2>call Tabularize(<q-args>) | ||||
|  | ||||
| function! Tabularize(command, ...) range | ||||
|   let piperange_opt = {} | ||||
|   if a:0 | ||||
|     let piperange_opt = a:1 | ||||
|   endif | ||||
|  | ||||
|   if empty(a:command) | ||||
|     if !exists("s:last_tabularize_command") | ||||
|       echohl ErrorMsg | ||||
|       echomsg "Tabularize hasn't been called yet; no pattern/command to reuse!" | ||||
|       echohl None | ||||
|       return | ||||
|     endif | ||||
|   else | ||||
|     let s:last_tabularize_command = a:command | ||||
|   endif | ||||
|  | ||||
|   let command = s:last_tabularize_command | ||||
|  | ||||
|   let range = a:firstline . ',' . a:lastline | ||||
|  | ||||
|   try | ||||
|     let [ pattern, format ] = s:ParsePattern(command) | ||||
|  | ||||
|     if !empty(pattern) | ||||
|       let cmd  = "tabular#TabularizeStrings(a:lines, " . string(pattern) | ||||
|  | ||||
|       if !empty(format) | ||||
|         let cmd .= "," . string(format) | ||||
|       endif | ||||
|  | ||||
|       let cmd .= ")" | ||||
|  | ||||
|       exe range . 'call tabular#PipeRangeWithOptions(pattern, [ cmd ], ' | ||||
|                       \ . 'piperange_opt)' | ||||
|     else | ||||
|       if exists('b:TabularCommands') && has_key(b:TabularCommands, command) | ||||
|         let usercmd = b:TabularCommands[command] | ||||
|       elseif has_key(s:TabularCommands, command) | ||||
|         let usercmd = s:TabularCommands[command] | ||||
|       else | ||||
|         throw "Unrecognized command " . string(command) | ||||
|       endif | ||||
|  | ||||
|       exe range . 'call tabular#PipeRangeWithOptions(usercmd["pattern"], ' | ||||
|                       \ . 'usercmd["commands"], piperange_opt)' | ||||
|     endif | ||||
|   catch | ||||
|     echohl ErrorMsg | ||||
|     echomsg "Tabularize: " . v:exception | ||||
|     echohl None | ||||
|     return | ||||
|   endtry | ||||
| endfunction | ||||
|  | ||||
| " GTabularize /pattern[/format]                                           {{{2 | ||||
| " GTabularize name | ||||
| " | ||||
| " Align text on only matching lines, either using the given pattern, or the | ||||
| " command associated with the given name.  Mnemonically, this is similar to | ||||
| " the :global command, which takes some action on all rows matching a pattern | ||||
| " in a range.  This command is different from normal :Tabularize in 3 ways: | ||||
| "   1) If a line in the range does not match the pattern, it will be left | ||||
| "      unchanged, and not in any way affect the outcome of other lines in the | ||||
| "      range (at least, normally - but Pipelines can and will still look at | ||||
| "      non-matching rows unless they are specifically written to be aware of | ||||
| "      tabular#DoGTabularize() and handle it appropriately). | ||||
| "   2) No automatic range determination - :Tabularize automatically expands | ||||
| "      a single-line range (or a call with no range) to include all adjacent | ||||
| "      matching lines.  That behavior does not make sense for this command. | ||||
| "   3) If called without a range, it will act on all lines in the buffer (like | ||||
| "      :global) rather than only a single line | ||||
| com! -nargs=* -range=% -complete=customlist,<SID>CompleteTabularizeCommand | ||||
|    \ GTabularize <line1>,<line2> | ||||
|    \ call Tabularize(<q-args>, { 'mode': 'GTabularize' } ) | ||||
|  | ||||
| " Stupid vimscript crap, part 2                                           {{{1 | ||||
| let &cpo = s:savecpo | ||||
| unlet s:savecpo | ||||
|  | ||||
| " vim:set sw=2 sts=2 fdm=marker: | ||||
| @ -108,6 +108,20 @@ This plugin goes well together with the following plugin: | ||||
|   and `<F9>`) | ||||
|  | ||||
|  | ||||
| Max line lengths | ||||
| ---------------- | ||||
|  | ||||
| One particular customization a lot of people like to make is relaxing the | ||||
| maximum line length default.  This is a config setting that should be set in | ||||
| flake8 itself. (vim-flake8 "just" invokes it and deals with showing the output | ||||
| in Vim's quickfix window.) | ||||
|  | ||||
| To do so, put the following into your `~/.config/flake8` file: | ||||
|  | ||||
|     [flake8] | ||||
|     max-line-length = 120 | ||||
|  | ||||
|  | ||||
| History | ||||
| ------- | ||||
| 1.6: Deprecated configuring flake8 options through Vim settings.  Instead, | ||||
|  | ||||
| @ -468,8 +468,8 @@ endfun | ||||
| function! s:repo_aliases() dict abort | ||||
|   if !has_key(self,'_aliases') | ||||
|     let self._aliases = {} | ||||
|     for line in split(self.git_chomp('config','--get-regexp','^alias[.]'),"\n") | ||||
|       let self._aliases[matchstr(line,'\.\zs\S\+')] = matchstr(line,' \zs.*') | ||||
|     for line in split(self.git_chomp('config','-z','--get-regexp','^alias[.]'),"\1") | ||||
|       let self._aliases[matchstr(line, '\.\zs.\{-}\ze\n')] = matchstr(line, '\n\zs.*') | ||||
|     endfor | ||||
|   endif | ||||
|   return self._aliases | ||||
| @ -1776,13 +1776,17 @@ function! s:Diff(vert,keepfocus,...) abort | ||||
|     let nr = bufnr('') | ||||
|     execute 'leftabove '.vert.'split `=fugitive#buffer().repo().translate(s:buffer().expand('':2''))`' | ||||
|     execute 'nnoremap <buffer> <silent> dp :diffput '.nr.'<Bar>diffupdate<CR>' | ||||
|     let nr2 = bufnr('') | ||||
|     call s:diffthis() | ||||
|     wincmd p | ||||
|     execute 'rightbelow '.vert.'split `=fugitive#buffer().repo().translate(s:buffer().expand('':3''))`' | ||||
|     execute 'nnoremap <buffer> <silent> dp :diffput '.nr.'<Bar>diffupdate<CR>' | ||||
|     let nr3 = bufnr('') | ||||
|     call s:diffthis() | ||||
|     wincmd p | ||||
|     call s:diffthis() | ||||
|     execute 'nnoremap <buffer> <silent> d2o :diffget '.nr2.'<Bar>diffupdate<CR>' | ||||
|     execute 'nnoremap <buffer> <silent> d3o :diffget '.nr3.'<Bar>diffupdate<CR>' | ||||
|     return post | ||||
|   elseif len(args) | ||||
|     let arg = join(args, ' ') | ||||
|  | ||||
| @ -2,10 +2,20 @@ | ||||
|  | ||||
| * We have now a [logo for vim-go](https://github.com/fatih/vim-go/blob/master/assets/vim-go.png)! Thanks to @egonelbre for his work on this.  | ||||
|  | ||||
| IMPROVEMENTS: | ||||
|  | ||||
| * Function calls are now highligted as wel when `g:go_highlight_functions` is enabled [gh-1048] | ||||
| * Add completion support for uninported packages. This allows to complete even if the package is not improted [gh-1084] | ||||
| * Tools that embeds GOROOT into their binaries do not work when people update their Go version and the GOROOT contains the vesion as part of their path (i.e: `/usr/local/Cellar/go/1.7.2/libexec`, [more info](https://blog.filippo.io/stale-goroot-and-gorebuild/)) . This is now fixed by introducing automatic GOROOT set/unset before each tool invoke. [gh-954] | ||||
|  | ||||
| BUG FIXES: | ||||
|  | ||||
| * Change back nil and iota highlighting color to the old type [gh-1049] | ||||
| * Fix passing arguments to `:GoBuild` while using NeoVim [gh-1062] | ||||
| * Do not open a split if `:GoDef` is used on a modified file [gh-1083] | ||||
| * Highlight nested structs correctly [gh-1075] | ||||
| * Highlight builtin functions correctly if `g:go_highlight_functions` is enabled [gh-1070] | ||||
| * Fix `:GoSameIds` highlighting if a new buffer is opened in the same window [gh-1067] | ||||
|  | ||||
| ## 1.9 (September 13, 2016) | ||||
|  | ||||
|  | ||||
| @ -56,3 +56,5 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| The Go gopher was designed by Renee French. http://reneefrench.blogspot.com/ The design is licensed under the Creative Commons 3.0 Attributions license. Read this article for more details: https://blog.golang.org/gopher | ||||
|  | ||||
| @ -32,7 +32,9 @@ function! s:gocodeCommand(cmd, preargs, args) | ||||
|   " we might hit cache problems, as gocode doesn't handle well different | ||||
|   " GOPATHS: https://github.com/nsf/gocode/issues/239 | ||||
|   let old_gopath = $GOPATH | ||||
|   let old_goroot = $GOROOT | ||||
|   let $GOPATH = go#path#Detect() | ||||
|   let $GOROOT = go#util#env("goroot") | ||||
|  | ||||
|   let socket_type = get(g:, 'go_gocode_socket_type', s:sock_type) | ||||
|   let cmd = printf('%s -sock %s %s %s %s',  | ||||
| @ -45,6 +47,8 @@ function! s:gocodeCommand(cmd, preargs, args) | ||||
|  | ||||
|   let result = go#util#System(cmd) | ||||
|   let $GOPATH = old_gopath | ||||
|   let $GOROOT = old_goroot | ||||
|  | ||||
|   if go#util#ShellError() != 0 | ||||
|     return "[\"0\", []]" | ||||
|   else | ||||
| @ -74,6 +78,7 @@ function! s:gocodeEnableOptions() | ||||
|  | ||||
|   call go#util#System(printf('%s set propose-builtins %s', go#util#Shellescape(bin_path), s:toBool(get(g:, 'go_gocode_propose_builtins', 1)))) | ||||
|   call go#util#System(printf('%s set autobuild %s', go#util#Shellescape(bin_path), s:toBool(get(g:, 'go_gocode_autobuild', 1)))) | ||||
|   call go#util#System(printf('%s set unimported-packages %s', go#util#Shellescape(bin_path), s:toBool(get(g:, 'go_gocode_unimported_packages', 1)))) | ||||
| endfunction | ||||
|  | ||||
| function! s:toBool(val) | ||||
|  | ||||
| @ -129,8 +129,6 @@ function! s:jump_to_declaration(out, mode) | ||||
|       split | ||||
|     elseif a:mode == "vsplit" | ||||
|       vsplit | ||||
|     elseif &modified | ||||
|       split | ||||
|     endif | ||||
|  | ||||
|     " open the file and jump to line and column | ||||
|  | ||||
| @ -121,7 +121,9 @@ endfunction | ||||
|  | ||||
| function! go#tool#ExecuteInDir(cmd) abort | ||||
|   let old_gopath = $GOPATH | ||||
|   let old_goroot = $GOROOT | ||||
|   let $GOPATH = go#path#Detect() | ||||
|   let $GOROOT = go#util#env("goroot") | ||||
|  | ||||
|   let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd ' | ||||
|   let dir = getcwd() | ||||
| @ -132,6 +134,7 @@ function! go#tool#ExecuteInDir(cmd) abort | ||||
|     execute cd . fnameescape(dir) | ||||
|   endtry | ||||
|  | ||||
|   let $GOROOT = old_goroot | ||||
|   let $GOPATH = old_gopath | ||||
|   return out | ||||
| endfunction | ||||
|  | ||||
| @ -43,6 +43,31 @@ function! go#util#IsWin() | ||||
|   return 0 | ||||
| endfunction | ||||
|  | ||||
| let s:env_cache = {} | ||||
|  | ||||
| " env returns the go environment variable for the given key. Where key can be | ||||
| " GOARCH, GOOS, GOROOT, etc... It caches the result and returns the cached | ||||
| " version.  | ||||
| function! go#util#env(key) | ||||
|   let l:key = tolower(a:key) | ||||
|   if has_key(s:env_cache, l:key) | ||||
|     return s:env_cache[l:key] | ||||
|   endif | ||||
|  | ||||
|   if executable('go') | ||||
|     let l:var = call('go#util#'.l:key, []) | ||||
|     if go#util#ShellError() != 0 | ||||
|       call go#util#EchoError(printf("'go env %s' failed", toupper(l:key))) | ||||
|       return '' | ||||
|     endif | ||||
|   else | ||||
|     let l:var = eval("$".toupper(a:key)) | ||||
|   endif | ||||
|  | ||||
|   let s:env_cache[l:key] = l:var | ||||
|   return l:var | ||||
| endfunction | ||||
|  | ||||
| function! go#util#goarch() | ||||
|   return substitute(go#util#System('go env GOARCH'), '\n', '', 'g') | ||||
| endfunction | ||||
|  | ||||
| @ -1396,6 +1396,12 @@ to an autocompletion proposals. By default it is enabled. | ||||
| > | ||||
|   let g:go_gocode_propose_builtins = 1 | ||||
| < | ||||
|                                               *'g:go_gocode_unimported_packages'* | ||||
|  | ||||
| Specifies whether `gocode` should include suggestions from unimported packages. | ||||
| By default it is enabled | ||||
| > | ||||
|   let g:go_gocode_unimported_packages = 1 | ||||
|                                                    *'g:go_gocode_socket_type'* | ||||
|  | ||||
| Specifies whether `gocode` should use a different socket type. By default | ||||
|  | ||||
| @ -200,6 +200,10 @@ augroup vim-go | ||||
|   autocmd BufWritePre *.s call s:asmfmt_autosave() | ||||
|   autocmd BufWritePost *.go call s:metalinter_autosave() | ||||
|   autocmd BufNewFile *.go call s:template_autocreate() | ||||
|   " clear SameIds when the buffer is unloaded so that loading another buffer | ||||
|   " in the same window doesn't highlight the most recently matched | ||||
|   " identifier's positions. | ||||
|   autocmd BufWinEnter *.go call go#guru#ClearSameIds() | ||||
| augroup END | ||||
|  | ||||
| " vim: sw=2 ts=2 et | ||||
|  | ||||
| @ -302,16 +302,18 @@ if g:go_highlight_functions != 0 | ||||
|   syn match goPointerOperator   /\*/ nextgroup=goReceiverType contained skipwhite skipnl | ||||
|   syn match goReceiverType      /\w\+/ contained | ||||
|   syn match goFunction          /\w\+/ contained | ||||
|   syn match goFunctionCall      /\w\+\ze(/ contains=GoBuiltins,goDeclaration | ||||
| else | ||||
|   syn keyword goDeclaration func | ||||
| endif | ||||
| hi def link     goFunction          Function | ||||
| hi def link     goFunctionCall      Type | ||||
|  | ||||
| " Methods; | ||||
| if g:go_highlight_methods != 0 | ||||
|   syn match goMethod                /\.\w\+\ze(/hs=s+1 | ||||
|   syn match goMethodCall            /\.\w\+\ze(/hs=s+1 | ||||
| endif | ||||
| hi def link     goMethod            Type | ||||
| hi def link     goMethodCall        Type | ||||
|  | ||||
| " Fields; | ||||
| if g:go_highlight_fields != 0 | ||||
| @ -324,7 +326,7 @@ if g:go_highlight_types != 0 | ||||
|   syn match goTypeConstructor      /\<\w\+{/he=e-1 | ||||
|   syn match goTypeDecl             /\<type\>/ nextgroup=goTypeName skipwhite skipnl | ||||
|   syn match goTypeName             /\w\+/ contained nextgroup=goDeclType skipwhite skipnl | ||||
|   syn match goDeclType             /\<interface\|struct\>/ contained skipwhite skipnl | ||||
|   syn match goDeclType             /\<interface\|struct\>/ skipwhite skipnl | ||||
|   hi def link     goReceiverType      Type | ||||
| else | ||||
|   syn keyword goDeclType           struct interface | ||||
|  | ||||
| @ -32,9 +32,10 @@ syn cluster pugTop contains=pugBegin,pugComment,pugHtmlComment,pugJavascript | ||||
| syn match   pugBegin "^\s*\%([<>]\|&[^=~ ]\)\@!" nextgroup=pugTag,pugClassChar,pugIdChar,pugPlainChar,pugJavascript,pugScriptConditional,pugScriptStatement,pugPipedText | ||||
| syn match   pugTag "+\?\w\+\%(:\w\+\)\=" contained contains=htmlTagName,htmlSpecialTagName nextgroup=@pugComponent | ||||
| syn cluster pugComponent contains=pugAttributes,pugIdChar,pugBlockExpansionChar,pugClassChar,pugPlainChar,pugJavascript,pugTagBlockChar,pugTagInlineText | ||||
| syn match   pugComment '\(\s\+\|^\)\/\/.*$' | ||||
| syn region  pugCommentBlock start="\z(\s\+\|^\)\/\/.*$" end="^\%(\z1\s\|\s*$\)\@!" keepend  | ||||
| syn region  pugHtmlConditionalComment start="<!--\%(.*\)>" end="<!\%(.*\)-->" | ||||
| syntax keyword pugCommentTodo  contained TODO FIXME XXX TBD | ||||
| syn match   pugComment '\(\s\+\|^\)\/\/.*$' contains=pugCommentTodo | ||||
| syn region  pugCommentBlock start="\z(\s\+\|^\)\/\/.*$" end="^\%(\z1\s\|\s*$\)\@!" contains=pugCommentTodo keepend | ||||
| syn region  pugHtmlConditionalComment start="<!--\%(.*\)>" end="<!\%(.*\)-->" contains=pugCommentTodo | ||||
| syn region  pugAttributes matchgroup=pugAttributesDelimiter start="(" end=")" contained contains=@htmlJavascript,pugHtmlArg,htmlArg,htmlEvent,htmlCssDefinition nextgroup=@pugComponent | ||||
| syn match   pugClassChar "\." contained nextgroup=pugClass | ||||
| syn match   pugBlockExpansionChar ":\s\+" contained nextgroup=pugTag,pugClassChar,pugIdChar | ||||
| @ -93,6 +94,7 @@ hi def link pugInterpolationDelimiter Delimiter | ||||
| hi def link pugInlineDelimiter        Delimiter | ||||
| hi def link pugFilter                 PreProc | ||||
| hi def link pugDocType                PreProc | ||||
| hi def link pugCommentTodo            Todo | ||||
| hi def link pugComment                Comment | ||||
| hi def link pugCommentBlock           Comment | ||||
| hi def link pugHtmlConditionalComment pugComment | ||||
|  | ||||
| @ -18,7 +18,7 @@ snippet box "A nice box with the current comment symbol" b | ||||
| box = make_box(len(t[1])) | ||||
| snip.rv = box[0] | ||||
| snip += box[1] | ||||
| `${1:content}`!p | ||||
| `${1:${VISUAL:content}}`!p | ||||
| box = make_box(len(t[1])) | ||||
| snip.rv = box[2] | ||||
| snip += box[3]` | ||||
| @ -32,7 +32,7 @@ if not snip.c: | ||||
| box = make_box(len(t[1]), width) | ||||
| snip.rv = box[0] | ||||
| snip += box[1] | ||||
| `${1:content}`!p | ||||
| `${1:${VISUAL:content}}`!p | ||||
| box = make_box(len(t[1]), width) | ||||
| snip.rv = box[2] | ||||
| snip += box[3]` | ||||
|  | ||||
| @ -258,7 +258,7 @@ snippet style "XHTML <style>" w | ||||
| endsnippet | ||||
|  | ||||
| snippet table "XHTML <table>" w | ||||
| <table border="${1:0}"${2: cellspacing="${3:5}" cellpadding="${4:5}"}> | ||||
| <table> | ||||
| 	${0:${VISUAL}} | ||||
| </table> | ||||
| endsnippet | ||||
| @ -317,4 +317,8 @@ snippet movie "Embed QT movie (movie)" b | ||||
| 	`!p x(snip)`> | ||||
| </object> | ||||
| endsnippet | ||||
|  | ||||
| snippet viewport "Responsive viewport meta" w | ||||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
| endsnippet | ||||
| # vim:ft=snippets: | ||||
|  | ||||
| @ -158,14 +158,4 @@ snippet cw "console.warn" b | ||||
| console.warn(${1:"${2:value}"}); | ||||
| endsnippet | ||||
|  | ||||
| # AMD (Asynchronous Module Definition) snippets | ||||
|  | ||||
| snippet def "define an AMD module" | ||||
| define(${1:optional_name, }[${2:'jquery'}], ${3:callback}); | ||||
| endsnippet | ||||
|  | ||||
| snippet req "require an AMD module" | ||||
| require([${1:'dependencies'}], ${2:callback}); | ||||
| endsnippet | ||||
|  | ||||
| # vim:ft=snippets: | ||||
|  | ||||
| @ -121,9 +121,9 @@ class ${2:`!v expand('%:t:r')`} extends \Eloquent { | ||||
|  | ||||
|     public $timestamps = ${5:false}; | ||||
|  | ||||
|     protected $hidden  = array(${6}); | ||||
|     protected $hidden  = [${6}]; | ||||
|  | ||||
|     protected $guarded = array(${7:'id'}); | ||||
|     protected $guarded = [${7:'id'}]; | ||||
| } | ||||
| endsnippet | ||||
|  | ||||
| @ -162,7 +162,7 @@ abstract class ${2:`!v expand('%:t:r')`} implements ${3:BaseRepositoryInterface} | ||||
|      * | ||||
|      * \return  Illuminate\Database\Eloquent\Collection | ||||
|      */ | ||||
|     public function all($columns = array('*')) { | ||||
|     public function all($columns = ['*']) { | ||||
|         return $this->model->all()->toArray(); | ||||
|     } | ||||
|  | ||||
| @ -189,7 +189,7 @@ abstract class ${2:`!v expand('%:t:r')`} implements ${3:BaseRepositoryInterface} | ||||
|      * | ||||
|      * \return  mixed | ||||
|      */ | ||||
|     public function find($id, $columns = array('*')) { | ||||
|     public function find($id, $columns = ['*']) { | ||||
|         return $this->model->find($id, $columns); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -61,7 +61,7 @@ snippet sfa "Symfony 2 Controller action" | ||||
| public function $1Action($2) | ||||
| { | ||||
| 	$3 | ||||
| 	return ${4:array();}$0 | ||||
| 	return ${4:[];}$0 | ||||
| } | ||||
| endsnippet | ||||
|  | ||||
|  | ||||
| @ -32,7 +32,7 @@ def _parse_comments(s): | ||||
|             flags, text = next(i).split(':', 1) | ||||
|  | ||||
|             if len(flags) == 0: | ||||
|                 rv.append((text, text, text, "")) | ||||
|                 rv.append(('OTHER', text, text, text, "")) | ||||
|             # parse 3-part comment, but ignore those with O flag | ||||
|             elif 's' in flags and 'O' not in flags: | ||||
|                 ctriple = ["TRIPLE"] | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| snippet setup | ||||
| 	void setup() | ||||
| 	{ | ||||
| 		${0} | ||||
| 		Serial.begin(9600); | ||||
| 		Serial.begin(${1:9600}); | ||||
| 		${2} | ||||
| 	} | ||||
|  | ||||
| snippet loop | ||||
| @ -14,6 +14,9 @@ snippet loop | ||||
| snippet inc | ||||
| 	#include <${1}.h> | ||||
|  | ||||
| snippet def | ||||
| 	#define ${1} | ||||
|  | ||||
| # if | ||||
| snippet if | ||||
| 	if (${1:/* condition */}) { | ||||
| @ -50,12 +53,12 @@ snippet case | ||||
|  | ||||
| # for | ||||
| snippet for | ||||
| 	for (${2:i} = 0; $2 < ${1:count}; $2${3:++}) { | ||||
| 	for (int ${2:i} = 0; $2 < ${1:count}; $2${3:++}) { | ||||
| 		${4} | ||||
| 	} | ||||
| # for (custom) | ||||
| snippet forr | ||||
| 	for (${1:i} = ${2:0}; ${3:$1 < 10}; $1${4:++}) { | ||||
| 	for (int ${1:i} = ${2:0}; ${3:$1 < 10}; $1${4:++}) { | ||||
| 		${5} | ||||
| 	} | ||||
| # while | ||||
| @ -93,14 +96,29 @@ snippet dwLow | ||||
| # digitalRead | ||||
| snippet dr | ||||
| 	digitalRead(${1}); | ||||
| # analogRead | ||||
| snippet ar | ||||
| 	analogRead(${1}); | ||||
| # analogWrite | ||||
| snippet aw | ||||
| 	analogWrite(${1}); | ||||
| # serialRead | ||||
| snippet sr | ||||
| 	serialRead(); | ||||
| # serial.println | ||||
| 	Serial.read(); | ||||
| # serialWrite | ||||
| snippet sw | ||||
| 	Serial.write(); | ||||
| # serial.print | ||||
| snippet sp | ||||
| 	serial.println(${1}); | ||||
| 	Serial.print(${1}); | ||||
| # serial.println | ||||
| snippet sl | ||||
| 	Serial.println(${1}); | ||||
|  | ||||
|  | ||||
| # delay | ||||
| snippet dl | ||||
| 	delay(${1}); | ||||
| # millis | ||||
| snippet ml | ||||
| 	millis(); | ||||
|  | ||||
| @ -104,12 +104,12 @@ snippet ret | ||||
| ## Loops | ||||
| # for | ||||
| snippet for | ||||
| 	for (${2:i} = 0; $2 < ${1:count}; $2${3:++}) { | ||||
| 	for (int ${2:i} = 0; $2 < ${1:count}; $2${3:++}) { | ||||
| 		${4} | ||||
| 	} | ||||
| # for (custom) | ||||
| snippet forr | ||||
| 	for (${1:i} = ${2:0}; ${3:$1 < 10}; $1${4:++}) { | ||||
| 	for (int ${1:i} = ${2:0}; ${3:$1 < 10}; $1${4:++}) { | ||||
| 		${5} | ||||
| 	} | ||||
| # while | ||||
| @ -164,6 +164,12 @@ snippet pr | ||||
| # fprintf (again, this isn't as nice as TextMate's version, but it works) | ||||
| snippet fpr | ||||
| 	fprintf(${1:stderr}, "${2:%s}\n"${3}); | ||||
| snippet prd | ||||
| 	printf("${1:} = %d\n", $1); | ||||
| snippet prf | ||||
| 	printf("${1:} = %f\n", $1); | ||||
| snippet prx | ||||
| 	printf("${1:} = %${2}\n", $1); | ||||
| # getopt | ||||
| snippet getopt | ||||
| 	int choice; | ||||
|  | ||||
| @ -88,6 +88,8 @@ snippet defmo | ||||
| 	defmodule ${1:`substitute(vim_snippets#Filename(), '\(_\|^\)\(.\)', '\u\2', 'g')`} do | ||||
| 		${0} | ||||
| 	end | ||||
| snippet dfp | ||||
| 	defp ${1:name}, do: ${2} | ||||
| snippet defp | ||||
| 	defp ${1:name} do | ||||
| 		${0} | ||||
| @ -100,6 +102,8 @@ snippet doc | ||||
| 	@doc """ | ||||
| 	${0} | ||||
| 	""" | ||||
| snippet docf | ||||
| 	@doc false | ||||
| snippet fn | ||||
| 	fn ${1:args} -> ${0} end | ||||
| snippet mdoc | ||||
|  | ||||
| @ -875,3 +875,5 @@ snippet video | ||||
| 	<video src="${1} height="${2}" width="${3}" preload="${5:none}" autoplay="${6:autoplay}>${7}</video> | ||||
| snippet wbr | ||||
| 	<wbr /> | ||||
| snippet viewport | ||||
| 	<meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
|  | ||||
| @ -214,12 +214,20 @@ snippet wh | ||||
| 	while (${1}) ${0} | ||||
| ## | ||||
| ## Main method | ||||
| snippet psvm | ||||
| 	public static void main (String[] args) { | ||||
| 		${0} | ||||
| 	} | ||||
| snippet main | ||||
| 	public static void main (String[] args) { | ||||
| 		${0} | ||||
| 	} | ||||
| ## | ||||
| ## Print Methods | ||||
| snippet sout | ||||
| 	System.out.println(${0}); | ||||
| snippet serr | ||||
| 	System.err.println(${0}); | ||||
| snippet print | ||||
| 	System.out.print("${0:Message}"); | ||||
| snippet printf | ||||
|  | ||||
| @ -42,7 +42,7 @@ snippet e | ||||
| snippet mo | ||||
| 	mods : { ${1:modName} : '${2:modVal}' }, | ||||
| 
 | ||||
| mi - BEM mix mod | ||||
| # mi - BEM mix mod | ||||
| snippet mi | ||||
| 	mix : [ { ${1:block} : '${2:block}' } ], | ||||
| 
 | ||||
| @ -6,6 +6,10 @@ snippet it "it" b | ||||
| 	it('${1:}', () => { | ||||
| 		${0} | ||||
| 	}); | ||||
| snippet xit "xit" b | ||||
| 	xit('${1:}', () => { | ||||
| 		${0} | ||||
| 	}); | ||||
| snippet exp "expect" b | ||||
| 	expect(${1:})${0}; | ||||
| snippet expe "expect" b | ||||
|  | ||||
| @ -0,0 +1,81 @@ | ||||
| # Import only React | ||||
| snippet ri1 | ||||
| 	import React from 'react' | ||||
|  | ||||
| # Import both React and Component | ||||
| snippet ri2 | ||||
| 	import React, { Component, PropTypes } from 'react' | ||||
|  | ||||
| # React class | ||||
| snippet rcla | ||||
| 	class ${1:MyComponent} extends Component { | ||||
| 		render() { | ||||
| 			return ( | ||||
| 				${0:<div></div>} | ||||
| 			) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| # React constructor | ||||
| snippet rcon | ||||
| 	constructor(props) { | ||||
| 		super(props) | ||||
|  | ||||
| 		this.state = { | ||||
| 			${1}: ${0}, | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| # Proptypes for React Class | ||||
| snippet rcpt | ||||
| 	static propTypes = { | ||||
| 		${1}: PropTypes.${0}, | ||||
| 	} | ||||
|  | ||||
| # Default props for React Class | ||||
| snippet rcdp | ||||
| 	static defaultProps = { | ||||
| 		${1}: ${0}, | ||||
| 	} | ||||
|  | ||||
| # Presentational component | ||||
| snippet rcom | ||||
| 	(props) => { | ||||
| 		return ( | ||||
| 			${0:<div></div>} | ||||
| 		) | ||||
| 	} | ||||
|  | ||||
| # Proptypes for Presentational component | ||||
| snippet rpt | ||||
| 	${1}.propTypes = { | ||||
| 		${2}: PropTypes.${0}, | ||||
| 	} | ||||
|  | ||||
| # Default props for Presentational component | ||||
| snippet rdp | ||||
| 	${1}.defaultProps = { | ||||
| 		${2}: ${0}, | ||||
| 	} | ||||
|  | ||||
| # Lifecycle Methods | ||||
| snippet rcdm | ||||
| 	componentDidMount() { | ||||
| 		${0} | ||||
| 	} | ||||
|  | ||||
| # State | ||||
| snippet rsst | ||||
| 	this.setState({ | ||||
| 		${1}: ${0}, | ||||
| 	}) | ||||
|  | ||||
| snippet rtst | ||||
| 	this.state.${0} | ||||
|  | ||||
| # Props | ||||
| snippet rp | ||||
| 	props.${0} | ||||
|  | ||||
| snippet rtp | ||||
| 	this.props.${0} | ||||
| @ -0,0 +1,83 @@ | ||||
| snippet ir | ||||
| 	import React from 'react'; | ||||
| snippet ird | ||||
| 	import ReactDOM from 'react-dom'; | ||||
| snippet cdm | ||||
| 	componentDidMount() { | ||||
| 		${1} | ||||
| 	} | ||||
| snippet cdup | ||||
| 	componentDidUpdate(prevProps, prevState) { | ||||
| 		${1} | ||||
| 	} | ||||
| snippet cwm | ||||
| 	componentWillMount() { | ||||
| 		${1} | ||||
| 	} | ||||
| snippet cwr | ||||
| 	componentWillReceiveProps(nextProps) { | ||||
| 		${1} | ||||
| 	} | ||||
| snippet cwun | ||||
| 	componentWillUnmount() { | ||||
| 		${1} | ||||
| 	} | ||||
| snippet cwu | ||||
| 	componentWillUpdate(nextProps, nextState) { | ||||
| 		${1} | ||||
| 	} | ||||
| snippet fup | ||||
| 	forceUpdate(${1:callback}); | ||||
| snippet dp | ||||
| 	static defaultProps = { | ||||
| 		${1}: ${2}, | ||||
| 	} | ||||
| snippet st | ||||
| 	state = { | ||||
| 		${1}: ${2}, | ||||
| 	} | ||||
| snippet pt | ||||
| 	static propTypes = { | ||||
| 		${1}: React.PropTypes.${2:type}, | ||||
| 	} | ||||
| snippet rcc | ||||
| 	class ${1:ClassName} extends React.Component { | ||||
| 		render() { | ||||
| 			return ( | ||||
| 				${0:<div />} | ||||
| 			); | ||||
| 		} | ||||
| 	} | ||||
| snippet rdr | ||||
| 	ReactDOM.render(${1}, ${2}) | ||||
| snippet ercc | ||||
| 	export default class ${1:ClassName} extends React.Component { | ||||
| 		render() { | ||||
| 			return ( | ||||
| 				${0:<div />} | ||||
| 			); | ||||
| 		} | ||||
| 	} | ||||
| snippet ctor | ||||
| 	constructor() { | ||||
| 		super(); | ||||
| 		${1} | ||||
| 	} | ||||
| snippet ren | ||||
| 	render() { | ||||
| 		return ( | ||||
| 			${1:<div />} | ||||
| 		); | ||||
| 	} | ||||
| snippet sst | ||||
| 	this.setState({ | ||||
| 		${1}: ${2} | ||||
| 	}); | ||||
| snippet scu | ||||
| 	shouldComponentUpdate(nextProps, nextState) { | ||||
| 		${1} | ||||
| 	} | ||||
| snippet prp i | ||||
| 	this.props.${1} | ||||
| snippet ste i | ||||
| 	this.state.${1} | ||||
| @ -12,6 +12,30 @@ snippet clax | ||||
| 	class ${1} extends ${2} { | ||||
| 		${0} | ||||
| 	} | ||||
| snippet clac | ||||
| 	class ${1} { | ||||
| 		constructor(${2}) { | ||||
| 			${0} | ||||
| 		} | ||||
| 	} | ||||
| # For of loop | ||||
| snippet foro | ||||
| 	for (let ${1:prop} of ${2:object}) { | ||||
| 		${0:$1} | ||||
| 	} | ||||
| # Generator | ||||
| snippet fun* | ||||
| 	function* ${1:function_name}(${2}) { | ||||
| 		${0} | ||||
| 	} | ||||
| snippet c=> | ||||
| 	const ${1:function_name} = (${2}) => { | ||||
| 		${0} | ||||
| 	} | ||||
| snippet caf | ||||
| 	const ${1:function_name} = (${2}) => { | ||||
| 		${0} | ||||
| 	} | ||||
| snippet => | ||||
| 	(${1}) => { | ||||
| 		${0} | ||||
|  | ||||
| @ -1,5 +1,4 @@ | ||||
| # Functions | ||||
|  | ||||
| # prototype | ||||
| snippet proto | ||||
| 	${1:class_name}.prototype.${2:method_name} = function(${3}) { | ||||
| @ -44,9 +43,7 @@ snippet sdf | ||||
| 			${0} | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| # Flow control | ||||
|  | ||||
| # if | ||||
| snippet if | ||||
| 	if (${1:true}) { | ||||
| @ -100,9 +97,6 @@ snippet terr | ||||
| # return | ||||
| snippet ret | ||||
| 	return ${0:result}; | ||||
|  | ||||
| # Loops | ||||
|  | ||||
| # for loop | ||||
| snippet for | ||||
| 	for (var ${2:i} = 0, l = ${1:arr}.length; $2 < l; $2++) { | ||||
| @ -128,9 +122,7 @@ snippet fori | ||||
| 	for (var ${1:prop} in ${2:object}) { | ||||
| 		${0:$2[$1]} | ||||
| 	} | ||||
|  | ||||
| # Objects | ||||
|  | ||||
| # Object Method | ||||
| snippet :f | ||||
| 	${1:method_name}: function (${2:attribute}) { | ||||
| @ -207,9 +199,7 @@ snippet prop | ||||
| 			configurable : ${0:boolean} | ||||
| 		} | ||||
| 	); | ||||
|  | ||||
| # Documentation | ||||
|  | ||||
| # docstring | ||||
| snippet /** | ||||
| 	/** | ||||
| @ -228,9 +218,7 @@ snippet jsonp | ||||
| # JSON.stringify | ||||
| snippet jsons | ||||
| 	JSON.stringify(${0:object}); | ||||
|  | ||||
| # DOM selectors | ||||
|  | ||||
| # Get elements | ||||
| snippet get | ||||
| 	getElementsBy${1:TagName}('${0}') | ||||
| @ -249,7 +237,6 @@ snippet qs | ||||
| # Query selector all | ||||
| snippet qsa | ||||
| 	${1:document}.querySelectorAll('${0:CSS selector}') | ||||
|  | ||||
| # Debugging | ||||
| snippet de | ||||
| 	debugger; | ||||
| @ -265,6 +252,9 @@ snippet ce | ||||
| # console.warn | ||||
| snippet cw | ||||
| 	console.warn(${0}); | ||||
| # console.info | ||||
| snippet ci | ||||
| 	console.info(${0}); | ||||
| # console.trace | ||||
| snippet ct | ||||
| 	console.trace(${0:label}); | ||||
| @ -277,13 +267,10 @@ snippet ca | ||||
| # console.dir | ||||
| snippet cdir | ||||
| 	console.dir(${0:obj}); | ||||
|  | ||||
| # Misc | ||||
|  | ||||
| # 'use strict'; | ||||
| snippet us | ||||
| 	'use strict'; | ||||
|  | ||||
| # setTimeout function | ||||
| snippet timeout | ||||
| 	setTimeout(function () {${0}}${2}, ${1:10}); | ||||
|  | ||||
| @ -351,8 +351,8 @@ snippet foreachkil "<?php foreach ($var as $key => $value): ?>  ... <?php endfor | ||||
| 	<?php foreach ($${1:variable} as $${2:key} => $${3:value}): ?> | ||||
| 		${0:<!-- html... -->} | ||||
| 	<?php endforeach; ?> | ||||
| snippet array "$... = array(...)" | ||||
| 	$${1:arrayName} = array('${2}' => ${3}); | ||||
| snippet array "$... = ['' => ]" | ||||
| 	$${1:arrayName} = ['${2}' => ${3}]; | ||||
| snippet try "try { ... } catch (Exception $e) { ... }" | ||||
| 	try { | ||||
| 		${0} | ||||
| @ -466,7 +466,7 @@ snippet CSVWriter | ||||
| 				? fopen($file_or_handle, $mode) | ||||
| 				: $file_or_handle; | ||||
| 	 | ||||
| 			$this->fputcsv_args = array($this->f, null, $sep, $quot); | ||||
| 			$this->fputcsv_args = [$this->f, null, $sep, $quot]; | ||||
| 	 | ||||
| 			if (!$this->f) throw new Exception('bad file descriptor'); | ||||
| 		} | ||||
| @ -502,7 +502,7 @@ snippet CSVIterator | ||||
| 			* enclosure | ||||
| 			* delimiter | ||||
| 			*/ | ||||
| 		public function __construct( $file_or_handle, $opts = array(4096, ',') ) | ||||
| 		public function __construct( $file_or_handle, $opts = [4096, ','] ) | ||||
| 		{ | ||||
| 			$d = function($n) use(&$opts){ return isset($opts[$n]) ? $opts[$n] : false; }; | ||||
| 	 | ||||
| @ -515,13 +515,13 @@ snippet CSVIterator | ||||
| 				? fopen( $file_or_handle, 'r' ) | ||||
| 				: $file_or_handle; | ||||
| 			if (!$this->f) throw new Exception('bad file descriptor'); | ||||
| 			$this->fgetcsv_args = array( | ||||
| 			$this->fgetcsv_args = [ | ||||
| 					$this->f, | ||||
| 					isset($opts['row_size']) ? $opts['row_size'] : 4096, | ||||
| 					isset($opts['delimiter']) ? $opts['delimiter'] : ',', | ||||
| 					isset($opts['enclosure']) ? $opts['enclosure'] : '"', | ||||
| 					isset($opts['escape']) ? $opts['escape'] : '\\', | ||||
| 			); | ||||
| 			]; | ||||
| 			$this->start(); | ||||
| 		} | ||||
| 	 | ||||
|  | ||||
							
								
								
									
										58
									
								
								sources_non_forked/vim-snippets/snippets/ps1.snippets
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								sources_non_forked/vim-snippets/snippets/ps1.snippets
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,58 @@ | ||||
| # Snippets for  | ||||
| # Authored by Trevor Sullivan <trevor@trevorsullivan.net> | ||||
|  | ||||
| # PowerShell Class | ||||
| snippet class | ||||
| 	class { | ||||
| 		[string] ${0:FirstName} | ||||
| 	} | ||||
|  | ||||
| # PowerShell Advanced Function  | ||||
| snippet function | ||||
| 	function {0:name} { | ||||
| 		[CmdletBinding()] | ||||
| 		param ( | ||||
| 			[Parameter(Mandatory = $true)] | ||||
| 			[string] $Param1 | ||||
| 		) | ||||
|  | ||||
| 		begin { | ||||
| 		} | ||||
|  | ||||
| 		process { | ||||
| 		} | ||||
|  | ||||
| 		end { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| # PowerShell Splatting | ||||
| snippet splatting | ||||
| 	$Params = @{ | ||||
| 		${0:Param1} = 'Value1' | ||||
| 		${1:Param2} = 'Value2' | ||||
| 	} | ||||
| 	${3:CommandName} | ||||
|  | ||||
| # PowerShell Enumeration | ||||
| snippet enum | ||||
| 	enum ${0:name} { | ||||
| 		${1:item1} | ||||
| 		${2:item2} | ||||
| 	} | ||||
|  | ||||
| # PowerShell if..then | ||||
| snippet if | ||||
| 	if (${0:condition}) { | ||||
| 		${1:statement} | ||||
| 	} | ||||
|  | ||||
| # PowerShell While Loop | ||||
| snippet while | ||||
| 	while (${0:condition}) { | ||||
| 		${1:statement} | ||||
| 	} | ||||
|  | ||||
| # PowerShell Filter..Sort | ||||
| snippet filtersort | ||||
| 	${0:command} | Where-Object -FilterScript { $PSItem.${1:property} -${2:operator} '${3:expression}' } | Sort-Object -Property ${4:sortproperty} | ||||
| @ -993,3 +993,7 @@ snippet for | ||||
| 	for ${1:i} in ${0} | ||||
| snippet keyf | ||||
| 	@keyframes ${0} | ||||
| snippet jc:c | ||||
| 	justify-content center | ||||
| snippet jc | ||||
| 	justify-content | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 amix
					amix