mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	Merge #7499 'vim-patch: runtime'
This commit is contained in:
		| @@ -174,7 +174,7 @@ function! s:check_terminal() abort | |||||||
|         \ .(empty(kbs_entry) ? '? (not found)' : kdch1_entry)) |         \ .(empty(kbs_entry) ? '? (not found)' : kdch1_entry)) | ||||||
|   endif |   endif | ||||||
|   for env_var in ['XTERM_VERSION', 'VTE_VERSION', 'TERM_PROGRAM', 'COLORTERM', 'SSH_TTY'] |   for env_var in ['XTERM_VERSION', 'VTE_VERSION', 'TERM_PROGRAM', 'COLORTERM', 'SSH_TTY'] | ||||||
|     if !empty(eval('$'.env_var)) |     if !exists('$'.env_var) | ||||||
|       call health#report_info(printf("$%s='%s'", env_var, eval('$'.env_var))) |       call health#report_info(printf("$%s='%s'", env_var, eval('$'.env_var))) | ||||||
|     endif |     endif | ||||||
|   endfor |   endfor | ||||||
|   | |||||||
							
								
								
									
										415
									
								
								runtime/autoload/rust.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										415
									
								
								runtime/autoload/rust.vim
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,415 @@ | |||||||
|  | " Author: Kevin Ballard | ||||||
|  | " Description: Helper functions for Rust commands/mappings | ||||||
|  | " Last Modified: May 27, 2014 | ||||||
|  | " For bugs, patches and license go to https://github.com/rust-lang/rust.vim | ||||||
|  |  | ||||||
|  | " Jump {{{1 | ||||||
|  |  | ||||||
|  | function! rust#Jump(mode, function) range | ||||||
|  | 	let cnt = v:count1 | ||||||
|  | 	normal! m' | ||||||
|  | 	if a:mode ==# 'v' | ||||||
|  | 		norm! gv | ||||||
|  | 	endif | ||||||
|  | 	let foldenable = &foldenable | ||||||
|  | 	set nofoldenable | ||||||
|  | 	while cnt > 0 | ||||||
|  | 		execute "call <SID>Jump_" . a:function . "()" | ||||||
|  | 		let cnt = cnt - 1 | ||||||
|  | 	endwhile | ||||||
|  | 	let &foldenable = foldenable | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | function! s:Jump_Back() | ||||||
|  | 	call search('{', 'b') | ||||||
|  | 	keepjumps normal! w99[{ | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | function! s:Jump_Forward() | ||||||
|  | 	normal! j0 | ||||||
|  | 	call search('{', 'b') | ||||||
|  | 	keepjumps normal! w99[{% | ||||||
|  | 	call search('{') | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | " Run {{{1 | ||||||
|  |  | ||||||
|  | function! rust#Run(bang, args) | ||||||
|  | 	let args = s:ShellTokenize(a:args) | ||||||
|  | 	if a:bang | ||||||
|  | 		let idx = index(l:args, '--') | ||||||
|  | 		if idx != -1 | ||||||
|  | 			let rustc_args = idx == 0 ? [] : l:args[:idx-1] | ||||||
|  | 			let args = l:args[idx+1:] | ||||||
|  | 		else | ||||||
|  | 			let rustc_args = l:args | ||||||
|  | 			let args = [] | ||||||
|  | 		endif | ||||||
|  | 	else | ||||||
|  | 		let rustc_args = [] | ||||||
|  | 	endif | ||||||
|  |  | ||||||
|  | 	let b:rust_last_rustc_args = l:rustc_args | ||||||
|  | 	let b:rust_last_args = l:args | ||||||
|  |  | ||||||
|  | 	call s:WithPath(function("s:Run"), rustc_args, args) | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | function! s:Run(dict, rustc_args, args) | ||||||
|  | 	let exepath = a:dict.tmpdir.'/'.fnamemodify(a:dict.path, ':t:r') | ||||||
|  | 	if has('win32') | ||||||
|  | 		let exepath .= '.exe' | ||||||
|  | 	endif | ||||||
|  |  | ||||||
|  | 	let relpath = get(a:dict, 'tmpdir_relpath', a:dict.path) | ||||||
|  | 	let rustc_args = [relpath, '-o', exepath] + a:rustc_args | ||||||
|  |  | ||||||
|  | 	let rustc = exists("g:rustc_path") ? g:rustc_path : "rustc" | ||||||
|  |  | ||||||
|  | 	let pwd = a:dict.istemp ? a:dict.tmpdir : '' | ||||||
|  | 	let output = s:system(pwd, shellescape(rustc) . " " . join(map(rustc_args, 'shellescape(v:val)'))) | ||||||
|  | 	if output != '' | ||||||
|  | 		echohl WarningMsg | ||||||
|  | 		echo output | ||||||
|  | 		echohl None | ||||||
|  | 	endif | ||||||
|  | 	if !v:shell_error | ||||||
|  | 		exe '!' . shellescape(exepath) . " " . join(map(a:args, 'shellescape(v:val)')) | ||||||
|  | 	endif | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | " Expand {{{1 | ||||||
|  |  | ||||||
|  | function! rust#Expand(bang, args) | ||||||
|  | 	let args = s:ShellTokenize(a:args) | ||||||
|  | 	if a:bang && !empty(l:args) | ||||||
|  | 		let pretty = remove(l:args, 0) | ||||||
|  | 	else | ||||||
|  | 		let pretty = "expanded" | ||||||
|  | 	endif | ||||||
|  | 	call s:WithPath(function("s:Expand"), pretty, args) | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | function! s:Expand(dict, pretty, args) | ||||||
|  | 	try | ||||||
|  | 		let rustc = exists("g:rustc_path") ? g:rustc_path : "rustc" | ||||||
|  |  | ||||||
|  | 		if a:pretty =~? '^\%(everybody_loops$\|flowgraph=\)' | ||||||
|  | 			let flag = '--xpretty' | ||||||
|  | 		else | ||||||
|  | 			let flag = '--pretty' | ||||||
|  | 		endif | ||||||
|  | 		let relpath = get(a:dict, 'tmpdir_relpath', a:dict.path) | ||||||
|  | 		let args = [relpath, '-Z', 'unstable-options', l:flag, a:pretty] + a:args | ||||||
|  | 		let pwd = a:dict.istemp ? a:dict.tmpdir : '' | ||||||
|  | 		let output = s:system(pwd, shellescape(rustc) . " " . join(map(args, 'shellescape(v:val)'))) | ||||||
|  | 		if v:shell_error | ||||||
|  | 			echohl WarningMsg | ||||||
|  | 			echo output | ||||||
|  | 			echohl None | ||||||
|  | 		else | ||||||
|  | 			new | ||||||
|  | 			silent put =output | ||||||
|  | 			1 | ||||||
|  | 			d | ||||||
|  | 			setl filetype=rust | ||||||
|  | 			setl buftype=nofile | ||||||
|  | 			setl bufhidden=hide | ||||||
|  | 			setl noswapfile | ||||||
|  | 			" give the buffer a nice name | ||||||
|  | 			let suffix = 1 | ||||||
|  | 			let basename = fnamemodify(a:dict.path, ':t:r') | ||||||
|  | 			while 1 | ||||||
|  | 				let bufname = basename | ||||||
|  | 				if suffix > 1 | let bufname .= ' ('.suffix.')' | endif | ||||||
|  | 				let bufname .= '.pretty.rs' | ||||||
|  | 				if bufexists(bufname) | ||||||
|  | 					let suffix += 1 | ||||||
|  | 					continue | ||||||
|  | 				endif | ||||||
|  | 				exe 'silent noautocmd keepalt file' fnameescape(bufname) | ||||||
|  | 				break | ||||||
|  | 			endwhile | ||||||
|  | 		endif | ||||||
|  | 	endtry | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | function! rust#CompleteExpand(lead, line, pos) | ||||||
|  | 	if a:line[: a:pos-1] =~ '^RustExpand!\s*\S*$' | ||||||
|  | 		" first argument and it has a ! | ||||||
|  | 		let list = ["normal", "expanded", "typed", "expanded,identified", "flowgraph=", "everybody_loops"] | ||||||
|  | 		if !empty(a:lead) | ||||||
|  | 			call filter(list, "v:val[:len(a:lead)-1] == a:lead") | ||||||
|  | 		endif | ||||||
|  | 		return list | ||||||
|  | 	endif | ||||||
|  |  | ||||||
|  | 	return glob(escape(a:lead, "*?[") . '*', 0, 1) | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | " Emit {{{1 | ||||||
|  |  | ||||||
|  | function! rust#Emit(type, args) | ||||||
|  | 	let args = s:ShellTokenize(a:args) | ||||||
|  | 	call s:WithPath(function("s:Emit"), a:type, args) | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | function! s:Emit(dict, type, args) | ||||||
|  | 	try | ||||||
|  | 		let output_path = a:dict.tmpdir.'/output' | ||||||
|  |  | ||||||
|  | 		let rustc = exists("g:rustc_path") ? g:rustc_path : "rustc" | ||||||
|  |  | ||||||
|  | 		let relpath = get(a:dict, 'tmpdir_relpath', a:dict.path) | ||||||
|  | 		let args = [relpath, '--emit', a:type, '-o', output_path] + a:args | ||||||
|  | 		let pwd = a:dict.istemp ? a:dict.tmpdir : '' | ||||||
|  | 		let output = s:system(pwd, shellescape(rustc) . " " . join(map(args, 'shellescape(v:val)'))) | ||||||
|  | 		if output != '' | ||||||
|  | 			echohl WarningMsg | ||||||
|  | 			echo output | ||||||
|  | 			echohl None | ||||||
|  | 		endif | ||||||
|  | 		if !v:shell_error | ||||||
|  | 			new | ||||||
|  | 			exe 'silent keepalt read' fnameescape(output_path) | ||||||
|  | 			1 | ||||||
|  | 			d | ||||||
|  | 			if a:type == "llvm-ir" | ||||||
|  | 				setl filetype=llvm | ||||||
|  | 				let extension = 'll' | ||||||
|  | 			elseif a:type == "asm" | ||||||
|  | 				setl filetype=asm | ||||||
|  | 				let extension = 's' | ||||||
|  | 			endif | ||||||
|  | 			setl buftype=nofile | ||||||
|  | 			setl bufhidden=hide | ||||||
|  | 			setl noswapfile | ||||||
|  | 			if exists('l:extension') | ||||||
|  | 				" give the buffer a nice name | ||||||
|  | 				let suffix = 1 | ||||||
|  | 				let basename = fnamemodify(a:dict.path, ':t:r') | ||||||
|  | 				while 1 | ||||||
|  | 					let bufname = basename | ||||||
|  | 					if suffix > 1 | let bufname .= ' ('.suffix.')' | endif | ||||||
|  | 					let bufname .= '.'.extension | ||||||
|  | 					if bufexists(bufname) | ||||||
|  | 						let suffix += 1 | ||||||
|  | 						continue | ||||||
|  | 					endif | ||||||
|  | 					exe 'silent noautocmd keepalt file' fnameescape(bufname) | ||||||
|  | 					break | ||||||
|  | 				endwhile | ||||||
|  | 			endif | ||||||
|  | 		endif | ||||||
|  | 	endtry | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | " Utility functions {{{1 | ||||||
|  |  | ||||||
|  | " Invokes func(dict, ...) | ||||||
|  | " Where {dict} is a dictionary with the following keys: | ||||||
|  | "   'path' - The path to the file | ||||||
|  | "   'tmpdir' - The path to a temporary directory that will be deleted when the | ||||||
|  | "              function returns. | ||||||
|  | "   'istemp' - 1 if the path is a file inside of {dict.tmpdir} or 0 otherwise. | ||||||
|  | " If {istemp} is 1 then an additional key is provided: | ||||||
|  | "   'tmpdir_relpath' - The {path} relative to the {tmpdir}. | ||||||
|  | " | ||||||
|  | " {dict.path} may be a path to a file inside of {dict.tmpdir} or it may be the | ||||||
|  | " existing path of the current buffer. If the path is inside of {dict.tmpdir} | ||||||
|  | " then it is guaranteed to have a '.rs' extension. | ||||||
|  | function! s:WithPath(func, ...) | ||||||
|  | 	let buf = bufnr('') | ||||||
|  | 	let saved = {} | ||||||
|  | 	let dict = {} | ||||||
|  | 	try | ||||||
|  | 		let saved.write = &write | ||||||
|  | 		set write | ||||||
|  | 		let dict.path = expand('%') | ||||||
|  | 		let pathisempty = empty(dict.path) | ||||||
|  |  | ||||||
|  | 		" Always create a tmpdir in case the wrapped command wants it | ||||||
|  | 		let dict.tmpdir = tempname() | ||||||
|  | 		call mkdir(dict.tmpdir) | ||||||
|  |  | ||||||
|  | 		if pathisempty || !saved.write | ||||||
|  | 			let dict.istemp = 1 | ||||||
|  | 			" if we're doing this because of nowrite, preserve the filename | ||||||
|  | 			if !pathisempty | ||||||
|  | 				let filename = expand('%:t:r').".rs" | ||||||
|  | 			else | ||||||
|  | 				let filename = 'unnamed.rs' | ||||||
|  | 			endif | ||||||
|  | 			let dict.tmpdir_relpath = filename | ||||||
|  | 			let dict.path = dict.tmpdir.'/'.filename | ||||||
|  |  | ||||||
|  | 			let saved.mod = &mod | ||||||
|  | 			set nomod | ||||||
|  |  | ||||||
|  | 			silent exe 'keepalt write! ' . fnameescape(dict.path) | ||||||
|  | 			if pathisempty | ||||||
|  | 				silent keepalt 0file | ||||||
|  | 			endif | ||||||
|  | 		else | ||||||
|  | 			let dict.istemp = 0 | ||||||
|  | 			update | ||||||
|  | 		endif | ||||||
|  |  | ||||||
|  | 		call call(a:func, [dict] + a:000) | ||||||
|  | 	finally | ||||||
|  | 		if bufexists(buf) | ||||||
|  | 			for [opt, value] in items(saved) | ||||||
|  | 				silent call setbufvar(buf, '&'.opt, value) | ||||||
|  | 				unlet value " avoid variable type mismatches | ||||||
|  | 			endfor | ||||||
|  | 		endif | ||||||
|  | 		if has_key(dict, 'tmpdir') | silent call s:RmDir(dict.tmpdir) | endif | ||||||
|  | 	endtry | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | function! rust#AppendCmdLine(text) | ||||||
|  | 	call setcmdpos(getcmdpos()) | ||||||
|  | 	let cmd = getcmdline() . a:text | ||||||
|  | 	return cmd | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | " Tokenize the string according to sh parsing rules | ||||||
|  | function! s:ShellTokenize(text) | ||||||
|  | 	" states: | ||||||
|  | 	" 0: start of word | ||||||
|  | 	" 1: unquoted | ||||||
|  | 	" 2: unquoted backslash | ||||||
|  | 	" 3: double-quote | ||||||
|  | 	" 4: double-quoted backslash | ||||||
|  | 	" 5: single-quote | ||||||
|  | 	let l:state = 0 | ||||||
|  | 	let l:current = '' | ||||||
|  | 	let l:args = [] | ||||||
|  | 	for c in split(a:text, '\zs') | ||||||
|  | 		if l:state == 0 || l:state == 1 " unquoted | ||||||
|  | 			if l:c ==# ' ' | ||||||
|  | 				if l:state == 0 | continue | endif | ||||||
|  | 				call add(l:args, l:current) | ||||||
|  | 				let l:current = '' | ||||||
|  | 				let l:state = 0 | ||||||
|  | 			elseif l:c ==# '\' | ||||||
|  | 				let l:state = 2 | ||||||
|  | 			elseif l:c ==# '"' | ||||||
|  | 				let l:state = 3 | ||||||
|  | 			elseif l:c ==# "'" | ||||||
|  | 				let l:state = 5 | ||||||
|  | 			else | ||||||
|  | 				let l:current .= l:c | ||||||
|  | 				let l:state = 1 | ||||||
|  | 			endif | ||||||
|  | 		elseif l:state == 2 " unquoted backslash | ||||||
|  | 			if l:c !=# "\n" " can it even be \n? | ||||||
|  | 				let l:current .= l:c | ||||||
|  | 			endif | ||||||
|  | 			let l:state = 1 | ||||||
|  | 		elseif l:state == 3 " double-quote | ||||||
|  | 			if l:c ==# '\' | ||||||
|  | 				let l:state = 4 | ||||||
|  | 			elseif l:c ==# '"' | ||||||
|  | 				let l:state = 1 | ||||||
|  | 			else | ||||||
|  | 				let l:current .= l:c | ||||||
|  | 			endif | ||||||
|  | 		elseif l:state == 4 " double-quoted backslash | ||||||
|  | 			if stridx('$`"\', l:c) >= 0 | ||||||
|  | 				let l:current .= l:c | ||||||
|  | 			elseif l:c ==# "\n" " is this even possible? | ||||||
|  | 				" skip it | ||||||
|  | 			else | ||||||
|  | 				let l:current .= '\'.l:c | ||||||
|  | 			endif | ||||||
|  | 			let l:state = 3 | ||||||
|  | 		elseif l:state == 5 " single-quoted | ||||||
|  | 			if l:c == "'" | ||||||
|  | 				let l:state = 1 | ||||||
|  | 			else | ||||||
|  | 				let l:current .= l:c | ||||||
|  | 			endif | ||||||
|  | 		endif | ||||||
|  | 	endfor | ||||||
|  | 	if l:state != 0 | ||||||
|  | 		call add(l:args, l:current) | ||||||
|  | 	endif | ||||||
|  | 	return l:args | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | function! s:RmDir(path) | ||||||
|  | 	" sanity check; make sure it's not empty, /, or $HOME | ||||||
|  | 	if empty(a:path) | ||||||
|  | 		echoerr 'Attempted to delete empty path' | ||||||
|  | 		return 0 | ||||||
|  | 	elseif a:path == '/' || a:path == $HOME | ||||||
|  | 		echoerr 'Attempted to delete protected path: ' . a:path | ||||||
|  | 		return 0 | ||||||
|  | 	endif | ||||||
|  | 	return system("rm -rf " . shellescape(a:path)) | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | " Executes {cmd} with the cwd set to {pwd}, without changing Vim's cwd. | ||||||
|  | " If {pwd} is the empty string then it doesn't change the cwd. | ||||||
|  | function! s:system(pwd, cmd) | ||||||
|  | 	let cmd = a:cmd | ||||||
|  | 	if !empty(a:pwd) | ||||||
|  | 		let cmd = 'cd ' . shellescape(a:pwd) . ' && ' . cmd | ||||||
|  | 	endif | ||||||
|  | 	return system(cmd) | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | " Playpen Support {{{1 | ||||||
|  | " Parts of gist.vim by Yasuhiro Matsumoto <mattn.jp@gmail.com> reused | ||||||
|  | " gist.vim available under the BSD license, available at | ||||||
|  | " http://github.com/mattn/gist-vim | ||||||
|  | function! s:has_webapi() | ||||||
|  |     if !exists("*webapi#http#post") | ||||||
|  | 	try | ||||||
|  | 	    call webapi#http#post() | ||||||
|  | 	catch | ||||||
|  | 	endtry | ||||||
|  |     endif | ||||||
|  |     return exists("*webapi#http#post") | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | function! rust#Play(count, line1, line2, ...) abort | ||||||
|  |     redraw | ||||||
|  |  | ||||||
|  |     let l:rust_playpen_url = get(g:, 'rust_playpen_url', 'https://play.rust-lang.org/') | ||||||
|  |     let l:rust_shortener_url = get(g:, 'rust_shortener_url', 'https://is.gd/') | ||||||
|  |  | ||||||
|  |     if !s:has_webapi() | ||||||
|  | 	echohl ErrorMsg | echomsg ':RustPlay depends on webapi.vim (https://github.com/mattn/webapi-vim)' | echohl None | ||||||
|  | 	return | ||||||
|  |     endif | ||||||
|  |  | ||||||
|  |     let bufname = bufname('%') | ||||||
|  |     if a:count < 1 | ||||||
|  | 	let content = join(getline(a:line1, a:line2), "\n") | ||||||
|  |     else | ||||||
|  | 	let save_regcont = @" | ||||||
|  | 	let save_regtype = getregtype('"') | ||||||
|  | 	silent! normal! gvy | ||||||
|  | 	let content = @" | ||||||
|  | 	call setreg('"', save_regcont, save_regtype) | ||||||
|  |     endif | ||||||
|  |  | ||||||
|  |     let body = l:rust_playpen_url."?code=".webapi#http#encodeURI(content) | ||||||
|  |  | ||||||
|  |     if strlen(body) > 5000 | ||||||
|  | 	echohl ErrorMsg | echomsg 'Buffer too large, max 5000 encoded characters ('.strlen(body).')' | echohl None | ||||||
|  | 	return | ||||||
|  |     endif | ||||||
|  |  | ||||||
|  |     let payload = "format=simple&url=".webapi#http#encodeURI(body) | ||||||
|  |     let res = webapi#http#post(l:rust_shortener_url.'create.php', payload, {}) | ||||||
|  |     let url = res.content | ||||||
|  |  | ||||||
|  |     redraw | echomsg 'Done: '.url | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | " }}}1 | ||||||
|  |  | ||||||
|  | " vim: set noet sw=8 ts=8: | ||||||
							
								
								
									
										107
									
								
								runtime/autoload/rustfmt.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								runtime/autoload/rustfmt.vim
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,107 @@ | |||||||
|  | " Author: Stephen Sugden <stephen@stephensugden.com> | ||||||
|  | " | ||||||
|  | " Adapted from https://github.com/fatih/vim-go | ||||||
|  | " For bugs, patches and license go to https://github.com/rust-lang/rust.vim | ||||||
|  |  | ||||||
|  | if !exists("g:rustfmt_autosave") | ||||||
|  | 	let g:rustfmt_autosave = 0 | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | if !exists("g:rustfmt_command") | ||||||
|  | 	let g:rustfmt_command = "rustfmt" | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | if !exists("g:rustfmt_options") | ||||||
|  | 	let g:rustfmt_options = "" | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | if !exists("g:rustfmt_fail_silently") | ||||||
|  | 	let g:rustfmt_fail_silently = 0 | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | let s:got_fmt_error = 0 | ||||||
|  |  | ||||||
|  | function! s:RustfmtCommandRange(filename, line1, line2) | ||||||
|  | 	let l:arg = {"file": shellescape(a:filename), "range": [a:line1, a:line2]} | ||||||
|  | 	return printf("%s %s --write-mode=overwrite --file-lines '[%s]'", g:rustfmt_command, g:rustfmt_options, json_encode(l:arg)) | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | function! s:RustfmtCommand(filename) | ||||||
|  | 	return g:rustfmt_command . " --write-mode=overwrite " . g:rustfmt_options . " " . shellescape(a:filename) | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | function! s:RunRustfmt(command, curw, tmpname) | ||||||
|  | 	if exists("*systemlist") | ||||||
|  | 		let out = systemlist(a:command) | ||||||
|  | 	else | ||||||
|  | 		let out = split(system(a:command), '\r\?\n') | ||||||
|  | 	endif | ||||||
|  |  | ||||||
|  | 	if v:shell_error == 0 || v:shell_error == 3 | ||||||
|  | 		" remove undo point caused via BufWritePre | ||||||
|  | 		try | silent undojoin | catch | endtry | ||||||
|  |  | ||||||
|  | 		" Replace current file with temp file, then reload buffer | ||||||
|  | 		call rename(a:tmpname, expand('%')) | ||||||
|  | 		silent edit! | ||||||
|  | 		let &syntax = &syntax | ||||||
|  |  | ||||||
|  | 		" only clear location list if it was previously filled to prevent | ||||||
|  | 		" clobbering other additions | ||||||
|  | 		if s:got_fmt_error | ||||||
|  | 			let s:got_fmt_error = 0 | ||||||
|  | 			call setloclist(0, []) | ||||||
|  | 			lwindow | ||||||
|  | 		endif | ||||||
|  | 	elseif g:rustfmt_fail_silently == 0 | ||||||
|  | 		" otherwise get the errors and put them in the location list | ||||||
|  | 		let errors = [] | ||||||
|  |  | ||||||
|  | 		for line in out | ||||||
|  | 			" src/lib.rs:13:5: 13:10 error: expected `,`, or `}`, found `value` | ||||||
|  | 			let tokens = matchlist(line, '^\(.\{-}\):\(\d\+\):\(\d\+\):\s*\(\d\+:\d\+\s*\)\?\s*error: \(.*\)') | ||||||
|  | 			if !empty(tokens) | ||||||
|  | 				call add(errors, {"filename": @%, | ||||||
|  | 						 \"lnum":     tokens[2], | ||||||
|  | 						 \"col":      tokens[3], | ||||||
|  | 						 \"text":     tokens[5]}) | ||||||
|  | 			endif | ||||||
|  | 		endfor | ||||||
|  |  | ||||||
|  | 		if empty(errors) | ||||||
|  | 			% | " Couldn't detect rustfmt error format, output errors | ||||||
|  | 		endif | ||||||
|  |  | ||||||
|  | 		if !empty(errors) | ||||||
|  | 			call setloclist(0, errors, 'r') | ||||||
|  | 			echohl Error | echomsg "rustfmt returned error" | echohl None | ||||||
|  | 		endif | ||||||
|  |  | ||||||
|  | 		let s:got_fmt_error = 1 | ||||||
|  | 		lwindow | ||||||
|  | 		" We didn't use the temp file, so clean up | ||||||
|  | 		call delete(a:tmpname) | ||||||
|  | 	endif | ||||||
|  |  | ||||||
|  | 	call winrestview(a:curw) | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | function! rustfmt#FormatRange(line1, line2) | ||||||
|  | 	let l:curw = winsaveview() | ||||||
|  | 	let l:tmpname = expand("%:p:h") . "/." . expand("%:p:t") . ".rustfmt" | ||||||
|  | 	call writefile(getline(1, '$'), l:tmpname) | ||||||
|  |  | ||||||
|  | 	let command = s:RustfmtCommandRange(l:tmpname, a:line1, a:line2) | ||||||
|  |  | ||||||
|  | 	call s:RunRustfmt(command, l:curw, l:tmpname) | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | function! rustfmt#Format() | ||||||
|  | 	let l:curw = winsaveview() | ||||||
|  | 	let l:tmpname = expand("%:p:h") . "/." . expand("%:p:t") . ".rustfmt" | ||||||
|  | 	call writefile(getline(1, '$'), l:tmpname) | ||||||
|  |  | ||||||
|  | 	let command = s:RustfmtCommand(l:tmpname) | ||||||
|  |  | ||||||
|  | 	call s:RunRustfmt(command, l:curw, l:tmpname) | ||||||
|  | endfunction | ||||||
							
								
								
									
										35
									
								
								runtime/compiler/cargo.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								runtime/compiler/cargo.vim
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | |||||||
|  | " Vim compiler file | ||||||
|  | " Compiler:         Cargo Compiler | ||||||
|  | " Maintainer:       Damien Radtke <damienradtke@gmail.com> | ||||||
|  | " Latest Revision:  2014 Sep 24 | ||||||
|  | " For bugs, patches and license go to https://github.com/rust-lang/rust.vim | ||||||
|  |  | ||||||
|  | if exists('current_compiler') | ||||||
|  | 	finish | ||||||
|  | endif | ||||||
|  | runtime compiler/rustc.vim | ||||||
|  | let current_compiler = "cargo" | ||||||
|  |  | ||||||
|  | let s:save_cpo = &cpo | ||||||
|  | set cpo&vim | ||||||
|  |  | ||||||
|  | if exists(':CompilerSet') != 2 | ||||||
|  | 	command -nargs=* CompilerSet setlocal <args> | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | if exists('g:cargo_makeprg_params') | ||||||
|  | 	execute 'CompilerSet makeprg=cargo\ '.escape(g:cargo_makeprg_params, ' \|"').'\ $*' | ||||||
|  | else | ||||||
|  | 	CompilerSet makeprg=cargo\ $* | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | " Ignore general cargo progress messages | ||||||
|  | CompilerSet errorformat+= | ||||||
|  | 			\%-G%\\s%#Downloading%.%#, | ||||||
|  | 			\%-G%\\s%#Compiling%.%#, | ||||||
|  | 			\%-G%\\s%#Finished%.%#, | ||||||
|  | 			\%-G%\\s%#error:\ Could\ not\ compile\ %.%#, | ||||||
|  | 			\%-G%\\s%#To\ learn\ more\\,%.%# | ||||||
|  |  | ||||||
|  | let &cpo = s:save_cpo | ||||||
|  | unlet s:save_cpo | ||||||
| @@ -1,7 +1,8 @@ | |||||||
| " Vim compiler file | " Vim compiler file | ||||||
| " Compiler:             reStructuredText Documentation Format | " Compiler:             sphinx >= 1.0.8, http://www.sphinx-doc.org | ||||||
|  | " Description:          reStructuredText Documentation Format | ||||||
| " Previous Maintainer:  Nikolai Weibull <now@bitwi.se> | " Previous Maintainer:  Nikolai Weibull <now@bitwi.se> | ||||||
| " Latest Revision:      2006-04-19 | " Latest Revision:      2017-03-31 | ||||||
|  |  | ||||||
| if exists("current_compiler") | if exists("current_compiler") | ||||||
|   finish |   finish | ||||||
| @@ -11,12 +12,18 @@ let current_compiler = "rst" | |||||||
| let s:cpo_save = &cpo | let s:cpo_save = &cpo | ||||||
| set cpo&vim | set cpo&vim | ||||||
|  |  | ||||||
| setlocal errorformat= | if exists(":CompilerSet") != 2 | ||||||
|       \%f:%l:\ (%tEBUG/0)\ %m, |   command -nargs=* CompilerSet setlocal <args> | ||||||
|       \%f:%l:\ (%tNFO/1)\ %m, | endif | ||||||
|       \%f:%l:\ (%tARNING/2)\ %m, |  | ||||||
|       \%f:%l:\ (%tRROR/3)\ %m, | CompilerSet errorformat= | ||||||
|       \%f:%l:\ (%tEVERE/3)\ %m, |       \%f\\:%l:\ %tEBUG:\ %m, | ||||||
|  |       \%f\\:%l:\ %tNFO:\ %m, | ||||||
|  |       \%f\\:%l:\ %tARNING:\ %m, | ||||||
|  |       \%f\\:%l:\ %tRROR:\ %m, | ||||||
|  |       \%f\\:%l:\ %tEVERE:\ %m, | ||||||
|  |       \%f\\:%s:\ %tARNING:\ %m, | ||||||
|  |       \%f\\:%s:\ %tRROR:\ %m, | ||||||
|       \%D%*\\a[%*\\d]:\ Entering\ directory\ `%f', |       \%D%*\\a[%*\\d]:\ Entering\ directory\ `%f', | ||||||
|       \%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f', |       \%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f', | ||||||
|       \%DMaking\ %*\\a\ in\ %f |       \%DMaking\ %*\\a\ in\ %f | ||||||
|   | |||||||
							
								
								
									
										46
									
								
								runtime/compiler/rustc.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								runtime/compiler/rustc.vim
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | |||||||
|  | " Vim compiler file | ||||||
|  | " Compiler:         Rust Compiler | ||||||
|  | " Maintainer:       Chris Morgan <me@chrismorgan.info> | ||||||
|  | " Latest Revision:  2013 Jul 12 | ||||||
|  | " For bugs, patches and license go to https://github.com/rust-lang/rust.vim | ||||||
|  |  | ||||||
|  | if exists("current_compiler") | ||||||
|  | 	finish | ||||||
|  | endif | ||||||
|  | let current_compiler = "rustc" | ||||||
|  |  | ||||||
|  | let s:cpo_save = &cpo | ||||||
|  | set cpo&vim | ||||||
|  |  | ||||||
|  | if exists(":CompilerSet") != 2 | ||||||
|  | 	command -nargs=* CompilerSet setlocal <args> | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | if exists("g:rustc_makeprg_no_percent") && g:rustc_makeprg_no_percent != 0 | ||||||
|  | 	CompilerSet makeprg=rustc | ||||||
|  | else | ||||||
|  | 	CompilerSet makeprg=rustc\ \% | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | " Old errorformat (before nightly 2016/08/10) | ||||||
|  | CompilerSet errorformat= | ||||||
|  | 			\%f:%l:%c:\ %t%*[^:]:\ %m, | ||||||
|  | 			\%f:%l:%c:\ %*\\d:%*\\d\ %t%*[^:]:\ %m, | ||||||
|  | 			\%-G%f:%l\ %s, | ||||||
|  | 			\%-G%*[\ ]^, | ||||||
|  | 			\%-G%*[\ ]^%*[~], | ||||||
|  | 			\%-G%*[\ ]... | ||||||
|  |  | ||||||
|  | " New errorformat (after nightly 2016/08/10) | ||||||
|  | CompilerSet errorformat+= | ||||||
|  | 			\%-G, | ||||||
|  | 			\%-Gerror:\ aborting\ %.%#, | ||||||
|  | 			\%-Gerror:\ Could\ not\ compile\ %.%#, | ||||||
|  | 			\%Eerror:\ %m, | ||||||
|  | 			\%Eerror[E%n]:\ %m, | ||||||
|  | 			\%Wwarning:\ %m, | ||||||
|  | 			\%Inote:\ %m, | ||||||
|  | 			\%C\ %#-->\ %f:%l:%c | ||||||
|  |  | ||||||
|  | let &cpo = s:cpo_save | ||||||
|  | unlet s:cpo_save | ||||||
| @@ -36,7 +36,7 @@ the user interface remains the standard Vi interface. | |||||||
|  |  | ||||||
| Highlights | Highlights | ||||||
| ---------- | ---------- | ||||||
| o  Editing left-to-right files as in the original VIM hasn't changed. | o  Editing left-to-right files as in the original Vim hasn't changed. | ||||||
|  |  | ||||||
| o  Viewing and editing files in right-to-left windows.	 File | o  Viewing and editing files in right-to-left windows.	 File | ||||||
|    orientation is per window, so it is possible to view the same |    orientation is per window, so it is possible to view the same | ||||||
| @@ -46,7 +46,7 @@ o  No special terminal with right-to-left capabilities is required. | |||||||
|    The right-to-left changes are completely hardware independent. |    The right-to-left changes are completely hardware independent. | ||||||
|    Only Arabic fonts are necessary. |    Only Arabic fonts are necessary. | ||||||
|  |  | ||||||
| o  Compatible with the original VIM.   Almost all features work in | o  Compatible with the original Vim.   Almost all features work in | ||||||
|    right-to-left mode (there are liable to be bugs). |    right-to-left mode (there are liable to be bugs). | ||||||
|  |  | ||||||
| o  Changing keyboard mapping and reverse insert modes using a single | o  Changing keyboard mapping and reverse insert modes using a single | ||||||
| @@ -60,14 +60,14 @@ o  While in Arabic mode, numbers are entered from left to right.  Upon | |||||||
|  |  | ||||||
| o  Arabic keymapping on the command line in reverse insert mode. | o  Arabic keymapping on the command line in reverse insert mode. | ||||||
|  |  | ||||||
| o  Proper Bidirectional functionality is possible given VIM is | o  Proper Bidirectional functionality is possible given Vim is | ||||||
|    started within a Bidi capable terminal emulator. |    started within a Bidi capable terminal emulator. | ||||||
|  |  | ||||||
|  |  | ||||||
| Arabic Fonts						*arabicfonts* | Arabic Fonts						*arabicfonts* | ||||||
| ------------ | ------------ | ||||||
|  |  | ||||||
| VIM requires monospaced fonts of which there are many out there. | Vim requires monospaced fonts of which there are many out there. | ||||||
| Arabic requires ISO-8859-6 as well as Presentation Form-B fonts | Arabic requires ISO-8859-6 as well as Presentation Form-B fonts | ||||||
| (without Form-B, Arabic will _NOT_ be usable).	It is highly | (without Form-B, Arabic will _NOT_ be usable).	It is highly | ||||||
| recommended that users search for so-called 'ISO-10646-1' fonts. | recommended that users search for so-called 'ISO-10646-1' fonts. | ||||||
| @@ -90,13 +90,13 @@ o  Installation of fonts for X Window systems (Unix/Linux) | |||||||
|  |  | ||||||
| Usage | Usage | ||||||
| ----- | ----- | ||||||
| Prior to the actual usage of Arabic within VIM, a number of settings | Prior to the actual usage of Arabic within Vim, a number of settings | ||||||
| need to be accounted for and invoked. | need to be accounted for and invoked. | ||||||
|  |  | ||||||
| o  Setting the Arabic fonts | o  Setting the Arabic fonts | ||||||
|  |  | ||||||
|    +  For VIM GUI set the 'guifont' to your_ARABIC_FONT.  This is done |    +  For Vim GUI set the 'guifont' to your_ARABIC_FONT.  This is done | ||||||
|       by entering the following command in the VIM window. |       by entering the following command in the Vim window. | ||||||
| > | > | ||||||
| 		:set guifont=your_ARABIC_FONT | 		:set guifont=your_ARABIC_FONT | ||||||
| < | < | ||||||
| @@ -109,7 +109,7 @@ o  Setting the Arabic fonts | |||||||
|       you can include ':set guifont=your_ARABIC_FONT' to your vimrc |       you can include ':set guifont=your_ARABIC_FONT' to your vimrc | ||||||
|       file. |       file. | ||||||
|  |  | ||||||
|    +  Under the X Window environment, you can also start VIM with |    +  Under the X Window environment, you can also start Vim with | ||||||
|       '-fn your_ARABIC_FONT' option. |       '-fn your_ARABIC_FONT' option. | ||||||
|  |  | ||||||
| o  Setting the appropriate character Encoding | o  Setting the appropriate character Encoding | ||||||
| @@ -131,11 +131,11 @@ o  Setting the appropriate character Encoding | |||||||
| o  Enable Arabic settings [short-cut] | o  Enable Arabic settings [short-cut] | ||||||
|  |  | ||||||
|    In order to simplify and streamline things, you can either invoke |    In order to simplify and streamline things, you can either invoke | ||||||
|    VIM with the command-line option, |    Vim with the command-line option, | ||||||
|  |  | ||||||
|      % vim -A my_utf8_arabic_file ... |      % vim -A my_utf8_arabic_file ... | ||||||
|  |  | ||||||
|    or enable 'arabic' via the following command within VIM |    or enable 'arabic' via the following command within Vim | ||||||
| > | > | ||||||
| 		:set arabic | 		:set arabic | ||||||
| < | < | ||||||
| @@ -196,7 +196,7 @@ o  Enable Arabic settings [short-cut] | |||||||
|  |  | ||||||
|    +  Arabic deletion of a combined pair character |    +  Arabic deletion of a combined pair character | ||||||
|  |  | ||||||
|       By default VIM has the 'delcombine' option disabled.  This option |       By default Vim has the 'delcombine' option disabled.  This option | ||||||
|       allows the deletion of ALEF in a LAM_ALEF (LAA) combined character |       allows the deletion of ALEF in a LAM_ALEF (LAA) combined character | ||||||
|       and still retain the LAM (i.e. it reverts to treating the combined |       and still retain the LAM (i.e. it reverts to treating the combined | ||||||
|       character as its natural two characters form -- this also pertains |       character as its natural two characters form -- this also pertains | ||||||
| @@ -255,7 +255,7 @@ o  Enable Arabic settings [short-cut] | |||||||
| Keymap/Keyboard						*arabickeymap* | Keymap/Keyboard						*arabickeymap* | ||||||
| --------------- | --------------- | ||||||
|  |  | ||||||
| The character/letter encoding used in VIM is the standard UTF-8. | The character/letter encoding used in Vim is the standard UTF-8. | ||||||
| It is widely discouraged that any other encoding be used or even | It is widely discouraged that any other encoding be used or even | ||||||
| attempted. | attempted. | ||||||
|  |  | ||||||
| @@ -288,7 +288,7 @@ o  Keyboard | |||||||
| Restrictions | Restrictions | ||||||
| ------------ | ------------ | ||||||
|  |  | ||||||
| o  VIM in its GUI form does not currently support Bi-directionality | o  Vim in its GUI form does not currently support Bi-directionality | ||||||
|    (i.e. the ability to see both Arabic and Latin intermixed within |    (i.e. the ability to see both Arabic and Latin intermixed within | ||||||
|    the same line). |    the same line). | ||||||
|  |  | ||||||
|   | |||||||
| @@ -605,7 +605,7 @@ FileChangedShell		When Vim notices that the modification time of | |||||||
| 				|timestamp| | 				|timestamp| | ||||||
| 				Mostly triggered after executing a shell | 				Mostly triggered after executing a shell | ||||||
| 				command, but also with a |:checktime| command | 				command, but also with a |:checktime| command | ||||||
| 				or when Gvim regains input focus. | 				or when gvim regains input focus. | ||||||
| 				This autocommand is triggered for each changed | 				This autocommand is triggered for each changed | ||||||
| 				file.  It is not used when 'autoread' is set | 				file.  It is not used when 'autoread' is set | ||||||
| 				and the buffer was not changed.  If a | 				and the buffer was not changed.  If a | ||||||
| @@ -616,7 +616,7 @@ FileChangedShell		When Vim notices that the modification time of | |||||||
| 				to tell Vim what to do next. | 				to tell Vim what to do next. | ||||||
| 				NOTE: When this autocommand is executed, the | 				NOTE: When this autocommand is executed, the | ||||||
| 				current buffer "%" may be different from the | 				current buffer "%" may be different from the | ||||||
| 				buffer that was changed "<afile>". | 				buffer that was changed, which is in "<afile>". | ||||||
| 				NOTE: The commands must not change the current | 				NOTE: The commands must not change the current | ||||||
| 				buffer, jump to another buffer or delete a | 				buffer, jump to another buffer or delete a | ||||||
| 				buffer.  *E246* *E811* | 				buffer.  *E246* *E811* | ||||||
| @@ -643,7 +643,8 @@ FileType			When the 'filetype' option has been set.  The | |||||||
| 				pattern is matched against the filetype. | 				pattern is matched against the filetype. | ||||||
| 				<afile> can be used for the name of the file | 				<afile> can be used for the name of the file | ||||||
| 				where this option was set, and <amatch> for | 				where this option was set, and <amatch> for | ||||||
| 				the new value of 'filetype'. | 				the new value of 'filetype'.  Navigating to | ||||||
|  | 				another window or buffer is not allowed. | ||||||
| 				See |filetypes|. | 				See |filetypes|. | ||||||
| 							*FileWriteCmd* | 							*FileWriteCmd* | ||||||
| FileWriteCmd			Before writing to a file, when not writing the | FileWriteCmd			Before writing to a file, when not writing the | ||||||
|   | |||||||
| @@ -420,6 +420,9 @@ matches exactly one character. | |||||||
|  |  | ||||||
| The 'wildignorecase' option can be set to ignore case in filenames. | The 'wildignorecase' option can be set to ignore case in filenames. | ||||||
|  |  | ||||||
|  | The 'wildmenu' option can be set to show the matches just above the command | ||||||
|  | line. | ||||||
|  |  | ||||||
| If you like tcsh's autolist completion, you can use this mapping: | If you like tcsh's autolist completion, you can use this mapping: | ||||||
| 	:cnoremap X <C-L><C-D> | 	:cnoremap X <C-L><C-D> | ||||||
| (Where X is the command key to use, <C-L> is CTRL-L and <C-D> is CTRL-D) | (Where X is the command key to use, <C-L> is CTRL-L and <C-D> is CTRL-D) | ||||||
|   | |||||||
| @@ -1265,7 +1265,7 @@ Commands for changing the working directory can be suffixed with a bang "!" | |||||||
| 							*:lc* *:lcd* | 							*:lc* *:lcd* | ||||||
| :lc[d][!] {path}	Like |:cd|, but only set the current directory for the | :lc[d][!] {path}	Like |:cd|, but only set the current directory for the | ||||||
| 			current window.  The current directory for other | 			current window.  The current directory for other | ||||||
| 			windows or any tabs is not changed. | 			windows or tabs is not changed. | ||||||
|  |  | ||||||
| 							*:lch* *:lchdir* | 							*:lch* *:lchdir* | ||||||
| :lch[dir][!]		Same as |:lcd|. | :lch[dir][!]		Same as |:lcd|. | ||||||
| @@ -1364,6 +1364,13 @@ If you want to automatically reload a file when it has been changed outside of | |||||||
| Vim, set the 'autoread' option.  This doesn't work at the moment you write the | Vim, set the 'autoread' option.  This doesn't work at the moment you write the | ||||||
| file though, only when the file wasn't changed inside of Vim. | file though, only when the file wasn't changed inside of Vim. | ||||||
|  |  | ||||||
|  | If you do not want to be asked or automatically reload the file, you can use | ||||||
|  | this: > | ||||||
|  | 	set buftype=nofile | ||||||
|  |  | ||||||
|  | Or, when starting gvim from a shell: > | ||||||
|  | 	gvim file.log -c "set buftype=nofile" | ||||||
|  |  | ||||||
| Note that if a FileChangedShell autocommand is defined you will not get a | Note that if a FileChangedShell autocommand is defined you will not get a | ||||||
| warning message or prompt.  The autocommand is expected to handle this. | warning message or prompt.  The autocommand is expected to handle this. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2201,12 +2201,13 @@ readfile({fname} [, {binary} [, {max}]]) | |||||||
| reltime([{start} [, {end}]])	List	get time value | reltime([{start} [, {end}]])	List	get time value | ||||||
| reltimefloat({time})		Float	turn the time value into a Float | reltimefloat({time})		Float	turn the time value into a Float | ||||||
| reltimestr({time})		String	turn time value into a String | reltimestr({time})		String	turn time value into a String | ||||||
| remote_expr({server}, {string} [, {idvar}]) | remote_expr({server}, {string} [, {idvar} [, {timeout}]]) | ||||||
| 				String	send expression | 				String	send expression | ||||||
| remote_foreground({server})	Number	bring Vim server to the foreground | remote_foreground({server})	Number	bring Vim server to the foreground | ||||||
| remote_peek({serverid} [, {retvar}]) | remote_peek({serverid} [, {retvar}]) | ||||||
| 				Number	check for reply string | 				Number	check for reply string | ||||||
| remote_read({serverid})		String	read reply string | remote_read({serverid} [, {timeout}]) | ||||||
|  | 				String	read reply string | ||||||
| remote_send({server}, {string} [, {idvar}]) | remote_send({server}, {string} [, {idvar}]) | ||||||
| 				String	send key sequence | 				String	send key sequence | ||||||
| remove({list}, {idx} [, {end}])	any	remove items {idx}-{end} from {list} | remove({list}, {idx} [, {end}])	any	remove items {idx}-{end} from {list} | ||||||
| @@ -3108,6 +3109,7 @@ did_filetype()	Returns |TRUE| when autocommands are being executed and the | |||||||
| 		FileType event has been triggered at least once.  Can be used | 		FileType event has been triggered at least once.  Can be used | ||||||
| 		to avoid triggering the FileType event again in the scripts | 		to avoid triggering the FileType event again in the scripts | ||||||
| 		that detect the file type. |FileType| | 		that detect the file type. |FileType| | ||||||
|  | 		Returns |FALSE| when `:setf FALLBACK` was used. | ||||||
| 		When editing another file, the counter is reset, thus this | 		When editing another file, the counter is reset, thus this | ||||||
| 		really checks if the FileType event has been triggered for the | 		really checks if the FileType event has been triggered for the | ||||||
| 		current buffer.  This allows an autocommand that starts | 		current buffer.  This allows an autocommand that starts | ||||||
| @@ -4077,13 +4079,16 @@ getcompletion({pat}, {type} [, {filtered}])		*getcompletion()* | |||||||
| getcurpos()	Get the position of the cursor.  This is like getpos('.'), but | getcurpos()	Get the position of the cursor.  This is like getpos('.'), but | ||||||
| 		includes an extra item in the list: | 		includes an extra item in the list: | ||||||
| 		    [bufnum, lnum, col, off, curswant] ~ | 		    [bufnum, lnum, col, off, curswant] ~ | ||||||
| 		The "curswant" number is the preferred column when moving the |  		The "curswant" number is the preferred column when moving the | ||||||
| 		cursor vertically. | 		cursor vertically.  Also see |getpos()|. | ||||||
| 		This can be used to save and restore the cursor position: > |  | ||||||
| 			let save_cursor = getcurpos() |  		This can be used to save and restore the cursor position: > | ||||||
| 			MoveTheCursorAround |  			let save_cursor = getcurpos() | ||||||
| 			call setpos('.', save_cursor) |  			MoveTheCursorAround | ||||||
| < |  			call setpos('.', save_cursor) | ||||||
|  | <		Note that this only works within the window.  See | ||||||
|  | 		|winrestview()| for restoring more state. | ||||||
|  |  | ||||||
| getcwd([{winnr}[, {tabnr}]])				*getcwd()* | getcwd([{winnr}[, {tabnr}]])				*getcwd()* | ||||||
| 		With no arguments the result is a String, which is the name of | 		With no arguments the result is a String, which is the name of | ||||||
| 		the current effective working directory. With {winnr} or | 		the current effective working directory. With {winnr} or | ||||||
| @@ -4381,11 +4386,13 @@ gettabwinvar({tabnr}, {winnr}, {varname} [, {def}])		*gettabwinvar()* | |||||||
| getwinposx()	The result is a Number, which is the X coordinate in pixels of | getwinposx()	The result is a Number, which is the X coordinate in pixels of | ||||||
| 		the left hand side of the GUI Vim window.  The result will be | 		the left hand side of the GUI Vim window.  The result will be | ||||||
| 		-1 if the information is not available. | 		-1 if the information is not available. | ||||||
|  | 		The value can be used with `:winpos`. | ||||||
|  |  | ||||||
| 							*getwinposy()* | 							*getwinposy()* | ||||||
| getwinposy()	The result is a Number, which is the Y coordinate in pixels of | getwinposy()	The result is a Number, which is the Y coordinate in pixels of | ||||||
| 		the top of the GUI Vim window.	The result will be -1 if the | 		the top of the GUI Vim window.	The result will be -1 if the | ||||||
| 		information is not available. | 		information is not available. | ||||||
|  | 		The value can be used with `:winpos`. | ||||||
|  |  | ||||||
| getwininfo([{winid}])					*getwininfo()* | getwininfo([{winid}])					*getwininfo()* | ||||||
| 		Returns information about windows as a List with Dictionaries. | 		Returns information about windows as a List with Dictionaries. | ||||||
| @@ -5150,7 +5157,10 @@ line({expr})	The result is a Number, which is the line number of the file | |||||||
| <							*last-position-jump* | <							*last-position-jump* | ||||||
| 		This autocommand jumps to the last known position in a file | 		This autocommand jumps to the last known position in a file | ||||||
| 		just after opening it, if the '" mark is set: > | 		just after opening it, if the '" mark is set: > | ||||||
| 	:au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif |      :au BufReadPost * | ||||||
|  |          \ if line("'\"") > 1 && line("'\"") <= line("$") && &ft !~# 'commit'  | ||||||
|  |          \ |   exe "normal! g`\"" | ||||||
|  |          \ | endif | ||||||
|  |  | ||||||
| line2byte({lnum})					*line2byte()* | line2byte({lnum})					*line2byte()* | ||||||
| 		Return the byte count from the start of the buffer for line | 		Return the byte count from the start of the buffer for line | ||||||
| @@ -6837,7 +6847,7 @@ setqflist({list} [, {action}[, {what}]])		*setqflist()* | |||||||
|  |  | ||||||
| 		This function can be used to create a quickfix list | 		This function can be used to create a quickfix list | ||||||
| 		independent of the 'errorformat' setting.  Use a command like | 		independent of the 'errorformat' setting.  Use a command like | ||||||
| 		":cc 1" to jump to the first position. | 		`:cc 1` to jump to the first position. | ||||||
|  |  | ||||||
|  |  | ||||||
| 							*setreg()* | 							*setreg()* | ||||||
| @@ -8270,7 +8280,7 @@ lispindent		Compiled with support for lisp indenting. | |||||||
| listcmds		Compiled with commands for the buffer list |:files| | listcmds		Compiled with commands for the buffer list |:files| | ||||||
| 			and the argument list |arglist|. | 			and the argument list |arglist|. | ||||||
| localmap		Compiled with local mappings and abbr. |:map-local| | localmap		Compiled with local mappings and abbr. |:map-local| | ||||||
| mac			macOS version of Vim. | mac			macOS version of Nvim. | ||||||
| menu			Compiled with support for |:menu|. | menu			Compiled with support for |:menu|. | ||||||
| mksession		Compiled with support for |:mksession|. | mksession		Compiled with support for |:mksession|. | ||||||
| modify_fname		Compiled with file name modifiers. |filename-modifiers| | modify_fname		Compiled with file name modifiers. |filename-modifiers| | ||||||
| @@ -10416,6 +10426,22 @@ missing: > | |||||||
| 	:  echo "You will _never_ see this message" | 	:  echo "You will _never_ see this message" | ||||||
| 	:endif | 	:endif | ||||||
|  |  | ||||||
|  | To execute a command only when the |+eval| feature is disabled requires a trick, | ||||||
|  | as this example shows: > | ||||||
|  | 	if 1 | ||||||
|  | 	  nnoremap : :" | ||||||
|  | 	endif | ||||||
|  | 	normal :set history=111<CR> | ||||||
|  | 	if 1 | ||||||
|  | 	  nunmap : | ||||||
|  | 	endif | ||||||
|  |  | ||||||
|  | The "<CR>" here is a real CR character, type CTRL-V Enter to get it. | ||||||
|  |  | ||||||
|  | When the |+eval| feature is available the ":" is remapped to add a double | ||||||
|  | quote, which has the effect of commenting-out the command.  without the | ||||||
|  | |+eval| feature the nnoremap command is skipped and the command is executed. | ||||||
|  |  | ||||||
| ============================================================================== | ============================================================================== | ||||||
| 11. The sandbox					*eval-sandbox* *sandbox* *E48* | 11. The sandbox					*eval-sandbox* *sandbox* *E48* | ||||||
|  |  | ||||||
|   | |||||||
| @@ -309,12 +309,12 @@ define yourself.  There are a few ways to avoid this: | |||||||
|    You need to define your own mapping before the plugin is loaded (before |    You need to define your own mapping before the plugin is loaded (before | ||||||
|    editing a file of that type).  The plugin will then skip installing the |    editing a file of that type).  The plugin will then skip installing the | ||||||
|    default mapping. |    default mapping. | ||||||
|  | 						*no_mail_maps* | ||||||
| 3. Disable defining mappings for a specific filetype by setting a variable, | 3. Disable defining mappings for a specific filetype by setting a variable, | ||||||
|    which contains the name of the filetype.  For the "mail" filetype this |    which contains the name of the filetype.  For the "mail" filetype this | ||||||
|    would be: > |    would be: > | ||||||
| 	:let no_mail_maps = 1 | 	:let no_mail_maps = 1 | ||||||
|  | <						*no_plugin_maps* | ||||||
| 4. Disable defining mappings for all filetypes by setting a variable: > | 4. Disable defining mappings for all filetypes by setting a variable: > | ||||||
| 	:let no_plugin_maps = 1 | 	:let no_plugin_maps = 1 | ||||||
| < | < | ||||||
| @@ -724,6 +724,12 @@ Format description: | |||||||
|       not recognized here as well. |       not recognized here as well. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | RUST							*ft-rust* | ||||||
|  |  | ||||||
|  | Since the text for this plugin is rather long it has been put in a separate | ||||||
|  | file: |ft_rust.txt|. | ||||||
|  |  | ||||||
|  |  | ||||||
| SQL							*ft-sql* | SQL							*ft-sql* | ||||||
|  |  | ||||||
| Since the text for this plugin is rather long it has been put in a separate | Since the text for this plugin is rather long it has been put in a separate | ||||||
|   | |||||||
| @@ -73,7 +73,7 @@ This will call a function to compute the fold level: > | |||||||
| 	:set foldexpr=MyFoldLevel(v:lnum) | 	:set foldexpr=MyFoldLevel(v:lnum) | ||||||
| This will make a fold out of paragraphs separated by blank lines: > | This will make a fold out of paragraphs separated by blank lines: > | ||||||
| 	:set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1 | 	:set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1 | ||||||
| this does the same: > | This does the same: > | ||||||
| 	:set foldexpr=getline(v:lnum-1)=~'^\\s*$'&&getline(v:lnum)=~'\\S'?'>1':1 | 	:set foldexpr=getline(v:lnum-1)=~'^\\s*$'&&getline(v:lnum)=~'\\S'?'>1':1 | ||||||
|  |  | ||||||
| Note that backslashes must be used to escape characters that ":set" handles | Note that backslashes must be used to escape characters that ":set" handles | ||||||
| @@ -197,7 +197,7 @@ and the level given by the marker: | |||||||
| 1. If a marker with the same fold level is encountered, the previous fold | 1. If a marker with the same fold level is encountered, the previous fold | ||||||
|    ends and another fold with the same level starts. |    ends and another fold with the same level starts. | ||||||
| 2. If a marker with a higher fold level is found, a nested fold is started. | 2. If a marker with a higher fold level is found, a nested fold is started. | ||||||
| 3. if a marker with a lower fold level is found, all folds up to and including | 3. If a marker with a lower fold level is found, all folds up to and including | ||||||
|    this level end and a fold with the specified level starts. |    this level end and a fold with the specified level starts. | ||||||
|  |  | ||||||
| The number indicates the fold level.  A zero cannot be used (a marker with | The number indicates the fold level.  A zero cannot be used (a marker with | ||||||
|   | |||||||
| @@ -116,7 +116,7 @@ NOTE: "gnat xref -v" is very tricky to use as it has almost no diagnostic | |||||||
|     then "gnat xref -v *.ad?" |     then "gnat xref -v *.ad?" | ||||||
| 4)  Project manager support is completely broken - don't even try "gnat xref | 4)  Project manager support is completely broken - don't even try "gnat xref | ||||||
|     -Padacl.gpr". |     -Padacl.gpr". | ||||||
| 5)  VIM is faster when the tags file is sorted - use "sort --unique | 5)  Vim is faster when the tags file is sorted - use "sort --unique | ||||||
|     --ignore-case --output=tags tags" . |     --ignore-case --output=tags tags" . | ||||||
| 6)  Remember to insert "!_TAG_FILE_SORTED 2 %sort ui" as first line to mark | 6)  Remember to insert "!_TAG_FILE_SORTED 2 %sort ui" as first line to mark | ||||||
|     the file assorted. |     the file assorted. | ||||||
|   | |||||||
							
								
								
									
										237
									
								
								runtime/doc/ft_rust.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										237
									
								
								runtime/doc/ft_rust.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,237 @@ | |||||||
|  | *ft_rust.txt*      Filetype plugin for Rust | ||||||
|  |  | ||||||
|  | ============================================================================== | ||||||
|  | CONTENTS                                                      *rust* | ||||||
|  |  | ||||||
|  | 1. Introduction                                                   |rust-intro| | ||||||
|  | 2. Settings                                                    |rust-settings| | ||||||
|  | 3. Commands                                                    |rust-commands| | ||||||
|  | 4. Mappings                                                    |rust-mappings| | ||||||
|  |  | ||||||
|  | ============================================================================== | ||||||
|  | INTRODUCTION                                                      *rust-intro* | ||||||
|  |  | ||||||
|  | This plugin provides syntax and supporting functionality for the Rust | ||||||
|  | filetype. | ||||||
|  |  | ||||||
|  | ============================================================================== | ||||||
|  | SETTINGS                                                       *rust-settings* | ||||||
|  |  | ||||||
|  | This plugin has a few variables you can define in your vimrc that change the | ||||||
|  | behavior of the plugin. | ||||||
|  |  | ||||||
|  |                                                                 *g:rustc_path* | ||||||
|  | g:rustc_path~ | ||||||
|  | 	Set this option to the path to rustc for use in the |:RustRun| and | ||||||
|  | 	|:RustExpand| commands. If unset, "rustc" will be located in $PATH: > | ||||||
|  | 	    let g:rustc_path = $HOME."/bin/rustc" | ||||||
|  | < | ||||||
|  |  | ||||||
|  |                                                   *g:rustc_makeprg_no_percent* | ||||||
|  | g:rustc_makeprg_no_percent~ | ||||||
|  | 	Set this option to 1 to have 'makeprg' default to "rustc" instead of | ||||||
|  | 	"rustc %": > | ||||||
|  | 	    let g:rustc_makeprg_no_percent = 1 | ||||||
|  | < | ||||||
|  |  | ||||||
|  |                                                               *g:rust_conceal* | ||||||
|  | g:rust_conceal~ | ||||||
|  | 	Set this option to turn on the basic |conceal| support: > | ||||||
|  | 	    let g:rust_conceal = 1 | ||||||
|  | < | ||||||
|  |  | ||||||
|  |                                                      *g:rust_conceal_mod_path* | ||||||
|  | g:rust_conceal_mod_path~ | ||||||
|  | 	Set this option to turn on |conceal| for the path connecting token | ||||||
|  | 	"::": > | ||||||
|  | 	    let g:rust_conceal_mod_path = 1 | ||||||
|  | < | ||||||
|  |  | ||||||
|  |                                                           *g:rust_conceal_pub* | ||||||
|  | g:rust_conceal_pub~ | ||||||
|  | 	Set this option to turn on |conceal| for the "pub" token: > | ||||||
|  | 	    let g:rust_conceal_pub = 1 | ||||||
|  | < | ||||||
|  |  | ||||||
|  |                                                      *g:rust_recommended_style* | ||||||
|  | g:rust_recommended_style~ | ||||||
|  |         Set this option to enable vim indentation and textwidth settings to | ||||||
|  |         conform to style conventions of the rust standard library (i.e. use 4 | ||||||
|  |         spaces for indents and sets 'textwidth' to 99). This option is enabled | ||||||
|  | 	by default. To disable it: > | ||||||
|  | 	    let g:rust_recommended_style = 0 | ||||||
|  | < | ||||||
|  |  | ||||||
|  |                                                                  *g:rust_fold* | ||||||
|  | g:rust_fold~ | ||||||
|  | 	Set this option to turn on |folding|: > | ||||||
|  | 	    let g:rust_fold = 1 | ||||||
|  | < | ||||||
|  | 	Value		Effect ~ | ||||||
|  | 	0		No folding | ||||||
|  | 	1		Braced blocks are folded. All folds are open by | ||||||
|  | 			default. | ||||||
|  | 	2		Braced blocks are folded. 'foldlevel' is left at the | ||||||
|  | 			global value (all folds are closed by default). | ||||||
|  |  | ||||||
|  |                                                   *g:rust_bang_comment_leader* | ||||||
|  | g:rust_bang_comment_leader~ | ||||||
|  | 	Set this option to 1 to preserve the leader on multi-line doc comments | ||||||
|  | 	using the /*! syntax: > | ||||||
|  | 	    let g:rust_bang_comment_leader = 1 | ||||||
|  | < | ||||||
|  |  | ||||||
|  |                                                  *g:ftplugin_rust_source_path* | ||||||
|  | g:ftplugin_rust_source_path~ | ||||||
|  | 	Set this option to a path that should be prepended to 'path' for Rust | ||||||
|  | 	source files: > | ||||||
|  | 	    let g:ftplugin_rust_source_path = $HOME.'/dev/rust' | ||||||
|  | < | ||||||
|  |  | ||||||
|  |                                                        *g:rustfmt_command* | ||||||
|  | g:rustfmt_command~ | ||||||
|  | 	Set this option to the name of the 'rustfmt' executable in your $PATH. If | ||||||
|  | 	not specified it defaults to 'rustfmt' : > | ||||||
|  | 	    let g:rustfmt_command = 'rustfmt' | ||||||
|  | < | ||||||
|  |                                                        *g:rustfmt_autosave* | ||||||
|  | g:rustfmt_autosave~ | ||||||
|  | 	Set this option to 1 to run |:RustFmt| automatically when saving a | ||||||
|  | 	buffer. If not specified it defaults to 0 : > | ||||||
|  | 	    let g:rustfmt_autosave = 0 | ||||||
|  | < | ||||||
|  |                                                        *g:rustfmt_fail_silently* | ||||||
|  | g:rustfmt_fail_silently~ | ||||||
|  | 	Set this option to 1 to prevent 'rustfmt' from populating the | ||||||
|  | 	|location-list| with errors. If not specified it defaults to 0: > | ||||||
|  | 	    let g:rustfmt_fail_silently = 0 | ||||||
|  | < | ||||||
|  |                                                        *g:rustfmt_options* | ||||||
|  | g:rustfmt_options~ | ||||||
|  | 	Set this option to a string of options to pass to 'rustfmt'. The | ||||||
|  | 	write-mode is already set to 'overwrite'. If not specified it | ||||||
|  | 	defaults to '' : > | ||||||
|  | 	    let g:rustfmt_options = '' | ||||||
|  | < | ||||||
|  |  | ||||||
|  |                                                           *g:rust_playpen_url* | ||||||
|  | g:rust_playpen_url~ | ||||||
|  | 	Set this option to override the url for the playpen to use: > | ||||||
|  | 	    let g:rust_playpen_url = 'https://play.rust-lang.org/' | ||||||
|  | < | ||||||
|  |  | ||||||
|  |                                                         *g:rust_shortener_url* | ||||||
|  | g:rust_shortener_url~ | ||||||
|  | 	Set this option to override the url for the url shortener: > | ||||||
|  | 	    let g:rust_shortener_url = 'https://is.gd/' | ||||||
|  | < | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ============================================================================== | ||||||
|  | COMMANDS                                                       *rust-commands* | ||||||
|  |  | ||||||
|  | :RustRun  [args]                                                    *:RustRun* | ||||||
|  | :RustRun! [rustc-args] [--] [args] | ||||||
|  | 		Compiles and runs the current file. If it has unsaved changes, | ||||||
|  | 		it will be saved first using |:update|. If the current file is | ||||||
|  | 		an unnamed buffer, it will be written to a temporary file | ||||||
|  | 		first. The compiled binary is always placed in a temporary | ||||||
|  | 		directory, but is run from the current directory. | ||||||
|  |  | ||||||
|  | 		The arguments given to |:RustRun| will be passed to the | ||||||
|  | 		compiled binary. | ||||||
|  |  | ||||||
|  | 		If ! is specified, the arguments are passed to rustc instead. | ||||||
|  | 		A "--" argument will separate the rustc arguments from the | ||||||
|  | 		arguments passed to the binary. | ||||||
|  |  | ||||||
|  | 		If |g:rustc_path| is defined, it is used as the path to rustc. | ||||||
|  | 		Otherwise it is assumed rustc can be found in $PATH. | ||||||
|  |  | ||||||
|  | :RustExpand  [args]                                              *:RustExpand* | ||||||
|  | :RustExpand! [TYPE] [args] | ||||||
|  | 		Expands the current file using --pretty and displays the | ||||||
|  | 		results in a new split. If the current file has unsaved | ||||||
|  | 		changes, it will be saved first using |:update|. If the | ||||||
|  | 		current file is an unnamed buffer, it will be written to a | ||||||
|  | 		temporary file first. | ||||||
|  |  | ||||||
|  | 		The arguments given to |:RustExpand| will be passed to rustc. | ||||||
|  | 		This is largely intended for specifying various --cfg | ||||||
|  | 		configurations. | ||||||
|  |  | ||||||
|  | 		If ! is specified, the first argument is the expansion type to | ||||||
|  | 		pass to rustc --pretty. Otherwise it will default to | ||||||
|  | 		"expanded". | ||||||
|  |  | ||||||
|  | 		If |g:rustc_path| is defined, it is used as the path to rustc. | ||||||
|  | 		Otherwise it is assumed rustc can be found in $PATH. | ||||||
|  |  | ||||||
|  | :RustEmitIr [args]                                               *:RustEmitIr* | ||||||
|  | 		Compiles the current file to LLVM IR and displays the results | ||||||
|  | 		in a new split. If the current file has unsaved changes, it | ||||||
|  | 		will be saved first using |:update|. If the current file is an | ||||||
|  | 		unnamed buffer, it will be written to a temporary file first. | ||||||
|  |  | ||||||
|  | 		The arguments given to |:RustEmitIr| will be passed to rustc. | ||||||
|  |  | ||||||
|  | 		If |g:rustc_path| is defined, it is used as the path to rustc. | ||||||
|  | 		Otherwise it is assumed rustc can be found in $PATH. | ||||||
|  |  | ||||||
|  | :RustEmitAsm [args]                                             *:RustEmitAsm* | ||||||
|  | 		Compiles the current file to assembly and displays the results | ||||||
|  | 		in a new split. If the current file has unsaved changes, it | ||||||
|  | 		will be saved first using |:update|. If the current file is an | ||||||
|  | 		unnamed buffer, it will be written to a temporary file first. | ||||||
|  |  | ||||||
|  | 		The arguments given to |:RustEmitAsm| will be passed to rustc. | ||||||
|  |  | ||||||
|  | 		If |g:rustc_path| is defined, it is used as the path to rustc. | ||||||
|  | 		Otherwise it is assumed rustc can be found in $PATH. | ||||||
|  |  | ||||||
|  | :RustPlay                                                          *:RustPlay* | ||||||
|  | 		This command will only work if you have web-api.vim installed | ||||||
|  | 		(available at https://github.com/mattn/webapi-vim).  It sends the | ||||||
|  | 		current selection, or if nothing is selected, the entirety of the | ||||||
|  | 		current buffer to the Rust playpen, and emits a message with the | ||||||
|  | 		shortened URL to the playpen. | ||||||
|  |  | ||||||
|  | 		|g:rust_playpen_url| is the base URL to the playpen, by default | ||||||
|  | 		"https://play.rust-lang.org/". | ||||||
|  |  | ||||||
|  | 		|g:rust_shortener_url| is the base url for the shorterner, by | ||||||
|  | 		default "https://is.gd/" | ||||||
|  |  | ||||||
|  | :RustFmt                                                       *:RustFmt* | ||||||
|  | 		Runs |g:rustfmt_command| on the current buffer. If | ||||||
|  | 		|g:rustfmt_options| is set then those will be passed to the | ||||||
|  | 		executable. | ||||||
|  |  | ||||||
|  | 		If |g:rustfmt_fail_silently| is 0 (the default) then it | ||||||
|  | 		will populate the |location-list| with the errors from | ||||||
|  | 		|g:rustfmt_command|. If |g:rustfmt_fail_silently| is set to 1 | ||||||
|  | 		then it will not populate the |location-list|. | ||||||
|  |  | ||||||
|  | :RustFmtRange                                                  *:RustFmtRange* | ||||||
|  | 		Runs |g:rustfmt_command| with selected range. See | ||||||
|  | 		|:RustFmt| for any other information. | ||||||
|  |  | ||||||
|  | ============================================================================== | ||||||
|  | MAPPINGS                                                       *rust-mappings* | ||||||
|  |  | ||||||
|  | This plugin defines mappings for |[[| and |]]| to support hanging indents. | ||||||
|  |  | ||||||
|  | It also has a few other mappings: | ||||||
|  |  | ||||||
|  | 							*rust_<D-r>* | ||||||
|  | <D-r>			Executes |:RustRun| with no arguments. | ||||||
|  | 			Note: This binding is only available in MacVim. | ||||||
|  |  | ||||||
|  | 							*rust_<D-R>* | ||||||
|  | <D-R>			Populates the command line with |:RustRun|! using the | ||||||
|  | 			arguments given to the last invocation, but does not | ||||||
|  | 			execute it. | ||||||
|  | 			Note: This binding is only available in MacVim. | ||||||
|  |  | ||||||
|  | ============================================================================== | ||||||
|  |  vim:tw=78:sw=4:noet:ts=8:ft=help:norl: | ||||||
| @@ -30,7 +30,7 @@ Get specific help:  It is possible to go directly to whatever you want help | |||||||
| 		    help entries for "word". | 		    help entries for "word". | ||||||
| 		    Or use ":helpgrep word". |:helpgrep| | 		    Or use ":helpgrep word". |:helpgrep| | ||||||
|  |  | ||||||
| VIM stands for Vi IMproved.  Most of VIM was made by Bram Moolenaar, but only | Vim stands for Vi IMproved.  Most of Vim was made by Bram Moolenaar, but only | ||||||
| through the help of many others.  See |credits|. | through the help of many others.  See |credits|. | ||||||
| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ||||||
| 						*doc-file-list* *Q_ct* | 						*doc-file-list* *Q_ct* | ||||||
|   | |||||||
| @@ -140,7 +140,8 @@ Help on help files					*helphelp* | |||||||
| 			already opened, then the location list for that window | 			already opened, then the location list for that window | ||||||
| 			is used.  Otherwise, a new help window is opened and | 			is used.  Otherwise, a new help window is opened and | ||||||
| 			the location list for that window is set.  The | 			the location list for that window is set.  The | ||||||
| 			location list for the current window is not changed. | 			location list for the current window is not changed | ||||||
|  | 			then. | ||||||
|  |  | ||||||
| 							*:exu* *:exusage* | 							*:exu* *:exusage* | ||||||
| :exu[sage]		Show help on Ex commands.  Added to simulate the Nvi | :exu[sage]		Show help on Ex commands.  Added to simulate the Nvi | ||||||
|   | |||||||
| @@ -82,9 +82,10 @@ suggested use.) | |||||||
| 2. Cscope related commands				*cscope-commands* | 2. Cscope related commands				*cscope-commands* | ||||||
|  |  | ||||||
| 		*:cscope* *:cs* *:scs* *:scscope* *E259* *E262* *E561* *E560* | 		*:cscope* *:cs* *:scs* *:scscope* *E259* *E262* *E561* *E560* | ||||||
| All cscope commands are accessed through suboptions to the main cscope | All cscope commands are accessed through suboptions to the cscope commands. | ||||||
| command ":cscope".  The shortest abbreviation is ":cs".  The ":scscope" | 	`:cscope` or `:cs` is the main command | ||||||
| command does the same and also splits the window (short: "scs"). | 	`:scscope` or `:scs` does the same and splits the window | ||||||
|  | 	`:lcscope` or `:lcs` uses the location list, see |:lcscope| | ||||||
|  |  | ||||||
| The available subcommands are: | The available subcommands are: | ||||||
|  |  | ||||||
|   | |||||||
| @@ -298,10 +298,10 @@ tag		char	      note action in Normal mode	~ | |||||||
| |B|		B		1  cursor N WORDS backward | |B|		B		1  cursor N WORDS backward | ||||||
| |C|		["x]C		2  change from the cursor position to the end | |C|		["x]C		2  change from the cursor position to the end | ||||||
| 				   of the line, and N-1 more lines [into | 				   of the line, and N-1 more lines [into | ||||||
| 				   buffer x]; synonym for "c$" | 				   register x]; synonym for "c$" | ||||||
| |D|		["x]D		2  delete the characters under the cursor | |D|		["x]D		2  delete the characters under the cursor | ||||||
| 				   until the end of the line and N-1 more | 				   until the end of the line and N-1 more | ||||||
| 				   lines [into buffer x]; synonym for "d$" | 				   lines [into register x]; synonym for "d$" | ||||||
| |E|		E		1  cursor forward to the end of WORD N | |E|		E		1  cursor forward to the end of WORD N | ||||||
| |F|		F{char}		1  cursor to the Nth occurrence of {char} to | |F|		F{char}		1  cursor to the Nth occurrence of {char} to | ||||||
| 				   the left | 				   the left | ||||||
| @@ -318,13 +318,13 @@ tag		char	      note action in Normal mode	~ | |||||||
| 				   opposite direction | 				   opposite direction | ||||||
| |O|		O		2  begin a new line above the cursor and | |O|		O		2  begin a new line above the cursor and | ||||||
| 				   insert text, repeat N times | 				   insert text, repeat N times | ||||||
| |P|		["x]P		2  put the text [from buffer x] before the | |P|		["x]P		2  put the text [from register x] before the | ||||||
| 				   cursor N times | 				   cursor N times | ||||||
| |Q|		Q		   switch to "Ex" mode | |Q|		Q		   switch to "Ex" mode | ||||||
| |R|		R		2  enter replace mode: overtype existing | |R|		R		2  enter replace mode: overtype existing | ||||||
| 				   characters, repeat the entered text N-1 | 				   characters, repeat the entered text N-1 | ||||||
| 				   times | 				   times | ||||||
| |S|		["x]S		2  delete N lines [into buffer x] and start | |S|		["x]S		2  delete N lines [into register x] and start | ||||||
| 				   insert; synonym for "cc". | 				   insert; synonym for "cc". | ||||||
| |T|		T{char}		1  cursor till after Nth occurrence of {char} | |T|		T{char}		1  cursor till after Nth occurrence of {char} | ||||||
| 				   to the left | 				   to the left | ||||||
| @@ -332,8 +332,8 @@ tag		char	      note action in Normal mode	~ | |||||||
| |V|		V		   start linewise Visual mode | |V|		V		   start linewise Visual mode | ||||||
| |W|		W		1  cursor N WORDS forward | |W|		W		1  cursor N WORDS forward | ||||||
| |X|		["x]X		2  delete N characters before the cursor [into | |X|		["x]X		2  delete N characters before the cursor [into | ||||||
| 				   buffer x] | 				   register x] | ||||||
| |Y|		["x]Y		   yank N lines [into buffer x]; synonym for | |Y|		["x]Y		   yank N lines [into register x]; synonym for | ||||||
| 				   "yy" | 				   "yy" | ||||||
| |ZZ|		ZZ		   store current file if modified, and exit | |ZZ|		ZZ		   store current file if modified, and exit | ||||||
| |ZQ|		ZQ		   exit current file always | |ZQ|		ZQ		   exit current file always | ||||||
| @@ -356,12 +356,12 @@ tag		char	      note action in Normal mode	~ | |||||||
| |`}|		`}		1  cursor to the end of the current paragraph | |`}|		`}		1  cursor to the end of the current paragraph | ||||||
| |a|		a		2  append text after the cursor N times | |a|		a		2  append text after the cursor N times | ||||||
| |b|		b		1  cursor N words backward | |b|		b		1  cursor N words backward | ||||||
| |c|		["x]c{motion}	2  delete Nmove text [into buffer x] and start | |c|		["x]c{motion}	2  delete Nmove text [into register x] and | ||||||
|  | 				   start insert | ||||||
|  | |cc|		["x]cc		2  delete N lines [into register x] and start | ||||||
| 				   insert | 				   insert | ||||||
| |cc|		["x]cc		2  delete N lines [into buffer x] and start | |d|		["x]d{motion}	2  delete Nmove text [into register x] | ||||||
| 				   insert | |dd|		["x]dd		2  delete N lines [into register x] | ||||||
| |d|		["x]d{motion}	2  delete Nmove text [into buffer x] |  | ||||||
| |dd|		["x]dd		2  delete N lines [into buffer x] |  | ||||||
| |do|		do		2  same as ":diffget" | |do|		do		2  same as ":diffget" | ||||||
| |dp|		dp		2  same as ":diffput" | |dp|		dp		2  same as ":diffput" | ||||||
| |e|		e		1  cursor forward to the end of word N | |e|		e		1  cursor forward to the end of word N | ||||||
| @@ -387,16 +387,16 @@ tag		char	      note action in Normal mode	~ | |||||||
| |q?|		q?		   edit ? command-line in command-line window | |q?|		q?		   edit ? command-line in command-line window | ||||||
| |r|		r{char}		2  replace N chars with {char} | |r|		r{char}		2  replace N chars with {char} | ||||||
| |s|		["x]s		2  (substitute) delete N characters [into | |s|		["x]s		2  (substitute) delete N characters [into | ||||||
| 				   buffer x] and start insert | 				   register x] and start insert | ||||||
| |t|		t{char}		1  cursor till before Nth occurrence of {char} | |t|		t{char}		1  cursor till before Nth occurrence of {char} | ||||||
| 				   to the right | 				   to the right | ||||||
| |u|		u		2  undo changes | |u|		u		2  undo changes | ||||||
| |v|		v		   start characterwise Visual mode | |v|		v		   start characterwise Visual mode | ||||||
| |w|		w		1  cursor N words forward | |w|		w		1  cursor N words forward | ||||||
| |x|		["x]x		2  delete N characters under and after the | |x|		["x]x		2  delete N characters under and after the | ||||||
| 				   cursor [into buffer x] | 				   cursor [into register x] | ||||||
| |y|		["x]y{motion}	   yank Nmove text [into buffer x] | |y|		["x]y{motion}	   yank Nmove text [into register x] | ||||||
| |yy|		["x]yy		   yank N lines [into buffer x] | |yy|		["x]yy		   yank N lines [into register x] | ||||||
| |z|		z{char}		   commands starting with 'z', see |z| below | |z|		z{char}		   commands starting with 'z', see |z| below | ||||||
| |{|		{		1  cursor N paragraphs backward | |{|		{		1  cursor N paragraphs backward | ||||||
| |bar|		|		1  cursor to column N | |bar|		|		1  cursor to column N | ||||||
|   | |||||||
| @@ -146,7 +146,8 @@ CTRL-R CTRL-R {0-9a-z"%#*+/:.-=}			*i_CTRL-R_CTRL-R* | |||||||
| CTRL-R CTRL-O {0-9a-z"%#*+/:.-=}			*i_CTRL-R_CTRL-O* | CTRL-R CTRL-O {0-9a-z"%#*+/:.-=}			*i_CTRL-R_CTRL-O* | ||||||
| 		Insert the contents of a register literally and don't | 		Insert the contents of a register literally and don't | ||||||
| 		auto-indent.  Does the same as pasting with the mouse | 		auto-indent.  Does the same as pasting with the mouse | ||||||
| 		|<MiddleMouse>|. | 		|<MiddleMouse>|. When the register is linewise this will | ||||||
|  | 		insert the text above the current line, like with `P`. | ||||||
| 		Does not replace characters! | 		Does not replace characters! | ||||||
| 		The '.' register (last inserted text) is still inserted as | 		The '.' register (last inserted text) is still inserted as | ||||||
| 		typed. | 		typed. | ||||||
| @@ -607,13 +608,13 @@ Completion can be done for: | |||||||
| 10. User defined completion				|i_CTRL-X_CTRL-U| | 10. User defined completion				|i_CTRL-X_CTRL-U| | ||||||
| 11. omni completion					|i_CTRL-X_CTRL-O| | 11. omni completion					|i_CTRL-X_CTRL-O| | ||||||
| 12. Spelling suggestions				|i_CTRL-X_s| | 12. Spelling suggestions				|i_CTRL-X_s| | ||||||
| 13. keywords in 'complete'				|i_CTRL-N| | 13. keywords in 'complete'				|i_CTRL-N| |i_CTRL-P| | ||||||
|  |  | ||||||
| All these (except 2) are done in CTRL-X mode.  This is a sub-mode of Insert | All these, except CTRL-N and CTRL-P, are done in CTRL-X mode.  This is a | ||||||
| and Replace modes.  You enter CTRL-X mode by typing CTRL-X and one of the | sub-mode of Insert and Replace modes.  You enter CTRL-X mode by typing CTRL-X | ||||||
| CTRL-X commands.  You exit CTRL-X mode by typing a key that is not a valid | and one of the CTRL-X commands.  You exit CTRL-X mode by typing a key that is | ||||||
| CTRL-X mode command.  Valid keys are the CTRL-X command itself, CTRL-N (next), | not a valid CTRL-X mode command.  Valid keys are the CTRL-X command itself, | ||||||
| and CTRL-P (previous). | CTRL-N (next), and CTRL-P (previous). | ||||||
|  |  | ||||||
| Also see the 'infercase' option if you want to adjust the case of the match. | Also see the 'infercase' option if you want to adjust the case of the match. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -68,8 +68,8 @@ The Vim pages contain the most recent information about Vim.  They also | |||||||
| contain links to the most recent version of Vim.  The FAQ is a list of | contain links to the most recent version of Vim.  The FAQ is a list of | ||||||
| Frequently Asked Questions.  Read this if you have problems. | Frequently Asked Questions.  Read this if you have problems. | ||||||
|  |  | ||||||
| 	VIM home page:	  http://www.vim.org/ | 	Vim home page:	  http://www.vim.org/ | ||||||
| 	VIM FAQ:	  http://vimdoc.sf.net/ | 	Vim FAQ:	  http://vimdoc.sf.net/ | ||||||
| 	Downloading:	  ftp://ftp.vim.org/pub/vim/MIRRORS | 	Downloading:	  ftp://ftp.vim.org/pub/vim/MIRRORS | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -175,7 +175,7 @@ that starts with ",".  Then you need to type another character for Vim to know | |||||||
| whether to use the "," mapping or the longer one.  To avoid this add the | whether to use the "," mapping or the longer one.  To avoid this add the | ||||||
| <nowait> argument.  Then the mapping will be used when it matches, Vim does | <nowait> argument.  Then the mapping will be used when it matches, Vim does | ||||||
| not wait for more characters to be typed.  However, if the characters were | not wait for more characters to be typed.  However, if the characters were | ||||||
| already type they are used. | already typed they are used. | ||||||
|  |  | ||||||
| 						*:map-<silent>* *:map-silent* | 						*:map-<silent>* *:map-silent* | ||||||
| To define a mapping which will not be echoed on the command line, add | To define a mapping which will not be echoed on the command line, add | ||||||
|   | |||||||
| @@ -744,6 +744,13 @@ a user-defined command. | |||||||
| You tried to set an option after startup that only allows changes during | You tried to set an option after startup that only allows changes during | ||||||
| startup. | startup. | ||||||
|  |  | ||||||
|  | 							*E943*  > | ||||||
|  |   Command table needs to be updated, run 'make cmdidxs' | ||||||
|  |  | ||||||
|  | This can only happen when changing the source code, when adding a command in | ||||||
|  | src/ex_cmds.h.  The lookup table then needs to be updated, by running: > | ||||||
|  | 	make cmdidxs | ||||||
|  |  | ||||||
| ============================================================================== | ============================================================================== | ||||||
| 3. Messages						*messages* | 3. Messages						*messages* | ||||||
|  |  | ||||||
|   | |||||||
| @@ -311,7 +311,7 @@ Note: In the future more global options can be made global-local.  Using | |||||||
|  |  | ||||||
| Setting the filetype | Setting the filetype | ||||||
|  |  | ||||||
| :setf[iletype] {filetype}			*:setf* *:setfiletype* | :setf[iletype] [FALLBACK] {filetype}			*:setf* *:setfiletype* | ||||||
| 			Set the 'filetype' option to {filetype}, but only if | 			Set the 'filetype' option to {filetype}, but only if | ||||||
| 			not done yet in a sequence of (nested) autocommands. | 			not done yet in a sequence of (nested) autocommands. | ||||||
| 			This is short for: > | 			This is short for: > | ||||||
| @@ -322,6 +322,12 @@ Setting the filetype | |||||||
| 			setting the 'filetype' option twice, causing different | 			setting the 'filetype' option twice, causing different | ||||||
| 			settings and syntax files to be loaded. | 			settings and syntax files to be loaded. | ||||||
|  |  | ||||||
|  | 			When the optional FALLBACK argument is present, a | ||||||
|  | 			later :setfiletype command will override the | ||||||
|  | 			'filetype'.  This is to used for filetype detections | ||||||
|  | 			that are just a guess.  |did_filetype()| will return | ||||||
|  | 			false after this command. | ||||||
|  |  | ||||||
| 				*option-window* *optwin* | 				*option-window* *optwin* | ||||||
| :bro[wse] se[t]			*:set-browse* *:browse-set* *:opt* *:options* | :bro[wse] se[t]			*:set-browse* *:browse-set* *:opt* *:options* | ||||||
| :opt[ions]		Open a window for viewing and setting all options. | :opt[ions]		Open a window for viewing and setting all options. | ||||||
| @@ -711,6 +717,12 @@ A jump table for the options with a short description can be found at |Q_op|. | |||||||
| <	Vim will guess the value.  In the GUI this should work correctly, | <	Vim will guess the value.  In the GUI this should work correctly, | ||||||
| 	in other cases Vim might not be able to guess the right value. | 	in other cases Vim might not be able to guess the right value. | ||||||
|  |  | ||||||
|  | 	When the t_BG option is set, Vim will use it to request the background | ||||||
|  | 	color from the terminal.  If the returned RGB value is dark/light and | ||||||
|  | 	'background' is not dark/light, 'background' will be set and the | ||||||
|  | 	screen is redrawn.  This may have side effects, make t_BG empty in | ||||||
|  | 	your .vimrc if you suspect this problem. | ||||||
|  |  | ||||||
| 	When starting the GUI, the default value for 'background' will be | 	When starting the GUI, the default value for 'background' will be | ||||||
| 	"light".  When the value is not set in the gvimrc, and Vim detects | 	"light".  When the value is not set in the gvimrc, and Vim detects | ||||||
| 	that the background is actually quite dark, 'background' is set to | 	that the background is actually quite dark, 'background' is set to | ||||||
|   | |||||||
| @@ -1058,12 +1058,16 @@ x	A single character, with no special meaning, matches itself | |||||||
| 	":s/[/x/" searches for "[/x" and replaces it with nothing.  It does | 	":s/[/x/" searches for "[/x" and replaces it with nothing.  It does | ||||||
| 	not search for "[" and replaces it with "x"! | 	not search for "[" and replaces it with "x"! | ||||||
|  |  | ||||||
|  | 								*E944* *E945* | ||||||
| 	If the sequence begins with "^", it matches any single character NOT | 	If the sequence begins with "^", it matches any single character NOT | ||||||
| 	in the collection: "[^xyz]" matches anything but 'x', 'y' and 'z'. | 	in the collection: "[^xyz]" matches anything but 'x', 'y' and 'z'. | ||||||
| 	- If two characters in the sequence are separated by '-', this is | 	- If two characters in the sequence are separated by '-', this is | ||||||
| 	  shorthand for the full list of ASCII characters between them.  E.g., | 	  shorthand for the full list of ASCII characters between them.  E.g., | ||||||
| 	  "[0-9]" matches any decimal digit.  Non-ASCII characters can be | 	  "[0-9]" matches any decimal digit. If the starting character exceeds | ||||||
| 	  used, but the character values must not be more than 256 apart. | 	  the ending character, e.g. [c-a], E944 occurs. Non-ASCII characters | ||||||
|  | 	  can be used, but the character values must not be more than 256 apart | ||||||
|  | 	  in the old regexp engine. For example, searching by [\u3000-\u4000] | ||||||
|  | 	  after setting re=1 emits a E945 error. Prepending \%#=2 will fix it. | ||||||
| 	- A character class expression is evaluated to the set of characters | 	- A character class expression is evaluated to the set of characters | ||||||
| 	  belonging to that character class.  The following character classes | 	  belonging to that character class.  The following character classes | ||||||
| 	  are supported: | 	  are supported: | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| *pi_matchit.txt*   Extended "%" matching | *pi_matchit.txt*   Extended "%" matching | ||||||
|  |  | ||||||
| For Vim version 6.3.  Last change:  2015 May 21 | For Vim version 6.3.  Last change:  2017 May 14 | ||||||
|  |  | ||||||
| *matchit* *matchit.vim* | *matchit* *matchit.vim* | ||||||
|  |  | ||||||
| @@ -211,7 +211,7 @@ Examples: | |||||||
| 	In LaTeX, since "%" is used as the comment character, you can > | 	In LaTeX, since "%" is used as the comment character, you can > | ||||||
| 		:let b:match_skip = 'r:%' | 		:let b:match_skip = 'r:%' | ||||||
| <	Unfortunately, this will skip anything after "\%", an escaped "%".  To | <	Unfortunately, this will skip anything after "\%", an escaped "%".  To | ||||||
| 	allow for this, and also "\\%" (an excaped backslash followed by the | 	allow for this, and also "\\%" (an escaped backslash followed by the | ||||||
| 	comment character) you can > | 	comment character) you can > | ||||||
| 		:let b:match_skip = 'r:\(^\|[^\\]\)\(\\\\\)*%' | 		:let b:match_skip = 'r:\(^\|[^\\]\)\(\\\\\)*%' | ||||||
| < | < | ||||||
| @@ -356,7 +356,8 @@ The back reference '\'.d refers to the same thing as '\'.b:match_table[d] in | |||||||
| The various |:vmap|s defined in the script (%, |g%|, |[%|, |]%|, |a%|) may | The various |:vmap|s defined in the script (%, |g%|, |[%|, |]%|, |a%|) may | ||||||
| have undesired effects in Select mode |Select-mode-mapping|.  At least, if you | have undesired effects in Select mode |Select-mode-mapping|.  At least, if you | ||||||
| want to replace the selection with any character in "ag%[]" there will be a | want to replace the selection with any character in "ag%[]" there will be a | ||||||
| pause of |'updatetime'| first. | pause of |'updatetime'| first. E.g., "yV%" would normally work linewise, but | ||||||
|  | the plugin mapping makes it characterwise. | ||||||
|  |  | ||||||
| It would be nice if "\0" were recognized as the entire pattern.  That is, it | It would be nice if "\0" were recognized as the entire pattern.  That is, it | ||||||
| would be nice if "foo:\end\0" had the same effect as "\(foo\):\end\1". | would be nice if "foo:\end\0" had the same effect as "\(foo\):\end\1". | ||||||
|   | |||||||
| @@ -87,25 +87,25 @@ If the option is empty, then vim will use the system default printer for | |||||||
| 					Macintosh: mac-roman, | 					Macintosh: mac-roman, | ||||||
| 					HPUX: hp-roman8) | 					HPUX: hp-roman8) | ||||||
| 			global | 			global | ||||||
| Sets the character encoding used when printing.  This option tells VIM which | Sets the character encoding used when printing.  This option tells Vim which | ||||||
| print character encoding file from the "print" directory in 'runtimepath' to | print character encoding file from the "print" directory in 'runtimepath' to | ||||||
| use. | use. | ||||||
|  |  | ||||||
| This option will accept any value from |encoding-names|.  Any recognized names | This option will accept any value from |encoding-names|.  Any recognized names | ||||||
| are converted to VIM standard names - see 'encoding' for more details.  Names | are converted to Vim standard names - see 'encoding' for more details.  Names | ||||||
| not recognized by VIM will just be converted to lower case and underscores | not recognized by Vim will just be converted to lower case and underscores | ||||||
| replaced with '-' signs. | replaced with '-' signs. | ||||||
|  |  | ||||||
| If 'printencoding' is empty or VIM cannot find the file then it will use | If 'printencoding' is empty or Vim cannot find the file then it will use | ||||||
| 'encoding' (if VIM is compiled with |+multi_byte| and it is set an 8-bit | 'encoding' (if Vim is compiled with |+multi_byte| and it is set an 8-bit | ||||||
| encoding) to find the print character encoding file.  If VIM is unable to find | encoding) to find the print character encoding file.  If Vim is unable to find | ||||||
| a character encoding file then it will use the "latin1" print character | a character encoding file then it will use the "latin1" print character | ||||||
| encoding file. | encoding file. | ||||||
|  |  | ||||||
| When 'encoding' is set to a multi-byte encoding, VIM will try to convert | When 'encoding' is set to a multi-byte encoding, Vim will try to convert | ||||||
| characters to the printing encoding for printing (if 'printencoding' is empty | characters to the printing encoding for printing (if 'printencoding' is empty | ||||||
| then the conversion will be to latin1).  Conversion to a printing encoding | then the conversion will be to latin1).  Conversion to a printing encoding | ||||||
| other than latin1 will require VIM to be compiled with the |+iconv| feature. | other than latin1 will require Vim to be compiled with the |+iconv| feature. | ||||||
| If no conversion is possible then printing will fail.  Any characters that | If no conversion is possible then printing will fail.  Any characters that | ||||||
| cannot be converted will be replaced with upside down question marks. | cannot be converted will be replaced with upside down question marks. | ||||||
|  |  | ||||||
| @@ -186,7 +186,7 @@ header is used when this option is empty. | |||||||
| 'printmbcharset' 'pmbcs'  string (default "") | 'printmbcharset' 'pmbcs'  string (default "") | ||||||
| 			  global | 			  global | ||||||
| Sets the CJK character set to be used when generating CJK output from | Sets the CJK character set to be used when generating CJK output from | ||||||
| |:hardcopy|.  The following predefined values are currently recognised by VIM: | |:hardcopy|.  The following predefined values are currently recognised by Vim: | ||||||
|  |  | ||||||
| 		Value		Description ~ | 		Value		Description ~ | ||||||
|   Chinese	GB_2312-80 |   Chinese	GB_2312-80 | ||||||
| @@ -253,7 +253,7 @@ Japanese text you would do the following; > | |||||||
|  |  | ||||||
| If 'printmbcharset' is not one of the above values then it is assumed to | If 'printmbcharset' is not one of the above values then it is assumed to | ||||||
| specify a custom multi-byte character set and no check will be made that it is | specify a custom multi-byte character set and no check will be made that it is | ||||||
| compatible with the value for 'printencoding'.  VIM will look for a file | compatible with the value for 'printencoding'.  Vim will look for a file | ||||||
| defining the character set in the "print" directory in 'runtimepath'. | defining the character set in the "print" directory in 'runtimepath'. | ||||||
|  |  | ||||||
| 							*pmbfn-option* | 							*pmbfn-option* | ||||||
| @@ -403,10 +403,10 @@ There are currently a number of limitations with PostScript printing: | |||||||
|   possible to get all the characters in an encoding to print by installing a |   possible to get all the characters in an encoding to print by installing a | ||||||
|   new version of the Courier font family. |   new version of the Courier font family. | ||||||
|  |  | ||||||
| - Multi-byte support - Currently VIM will try to convert multi-byte characters | - Multi-byte support - Currently Vim will try to convert multi-byte characters | ||||||
|   to the 8-bit encoding specified by 'printencoding' (or latin1 if it is |   to the 8-bit encoding specified by 'printencoding' (or latin1 if it is | ||||||
|   empty).  Any characters that are not successfully converted are shown as |   empty).  Any characters that are not successfully converted are shown as | ||||||
|   unknown characters.  Printing will fail if VIM cannot convert the multi-byte |   unknown characters.  Printing will fail if Vim cannot convert the multi-byte | ||||||
|   to the 8-bit encoding. |   to the 8-bit encoding. | ||||||
|  |  | ||||||
| ============================================================================== | ============================================================================== | ||||||
| @@ -417,11 +417,11 @@ you need to define your own PostScript font encoding vector.  Details on how | |||||||
| to define a font encoding vector is beyond the scope of this help file, but | to define a font encoding vector is beyond the scope of this help file, but | ||||||
| you can find details in the PostScript Language Reference Manual, 3rd Edition, | you can find details in the PostScript Language Reference Manual, 3rd Edition, | ||||||
| published by Addison-Wesley and available in PDF form at | published by Addison-Wesley and available in PDF form at | ||||||
| http://www.adobe.com/.  The following describes what you need to do for VIM to | http://www.adobe.com/.  The following describes what you need to do for Vim to | ||||||
| locate and use your print character encoding. | locate and use your print character encoding. | ||||||
|  |  | ||||||
| i.   Decide on a unique name for your encoding vector, one that does not clash | i.   Decide on a unique name for your encoding vector, one that does not clash | ||||||
|      with any of the recognized or standard encoding names that VIM uses (see |      with any of the recognized or standard encoding names that Vim uses (see | ||||||
|      |encoding-names| for a list), and that no one else is likely to use. |      |encoding-names| for a list), and that no one else is likely to use. | ||||||
| ii.  Copy $VIMRUNTIME/print/latin1.ps to the print subdirectory in your | ii.  Copy $VIMRUNTIME/print/latin1.ps to the print subdirectory in your | ||||||
|      'runtimepath' and rename it with your unique name. |      'runtimepath' and rename it with your unique name. | ||||||
| @@ -429,23 +429,23 @@ iii. Edit your renamed copy of latin1.ps, replacing all occurrences of latin1 | |||||||
|      with your unique name (don't forget the line starting %%Title:), and |      with your unique name (don't forget the line starting %%Title:), and | ||||||
|      modify the array of glyph names to define your new encoding vector.  The |      modify the array of glyph names to define your new encoding vector.  The | ||||||
|      array must have exactly 256 entries or you will not be able to print! |      array must have exactly 256 entries or you will not be able to print! | ||||||
| iv.  Within VIM, set 'printencoding' to your unique encoding name and then | iv.  Within Vim, set 'printencoding' to your unique encoding name and then | ||||||
|      print your file.  VIM will now use your custom print character encoding. |      print your file.  Vim will now use your custom print character encoding. | ||||||
|  |  | ||||||
| VIM will report an error with the resource file if you change the order or | Vim will report an error with the resource file if you change the order or | ||||||
| content of the first 3 lines, other than the name of the encoding on the line | content of the first 3 lines, other than the name of the encoding on the line | ||||||
| starting %%Title: or the version number on the line starting %%Version:. | starting %%Title: or the version number on the line starting %%Version:. | ||||||
|  |  | ||||||
| [Technical explanation for those that know PostScript - VIM looks for a file | [Technical explanation for those that know PostScript - Vim looks for a file | ||||||
| with the same name as the encoding it will use when printing.  The file | with the same name as the encoding it will use when printing.  The file | ||||||
| defines a new PostScript Encoding resource called /VIM-name, where name is the | defines a new PostScript Encoding resource called /VIM-name, where name is the | ||||||
| print character encoding VIM will use.] | print character encoding Vim will use.] | ||||||
|  |  | ||||||
| ============================================================================== | ============================================================================== | ||||||
| 5. PostScript CJK Printing			*postscript-cjk-printing* | 5. PostScript CJK Printing			*postscript-cjk-printing* | ||||||
| 							*E673* *E674* *E675* | 							*E673* *E674* *E675* | ||||||
|  |  | ||||||
| VIM supports printing of Chinese, Japanese, and Korean files.  Setting up VIM | Vim supports printing of Chinese, Japanese, and Korean files.  Setting up Vim | ||||||
| to correctly print CJK files requires setting up a few more options. | to correctly print CJK files requires setting up a few more options. | ||||||
|  |  | ||||||
| Each of these countries has many standard character sets and encodings which | Each of these countries has many standard character sets and encodings which | ||||||
| @@ -466,7 +466,7 @@ option allows you to specify different fonts to use when printing characters | |||||||
| which are syntax highlighted with the font styles normal, italic, bold and | which are syntax highlighted with the font styles normal, italic, bold and | ||||||
| bold-italic. | bold-italic. | ||||||
|  |  | ||||||
| No CJK fonts are supplied with VIM.  There are some free Korean, Japanese, and | No CJK fonts are supplied with Vim.  There are some free Korean, Japanese, and | ||||||
| Traditional Chinese fonts available at: | Traditional Chinese fonts available at: | ||||||
|  |  | ||||||
|   http://examples.oreilly.com/cjkvinfo/adobe/samples/ |   http://examples.oreilly.com/cjkvinfo/adobe/samples/ | ||||||
| @@ -481,7 +481,7 @@ CJK fonts can be large containing several thousand glyphs, and it is not | |||||||
| uncommon to find that they only contain a subset of a national standard.  It | uncommon to find that they only contain a subset of a national standard.  It | ||||||
| is not unusual to find the fonts to not include characters for codes in the | is not unusual to find the fonts to not include characters for codes in the | ||||||
| ASCII code range.  If you find half-width Roman characters are not appearing | ASCII code range.  If you find half-width Roman characters are not appearing | ||||||
| in your printout then you should configure VIM to use the Courier font the | in your printout then you should configure Vim to use the Courier font the | ||||||
| half-width ASCII characters with 'printmbfont'.  If your font does not include | half-width ASCII characters with 'printmbfont'.  If your font does not include | ||||||
| other characters then you will need to find another font that does. | other characters then you will need to find another font that does. | ||||||
|  |  | ||||||
| @@ -489,7 +489,7 @@ Another issue with ASCII characters, is that the various national character | |||||||
| sets specify a couple of different glyphs in the ASCII code range.  If you | sets specify a couple of different glyphs in the ASCII code range.  If you | ||||||
| print ASCII text using the national character set you may see some unexpected | print ASCII text using the national character set you may see some unexpected | ||||||
| characters.  If you want true ASCII code printing then you need to configure | characters.  If you want true ASCII code printing then you need to configure | ||||||
| VIM to output ASCII characters for the ASCII code range with 'printmbfont'. | Vim to output ASCII characters for the ASCII code range with 'printmbfont'. | ||||||
|  |  | ||||||
| It is possible to define your own multi-byte character set although this | It is possible to define your own multi-byte character set although this | ||||||
| should not be attempted lightly.  A discussion on the process if beyond the | should not be attempted lightly.  A discussion on the process if beyond the | ||||||
| @@ -508,13 +508,13 @@ print job completing. | |||||||
| There are a number of possible causes as to why the printing may have failed: | There are a number of possible causes as to why the printing may have failed: | ||||||
|  |  | ||||||
| - Wrong version of the prolog resource file.  The prolog resource file | - Wrong version of the prolog resource file.  The prolog resource file | ||||||
|   contains some PostScript that VIM needs to be able to print.  Each version |   contains some PostScript that Vim needs to be able to print.  Each version | ||||||
|   of VIM needs one particular version.  Make sure you have correctly installed |   of Vim needs one particular version.  Make sure you have correctly installed | ||||||
|   the runtime files, and don't have any old versions of a file called prolog |   the runtime files, and don't have any old versions of a file called prolog | ||||||
|   in the print directory in your 'runtimepath' directory. |   in the print directory in your 'runtimepath' directory. | ||||||
|  |  | ||||||
| - Paper size.  Some PostScript printers will abort printing a file if they do | - Paper size.  Some PostScript printers will abort printing a file if they do | ||||||
|   not support the requested paper size.  By default VIM uses A4 paper.  Find |   not support the requested paper size.  By default Vim uses A4 paper.  Find | ||||||
|   out what size paper your printer normally uses and set the appropriate paper |   out what size paper your printer normally uses and set the appropriate paper | ||||||
|   size with 'printoptions'.  If you cannot find the name of the paper used, |   size with 'printoptions'.  If you cannot find the name of the paper used, | ||||||
|   measure a sheet and compare it with the table of supported paper sizes listed |   measure a sheet and compare it with the table of supported paper sizes listed | ||||||
| @@ -645,7 +645,7 @@ complex print document creation. | |||||||
|  |  | ||||||
| N-UP PRINTING | N-UP PRINTING | ||||||
|  |  | ||||||
| The psnup utility takes an existing PostScript file generated from VIM and | The psnup utility takes an existing PostScript file generated from Vim and | ||||||
| convert it to an n-up version.  The simplest way to create a 2-up printout is | convert it to an n-up version.  The simplest way to create a 2-up printout is | ||||||
| to first create a PostScript file with: > | to first create a PostScript file with: > | ||||||
|  |  | ||||||
| @@ -701,16 +701,16 @@ There are a couple of points to bear in mind: | |||||||
| ============================================================================== | ============================================================================== | ||||||
| 8. Formfeed Characters					*printing-formfeed* | 8. Formfeed Characters					*printing-formfeed* | ||||||
|  |  | ||||||
| By default VIM does not do any special processing of |formfeed| control | By default Vim does not do any special processing of |formfeed| control | ||||||
| characters.  Setting the 'printoptions' formfeed item will make VIM recognize | characters.  Setting the 'printoptions' formfeed item will make Vim recognize | ||||||
| formfeed characters and continue printing the current line at the beginning | formfeed characters and continue printing the current line at the beginning | ||||||
| of the first line on a new page.  The use of formfeed characters provides | of the first line on a new page.  The use of formfeed characters provides | ||||||
| rudimentary print control but there are certain things to be aware of. | rudimentary print control but there are certain things to be aware of. | ||||||
|  |  | ||||||
| VIM will always start printing a line (including a line number if enabled) | Vim will always start printing a line (including a line number if enabled) | ||||||
| containing a formfeed character, even if it is the first character on the | containing a formfeed character, even if it is the first character on the | ||||||
| line.  This means if a line starting with a formfeed character is the first | line.  This means if a line starting with a formfeed character is the first | ||||||
| line of a page then VIM will print a blank page. | line of a page then Vim will print a blank page. | ||||||
|  |  | ||||||
| Since the line number is printed at the start of printing the line containing | Since the line number is printed at the start of printing the line containing | ||||||
| the formfeed character, the remainder of the line printed on the new page | the formfeed character, the remainder of the line printed on the new page | ||||||
| @@ -719,7 +719,7 @@ lines of a long line when wrap in 'printoptions' is enabled). | |||||||
|  |  | ||||||
| If the formfeed character is the last character on a line, then printing will | If the formfeed character is the last character on a line, then printing will | ||||||
| continue on the second line of the new page, not the first.  This is due to | continue on the second line of the new page, not the first.  This is due to | ||||||
| VIM processing the end of the line after the formfeed character and moving | Vim processing the end of the line after the formfeed character and moving | ||||||
| down a line to continue printing. | down a line to continue printing. | ||||||
|  |  | ||||||
| Due to the points made above it is recommended that when formfeed character | Due to the points made above it is recommended that when formfeed character | ||||||
|   | |||||||
| @@ -1253,6 +1253,7 @@ Context-sensitive completion on the command-line: | |||||||
|  |  | ||||||
| |:sfind|	:sf[ind] {file}		split window, find {file} in 'path' | |:sfind|	:sf[ind] {file}		split window, find {file} in 'path' | ||||||
| 					   and edit it | 					   and edit it | ||||||
|  | |:terminal|	:terminal {cmd}		open a terminal window | ||||||
| |CTRL-W_]|	CTRL-W ]		split window and jump to tag under | |CTRL-W_]|	CTRL-W ]		split window and jump to tag under | ||||||
| 					   cursor | 					   cursor | ||||||
| |CTRL-W_f|	CTRL-W f		split window and edit file name under | |CTRL-W_f|	CTRL-W f		split window and edit file name under | ||||||
|   | |||||||
| @@ -137,6 +137,7 @@ the description in |eval.txt| or use CTRL-] on the function name to jump to | |||||||
| the full explanation. | the full explanation. | ||||||
|  |  | ||||||
|     synopsis				     explanation ~ |     synopsis				     explanation ~ | ||||||
|  |     remote_startserver( name)		     run a server | ||||||
|     remote_expr( server, string, idvar)      send expression |     remote_expr( server, string, idvar)      send expression | ||||||
|     remote_send( server, string, idvar)      send key sequence |     remote_send( server, string, idvar)      send key sequence | ||||||
|     serverlist()			     get a list of available servers |     serverlist()			     get a list of available servers | ||||||
|   | |||||||
| @@ -4757,10 +4757,11 @@ ctermbg={color-nr}				*highlight-ctermbg* | |||||||
| 	Example: > | 	Example: > | ||||||
| 		:highlight Normal ctermfg=grey ctermbg=darkblue | 		:highlight Normal ctermfg=grey ctermbg=darkblue | ||||||
| <	When setting the "ctermbg" color for the Normal group, the | <	When setting the "ctermbg" color for the Normal group, the | ||||||
| 	'background' option will be adjusted automatically.  This causes the | 	'background' option will be adjusted automatically, under the | ||||||
| 	highlight groups that depend on 'background' to change!  This means | 	condition that the color is recognized and 'background' was not set | ||||||
| 	you should set the colors for Normal first, before setting other | 	explicitly.  This causes the highlight groups that depend on | ||||||
| 	colors. | 	'background' to change!  This means you should set the colors for | ||||||
|  | 	Normal first, before setting other colors. | ||||||
| 	When a colorscheme is being used, changing 'background' causes it to | 	When a colorscheme is being used, changing 'background' causes it to | ||||||
| 	be reloaded, which may reset all colors (including Normal).  First | 	be reloaded, which may reset all colors (including Normal).  First | ||||||
| 	delete the "g:colors_name" variable when you don't want this. | 	delete the "g:colors_name" variable when you don't want this. | ||||||
|   | |||||||
| @@ -187,7 +187,7 @@ mouse button.  The selected text will be inserted. | |||||||
| The "current selection" will only remain valid until some other text is | The "current selection" will only remain valid until some other text is | ||||||
| selected.  After doing the paste in the other gVim, now select some characters | selected.  After doing the paste in the other gVim, now select some characters | ||||||
| in that window.  You will notice that the words that were previously selected | in that window.  You will notice that the words that were previously selected | ||||||
| in the other gVim window are displayed differently.  This means that it no | in the other gvim window are displayed differently.  This means that it no | ||||||
| longer is the current selection. | longer is the current selection. | ||||||
|  |  | ||||||
| You don't need to select text with the mouse, using the keyboard commands for | You don't need to select text with the mouse, using the keyboard commands for | ||||||
| @@ -211,7 +211,7 @@ USING BOTH | |||||||
|  |  | ||||||
| This use of both the "current selection" and the "real clipboard" might sound | This use of both the "current selection" and the "real clipboard" might sound | ||||||
| a bit confusing.  But it is very useful.  Let's show this with an example. | a bit confusing.  But it is very useful.  Let's show this with an example. | ||||||
| Use one gVim with a text file and perform these actions: | Use one gvim with a text file and perform these actions: | ||||||
|  |  | ||||||
| -  Select two words in Visual mode. | -  Select two words in Visual mode. | ||||||
| -  Use the Edit/Copy menu to get these words onto the clipboard. | -  Use the Edit/Copy menu to get these words onto the clipboard. | ||||||
|   | |||||||
| @@ -888,6 +888,7 @@ GUI:						*gui-functions* | |||||||
|  |  | ||||||
| Vim server:					*server-functions* | Vim server:					*server-functions* | ||||||
| 	serverlist()		return the list of server names | 	serverlist()		return the list of server names | ||||||
|  | 	remote_startserve()	run a server | ||||||
| 	remote_send()		send command characters to a Vim server | 	remote_send()		send command characters to a Vim server | ||||||
| 	remote_expr()		evaluate an expression in a Vim server | 	remote_expr()		evaluate an expression in a Vim server | ||||||
| 	server2client()		send a reply to a client of a Vim server | 	server2client()		send a reply to a client of a Vim server | ||||||
| @@ -2226,8 +2227,8 @@ plugin for the mail filetype: > | |||||||
| 	endif | 	endif | ||||||
|  |  | ||||||
| Two global variables are used: | Two global variables are used: | ||||||
| no_plugin_maps		disables mappings for all filetype plugins | |no_plugin_maps|	disables mappings for all filetype plugins | ||||||
| no_mail_maps		disables mappings for a specific filetype | |no_mail_maps|		disables mappings for the "mail" filetype | ||||||
|  |  | ||||||
|  |  | ||||||
| USER COMMANDS | USER COMMANDS | ||||||
|   | |||||||
| @@ -686,7 +686,7 @@ that included files do this too, you might have to reset "b:current_syntax" if | |||||||
| you include two files. | you include two files. | ||||||
|  |  | ||||||
| If you want your syntax file to work with Vim 5.x, add a check for v:version. | If you want your syntax file to work with Vim 5.x, add a check for v:version. | ||||||
| See yacc.vim for an example. | Find an syntax file in the Vim 7.2 distribution for an example. | ||||||
|  |  | ||||||
| Do not include anything that is a user preference.  Don't set 'tabstop', | Do not include anything that is a user preference.  Don't set 'tabstop', | ||||||
| 'expandtab', etc.  These belong in a filetype plugin. | 'expandtab', etc.  These belong in a filetype plugin. | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| " Vim support file to detect file types | " Vim support file to detect file types | ||||||
| " | " | ||||||
| " Maintainer:	Bram Moolenaar <Bram@vim.org> | " Maintainer:	Bram Moolenaar <Bram@vim.org> | ||||||
| " Last Change:	2017 Mar 13 | " Last Change:	2017 Jul 11 | ||||||
|  |  | ||||||
| " Listen very carefully, I will say this only once | " Listen very carefully, I will say this only once | ||||||
| if exists("did_load_filetypes") | if exists("did_load_filetypes") | ||||||
| @@ -284,7 +284,8 @@ au BufNewFile,BufRead *.bib			setf bib | |||||||
| au BufNewFile,BufRead *.bst			setf bst | au BufNewFile,BufRead *.bst			setf bst | ||||||
|  |  | ||||||
| " BIND configuration | " BIND configuration | ||||||
| au BufNewFile,BufRead named.conf,rndc.conf	setf named | " sudoedit uses namedXXXX.conf | ||||||
|  | au BufNewFile,BufRead named*.conf,rndc*.conf	setf named | ||||||
|  |  | ||||||
| " BIND zone | " BIND zone | ||||||
| au BufNewFile,BufRead named.root		setf bindzone | au BufNewFile,BufRead named.root		setf bindzone | ||||||
| @@ -626,7 +627,13 @@ au BufNewFile,BufRead dict.conf,.dictrc		setf dictconf | |||||||
| au BufNewFile,BufRead dictd.conf		setf dictdconf | au BufNewFile,BufRead dictd.conf		setf dictdconf | ||||||
|  |  | ||||||
| " Diff files | " Diff files | ||||||
| au BufNewFile,BufRead *.diff,*.rej,*.patch	setf diff | au BufNewFile,BufRead *.diff,*.rej		setf diff | ||||||
|  | au BufNewFile,BufRead *.patch | ||||||
|  | 	\ if getline(1) =~ '^From [0-9a-f]\{40\} Mon Sep 17 00:00:00 2001$' | | ||||||
|  | 	\   setf gitsendemail | | ||||||
|  | 	\ else | | ||||||
|  | 	\   setf diff | | ||||||
|  | 	\ endif | ||||||
|  |  | ||||||
| " Dircolors | " Dircolors | ||||||
| au BufNewFile,BufRead .dir_colors,.dircolors,*/etc/DIR_COLORS	setf dircolors | au BufNewFile,BufRead .dir_colors,.dircolors,*/etc/DIR_COLORS	setf dircolors | ||||||
| @@ -795,6 +802,7 @@ if !empty($XDG_CONFIG_HOME) | |||||||
|   au BufNewFile,BufRead $XDG_CONFIG_HOME/git/config	setf gitconfig |   au BufNewFile,BufRead $XDG_CONFIG_HOME/git/config	setf gitconfig | ||||||
| endif | endif | ||||||
| au BufNewFile,BufRead git-rebase-todo		setf gitrebase | au BufNewFile,BufRead git-rebase-todo		setf gitrebase | ||||||
|  | au BufRead,BufNewFile .gitsendemail.msg.??????	setf gitsendemail | ||||||
| au BufNewFile,BufRead .msg.[0-9]* | au BufNewFile,BufRead .msg.[0-9]* | ||||||
|       \ if getline(1) =~ '^From.*# This line is ignored.$' | |       \ if getline(1) =~ '^From.*# This line is ignored.$' | | ||||||
|       \   setf gitsendemail | |       \   setf gitsendemail | | ||||||
| @@ -975,7 +983,7 @@ au BufNewFile,BufRead */etc/initng/*/*.i,*.ii	setf initng | |||||||
|  |  | ||||||
| " Innovation Data Processing | " Innovation Data Processing | ||||||
| au BufRead,BufNewFile upstream.dat\c,upstream.*.dat\c,*.upstream.dat\c 	setf upstreamdat | au BufRead,BufNewFile upstream.dat\c,upstream.*.dat\c,*.upstream.dat\c 	setf upstreamdat | ||||||
| au BufRead,BufNewFile upstream.log\c,upstream.*.log\c,*.upstream.log\c 	setf upstreamlog | au BufRead,BufNewFile fdrupstream.log,upstream.log\c,upstream.*.log\c,*.upstream.log\c,UPSTREAM-*.log\c 	setf upstreamlog | ||||||
| au BufRead,BufNewFile upstreaminstall.log\c,upstreaminstall.*.log\c,*.upstreaminstall.log\c setf upstreaminstalllog | au BufRead,BufNewFile upstreaminstall.log\c,upstreaminstall.*.log\c,*.upstreaminstall.log\c setf upstreaminstalllog | ||||||
| au BufRead,BufNewFile usserver.log\c,usserver.*.log\c,*.usserver.log\c 	setf usserverlog | au BufRead,BufNewFile usserver.log\c,usserver.*.log\c,*.usserver.log\c 	setf usserverlog | ||||||
| au BufRead,BufNewFile usw2kagt.log\c,usw2kagt.*.log\c,*.usw2kagt.log\c 	setf usw2kagtlog | au BufRead,BufNewFile usw2kagt.log\c,usw2kagt.*.log\c,*.usw2kagt.log\c 	setf usw2kagtlog | ||||||
| @@ -1413,8 +1421,8 @@ if has("fname_case") | |||||||
| else | else | ||||||
|   au BufNewFile,BufRead *.pl			call s:FTpl() |   au BufNewFile,BufRead *.pl			call s:FTpl() | ||||||
| endif | endif | ||||||
| au BufNewFile,BufRead *.plx,*.al		setf perl | au BufNewFile,BufRead *.plx,*.al,*.psgi		setf perl | ||||||
| au BufNewFile,BufRead *.p6,*.pm6,*.pl6	setf perl6 | au BufNewFile,BufRead *.p6,*.pm6,*.pl6		setf perl6 | ||||||
|  |  | ||||||
| func! s:FTpl() | func! s:FTpl() | ||||||
|   if exists("g:filetype_pl") |   if exists("g:filetype_pl") | ||||||
| @@ -1801,6 +1809,9 @@ au BufNewFile,BufRead *.sa			setf sather | |||||||
| " Scala | " Scala | ||||||
| au BufNewFile,BufRead *.scala			setf scala | au BufNewFile,BufRead *.scala			setf scala | ||||||
|  |  | ||||||
|  | " SBT - Scala Build Tool | ||||||
|  | au BufNewFile,BufRead *.sbt			setf sbt | ||||||
|  |  | ||||||
| " Scilab | " Scilab | ||||||
| au BufNewFile,BufRead *.sci,*.sce		setf scilab | au BufNewFile,BufRead *.sci,*.sce		setf scilab | ||||||
|  |  | ||||||
| @@ -2127,7 +2138,10 @@ au BufNewFile,BufRead ssh_config,*/.ssh/config	setf sshconfig | |||||||
| au BufNewFile,BufRead sshd_config		setf sshdconfig | au BufNewFile,BufRead sshd_config		setf sshdconfig | ||||||
|  |  | ||||||
| " Stata | " Stata | ||||||
| au BufNewFile,BufRead *.ado,*.class,*.do,*.imata,*.mata   setf stata | au BufNewFile,BufRead *.ado,*.do,*.imata,*.mata	setf stata | ||||||
|  | " Also *.class, but not when it's a Java bytecode file | ||||||
|  | au BufNewFile,BufRead *.class | ||||||
|  | 	\ if getline(1) !~ "^\xca\xfe\xba\xbe" | setf stata | endif | ||||||
|  |  | ||||||
| " SMCL | " SMCL | ||||||
| au BufNewFile,BufRead *.hlp,*.ihlp,*.smcl	setf smcl | au BufNewFile,BufRead *.hlp,*.ihlp,*.smcl	setf smcl | ||||||
| @@ -2222,6 +2236,8 @@ func! s:FTtex() | |||||||
|     let format = tolower(matchstr(firstline, '\a\+')) |     let format = tolower(matchstr(firstline, '\a\+')) | ||||||
|     let format = substitute(format, 'pdf', '', '') |     let format = substitute(format, 'pdf', '', '') | ||||||
|     if format == 'tex' |     if format == 'tex' | ||||||
|  |       let format = 'latex' | ||||||
|  |     elseif format == 'plaintex' | ||||||
|       let format = 'plain' |       let format = 'plain' | ||||||
|     endif |     endif | ||||||
|   else |   else | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| " Language:    Hamster Script | " Language:    Hamster Script | ||||||
| " Version:     2.0.6.0 | " Version:     2.0.6.0 | ||||||
| " Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com> | " Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com> | ||||||
| " Last Change: 2017 Mar 07 | " Last Change: 2017 Mar 18 | ||||||
|  |  | ||||||
| " Only do this when not done yet for this buffer | " Only do this when not done yet for this buffer | ||||||
| if exists("b:did_ftplugin") | if exists("b:did_ftplugin") | ||||||
| @@ -14,7 +14,6 @@ let b:did_ftplugin = 1 | |||||||
|  |  | ||||||
| let s:cpo_save = &cpo | let s:cpo_save = &cpo | ||||||
| set cpo&vim | set cpo&vim | ||||||
| set cpo-=C |  | ||||||
|  |  | ||||||
| let b:undo_ftplugin = "setl fo< com< tw< commentstring<" | let b:undo_ftplugin = "setl fo< com< tw< commentstring<" | ||||||
| 	\ . "| unlet! b:match_ignorecase b:match_words b:match_skip" | 	\ . "| unlet! b:match_ignorecase b:match_words b:match_skip" | ||||||
|   | |||||||
							
								
								
									
										197
									
								
								runtime/ftplugin/rust.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										197
									
								
								runtime/ftplugin/rust.vim
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,197 @@ | |||||||
|  | " Language:     Rust | ||||||
|  | " Description:  Vim ftplugin for Rust | ||||||
|  | " Maintainer:   Chris Morgan <me@chrismorgan.info> | ||||||
|  | " Maintainer:   Kevin Ballard <kevin@sb.org> | ||||||
|  | " Last Change:  June 08, 2016 | ||||||
|  | " For bugs, patches and license go to https://github.com/rust-lang/rust.vim  | ||||||
|  |  | ||||||
|  | if exists("b:did_ftplugin") | ||||||
|  | 	finish | ||||||
|  | endif | ||||||
|  | let b:did_ftplugin = 1 | ||||||
|  |  | ||||||
|  | let s:save_cpo = &cpo | ||||||
|  | set cpo&vim | ||||||
|  |  | ||||||
|  | augroup rust.vim | ||||||
|  | autocmd! | ||||||
|  |  | ||||||
|  | " Variables {{{1 | ||||||
|  |  | ||||||
|  | " The rust source code at present seems to typically omit a leader on /*! | ||||||
|  | " comments, so we'll use that as our default, but make it easy to switch. | ||||||
|  | " This does not affect indentation at all (I tested it with and without | ||||||
|  | " leader), merely whether a leader is inserted by default or not. | ||||||
|  | if exists("g:rust_bang_comment_leader") && g:rust_bang_comment_leader != 0 | ||||||
|  | 	" Why is the `,s0:/*,mb:\ ,ex:*/` there, you ask? I don't understand why, | ||||||
|  | 	" but without it, */ gets indented one space even if there were no | ||||||
|  | 	" leaders. I'm fairly sure that's a Vim bug. | ||||||
|  | 	setlocal comments=s1:/*,mb:*,ex:*/,s0:/*,mb:\ ,ex:*/,:///,://!,:// | ||||||
|  | else | ||||||
|  | 	setlocal comments=s0:/*!,m:\ ,ex:*/,s1:/*,mb:*,ex:*/,:///,://!,:// | ||||||
|  | endif | ||||||
|  | setlocal commentstring=//%s | ||||||
|  | setlocal formatoptions-=t formatoptions+=croqnl | ||||||
|  | " j was only added in 7.3.541, so stop complaints about its nonexistence | ||||||
|  | silent! setlocal formatoptions+=j | ||||||
|  |  | ||||||
|  | " smartindent will be overridden by indentexpr if filetype indent is on, but | ||||||
|  | " otherwise it's better than nothing. | ||||||
|  | setlocal smartindent nocindent | ||||||
|  |  | ||||||
|  | if !exists("g:rust_recommended_style") || g:rust_recommended_style != 0 | ||||||
|  | 	setlocal tabstop=4 shiftwidth=4 softtabstop=4 expandtab | ||||||
|  | 	setlocal textwidth=99 | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | " This includeexpr isn't perfect, but it's a good start | ||||||
|  | setlocal includeexpr=substitute(v:fname,'::','/','g') | ||||||
|  |  | ||||||
|  | setlocal suffixesadd=.rs | ||||||
|  |  | ||||||
|  | if exists("g:ftplugin_rust_source_path") | ||||||
|  |     let &l:path=g:ftplugin_rust_source_path . ',' . &l:path | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | if exists("g:loaded_delimitMate") | ||||||
|  | 	if exists("b:delimitMate_excluded_regions") | ||||||
|  | 		let b:rust_original_delimitMate_excluded_regions = b:delimitMate_excluded_regions | ||||||
|  | 	endif | ||||||
|  |  | ||||||
|  | 	let s:delimitMate_extra_excluded_regions = ',rustLifetimeCandidate,rustGenericLifetimeCandidate' | ||||||
|  |  | ||||||
|  | 	" For this buffer, when delimitMate issues the `User delimitMate_map` | ||||||
|  | 	" event in the autocommand system, add the above-defined extra excluded | ||||||
|  | 	" regions to delimitMate's state, if they have not already been added. | ||||||
|  | 	autocmd User <buffer> | ||||||
|  | 		\ if expand('<afile>') ==# 'delimitMate_map' && match( | ||||||
|  | 		\     delimitMate#Get("excluded_regions"), | ||||||
|  | 		\     s:delimitMate_extra_excluded_regions) == -1 | ||||||
|  | 		\|  let b:delimitMate_excluded_regions = | ||||||
|  | 		\       delimitMate#Get("excluded_regions") | ||||||
|  | 		\       . s:delimitMate_extra_excluded_regions | ||||||
|  | 		\|endif | ||||||
|  |  | ||||||
|  | 	" For this buffer, when delimitMate issues the `User delimitMate_unmap` | ||||||
|  | 	" event in the autocommand system, delete the above-defined extra excluded | ||||||
|  | 	" regions from delimitMate's state (the deletion being idempotent and | ||||||
|  | 	" having no effect if the extra excluded regions are not present in the | ||||||
|  | 	" targeted part of delimitMate's state). | ||||||
|  | 	autocmd User <buffer> | ||||||
|  | 		\ if expand('<afile>') ==# 'delimitMate_unmap' | ||||||
|  | 		\|  let b:delimitMate_excluded_regions = substitute( | ||||||
|  | 		\       delimitMate#Get("excluded_regions"), | ||||||
|  | 		\       '\C\V' . s:delimitMate_extra_excluded_regions, | ||||||
|  | 		\       '', 'g') | ||||||
|  | 		\|endif | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | if has("folding") && exists('g:rust_fold') && g:rust_fold != 0 | ||||||
|  | 	let b:rust_set_foldmethod=1 | ||||||
|  | 	setlocal foldmethod=syntax | ||||||
|  | 	if g:rust_fold == 2 | ||||||
|  | 		setlocal foldlevel< | ||||||
|  | 	else | ||||||
|  | 		setlocal foldlevel=99 | ||||||
|  | 	endif | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | if has('conceal') && exists('g:rust_conceal') && g:rust_conceal != 0 | ||||||
|  | 	let b:rust_set_conceallevel=1 | ||||||
|  | 	setlocal conceallevel=2 | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | " Motion Commands {{{1 | ||||||
|  |  | ||||||
|  | " Bind motion commands to support hanging indents | ||||||
|  | nnoremap <silent> <buffer> [[ :call rust#Jump('n', 'Back')<CR> | ||||||
|  | nnoremap <silent> <buffer> ]] :call rust#Jump('n', 'Forward')<CR> | ||||||
|  | xnoremap <silent> <buffer> [[ :call rust#Jump('v', 'Back')<CR> | ||||||
|  | xnoremap <silent> <buffer> ]] :call rust#Jump('v', 'Forward')<CR> | ||||||
|  | onoremap <silent> <buffer> [[ :call rust#Jump('o', 'Back')<CR> | ||||||
|  | onoremap <silent> <buffer> ]] :call rust#Jump('o', 'Forward')<CR> | ||||||
|  |  | ||||||
|  | " Commands {{{1 | ||||||
|  |  | ||||||
|  | " See |:RustRun| for docs | ||||||
|  | command! -nargs=* -complete=file -bang -buffer RustRun call rust#Run(<bang>0, <q-args>) | ||||||
|  |  | ||||||
|  | " See |:RustExpand| for docs | ||||||
|  | command! -nargs=* -complete=customlist,rust#CompleteExpand -bang -buffer RustExpand call rust#Expand(<bang>0, <q-args>) | ||||||
|  |  | ||||||
|  | " See |:RustEmitIr| for docs | ||||||
|  | command! -nargs=* -buffer RustEmitIr call rust#Emit("llvm-ir", <q-args>) | ||||||
|  |  | ||||||
|  | " See |:RustEmitAsm| for docs | ||||||
|  | command! -nargs=* -buffer RustEmitAsm call rust#Emit("asm", <q-args>) | ||||||
|  |  | ||||||
|  | " See |:RustPlay| for docs | ||||||
|  | command! -range=% RustPlay :call rust#Play(<count>, <line1>, <line2>, <f-args>) | ||||||
|  |  | ||||||
|  | " See |:RustFmt| for docs | ||||||
|  | command! -buffer RustFmt call rustfmt#Format() | ||||||
|  |  | ||||||
|  | " See |:RustFmtRange| for docs | ||||||
|  | command! -range -buffer RustFmtRange call rustfmt#FormatRange(<line1>, <line2>) | ||||||
|  |  | ||||||
|  | " Mappings {{{1 | ||||||
|  |  | ||||||
|  | " Bind ⌘R in MacVim to :RustRun | ||||||
|  | nnoremap <silent> <buffer> <D-r> :RustRun<CR> | ||||||
|  | " Bind ⌘⇧R in MacVim to :RustRun! pre-filled with the last args | ||||||
|  | nnoremap <buffer> <D-R> :RustRun! <C-r>=join(b:rust_last_rustc_args)<CR><C-\>erust#AppendCmdLine(' -- ' . join(b:rust_last_args))<CR> | ||||||
|  |  | ||||||
|  | if !exists("b:rust_last_rustc_args") || !exists("b:rust_last_args") | ||||||
|  | 	let b:rust_last_rustc_args = [] | ||||||
|  | 	let b:rust_last_args = [] | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | " Cleanup {{{1 | ||||||
|  |  | ||||||
|  | let b:undo_ftplugin = " | ||||||
|  | 		\ setlocal formatoptions< comments< commentstring< includeexpr< suffixesadd< | ||||||
|  | 		\|setlocal tabstop< shiftwidth< softtabstop< expandtab< textwidth< | ||||||
|  | 		\|if exists('b:rust_original_delimitMate_excluded_regions') | ||||||
|  | 		  \|let b:delimitMate_excluded_regions = b:rust_original_delimitMate_excluded_regions | ||||||
|  | 		  \|unlet b:rust_original_delimitMate_excluded_regions | ||||||
|  | 		\|else | ||||||
|  | 		  \|unlet! b:delimitMate_excluded_regions | ||||||
|  | 		\|endif | ||||||
|  | 		\|if exists('b:rust_set_foldmethod') | ||||||
|  | 		  \|setlocal foldmethod< foldlevel< | ||||||
|  | 		  \|unlet b:rust_set_foldmethod | ||||||
|  | 		\|endif | ||||||
|  | 		\|if exists('b:rust_set_conceallevel') | ||||||
|  | 		  \|setlocal conceallevel< | ||||||
|  | 		  \|unlet b:rust_set_conceallevel | ||||||
|  | 		\|endif | ||||||
|  | 		\|unlet! b:rust_last_rustc_args b:rust_last_args | ||||||
|  | 		\|delcommand RustRun | ||||||
|  | 		\|delcommand RustExpand | ||||||
|  | 		\|delcommand RustEmitIr | ||||||
|  | 		\|delcommand RustEmitAsm | ||||||
|  | 		\|delcommand RustPlay | ||||||
|  | 		\|nunmap <buffer> <D-r> | ||||||
|  | 		\|nunmap <buffer> <D-R> | ||||||
|  | 		\|nunmap <buffer> [[ | ||||||
|  | 		\|nunmap <buffer> ]] | ||||||
|  | 		\|xunmap <buffer> [[ | ||||||
|  | 		\|xunmap <buffer> ]] | ||||||
|  | 		\|ounmap <buffer> [[ | ||||||
|  | 		\|ounmap <buffer> ]] | ||||||
|  | 		\|set matchpairs-=<:> | ||||||
|  | 		\" | ||||||
|  |  | ||||||
|  | " }}}1 | ||||||
|  |  | ||||||
|  | " Code formatting on save | ||||||
|  | if get(g:, "rustfmt_autosave", 0) | ||||||
|  | 	autocmd BufWritePre *.rs silent! call rustfmt#Format() | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | augroup END | ||||||
|  |  | ||||||
|  | let &cpo = s:save_cpo | ||||||
|  | unlet s:save_cpo | ||||||
|  |  | ||||||
|  | " vim: set noet sw=8 ts=8: | ||||||
							
								
								
									
										15
									
								
								runtime/ftplugin/sbt.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								runtime/ftplugin/sbt.vim
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | " Vim filetype plugin file | ||||||
|  | " Language:     sbt | ||||||
|  | " Maintainer:   Steven Dobay <stevendobay at protonmail.com> | ||||||
|  | " License:      Same as Vim | ||||||
|  | " Last Change:  2017.04.30 | ||||||
|  | " ---------------------------------------------------------------------------- | ||||||
|  |  | ||||||
|  | if exists('b:did_ftplugin') || &cp | ||||||
|  |   finish | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | let b:did_ftplugin = 1 | ||||||
|  |  | ||||||
|  | runtime! ftplugin/scala.vim | ||||||
|  |  | ||||||
| @@ -87,7 +87,7 @@ function s:MainBlockIndent (prev_indent, prev_lnum, blockstart, stop_at) | |||||||
|       endwhile |       endwhile | ||||||
|    endwhile |    endwhile | ||||||
|    " Fallback - just move back one |    " Fallback - just move back one | ||||||
|    return a:prev_indent - &sw |    return a:prev_indent - shiftwidth() | ||||||
| endfunction MainBlockIndent | endfunction MainBlockIndent | ||||||
|  |  | ||||||
| " Section: s:EndBlockIndent {{{1 | " Section: s:EndBlockIndent {{{1 | ||||||
| @@ -131,7 +131,7 @@ function s:EndBlockIndent( prev_indent, prev_lnum, blockstart, blockend ) | |||||||
|       endwhile |       endwhile | ||||||
|    endwhile |    endwhile | ||||||
|    " Fallback - just move back one |    " Fallback - just move back one | ||||||
|    return a:prev_indent - &sw |    return a:prev_indent - shiftwidth() | ||||||
| endfunction EndBlockIndent | endfunction EndBlockIndent | ||||||
|  |  | ||||||
| " Section: s:StatementIndent {{{1 | " Section: s:StatementIndent {{{1 | ||||||
| @@ -213,15 +213,15 @@ function GetAdaIndent() | |||||||
|       endif |       endif | ||||||
|       " Move indent in |       " Move indent in | ||||||
|       if ! false_match |       if ! false_match | ||||||
| 	 let ind = ind + &sw | 	 let ind = ind + shiftwidth() | ||||||
|       endif |       endif | ||||||
|    elseif line =~ '^\s*\(case\|exception\)\>' |    elseif line =~ '^\s*\(case\|exception\)\>' | ||||||
|       " Move indent in twice (next 'when' will move back) |       " Move indent in twice (next 'when' will move back) | ||||||
|       let ind = ind + 2 * &sw |       let ind = ind + 2 * shiftwidth() | ||||||
|    elseif line =~ '^\s*end\s*record\>' |    elseif line =~ '^\s*end\s*record\>' | ||||||
|       " Move indent back to tallying 'type' preceding the 'record'. |       " Move indent back to tallying 'type' preceeding the 'record'. | ||||||
|       " Allow indent to be equal to 'end record's. |       " Allow indent to be equal to 'end record's. | ||||||
|       let ind = s:MainBlockIndent( ind+&sw, lnum, 'type\>', '' ) |       let ind = s:MainBlockIndent( ind+shiftwidth(), lnum, 'type\>', '' ) | ||||||
|    elseif line =~ '\(^\s*new\>.*\)\@<!)\s*[;,]\s*$' |    elseif line =~ '\(^\s*new\>.*\)\@<!)\s*[;,]\s*$' | ||||||
|       " Revert to indent of line that started this parenthesis pair |       " Revert to indent of line that started this parenthesis pair | ||||||
|       exe lnum |       exe lnum | ||||||
| @@ -235,10 +235,10 @@ function GetAdaIndent() | |||||||
|       exe v:lnum |       exe v:lnum | ||||||
|    elseif line =~ '[.=(]\s*$' |    elseif line =~ '[.=(]\s*$' | ||||||
|       " A statement continuation - move in one |       " A statement continuation - move in one | ||||||
|       let ind = ind + &sw |       let ind = ind + shiftwidth() | ||||||
|    elseif line =~ '^\s*new\>' |    elseif line =~ '^\s*new\>' | ||||||
|       " Multiple line generic instantiation ('package blah is\nnew thingy') |       " Multiple line generic instantiation ('package blah is\nnew thingy') | ||||||
|       let ind = s:StatementIndent( ind - &sw, lnum ) |       let ind = s:StatementIndent( ind - shiftwidth(), lnum ) | ||||||
|    elseif line =~ ';\s*$' |    elseif line =~ ';\s*$' | ||||||
|       " Statement end (but not 'end' ) - try to find current statement-start indent |       " Statement end (but not 'end' ) - try to find current statement-start indent | ||||||
|       let ind = s:StatementIndent( ind, lnum ) |       let ind = s:StatementIndent( ind, lnum ) | ||||||
| @@ -256,17 +256,17 @@ function GetAdaIndent() | |||||||
|    elseif continuation && line =~ '^\s*(' |    elseif continuation && line =~ '^\s*(' | ||||||
|       " Don't do this if we've already indented due to the previous line |       " Don't do this if we've already indented due to the previous line | ||||||
|       if ind == initind |       if ind == initind | ||||||
| 	 let ind = ind + &sw | 	 let ind = ind + shiftwidth() | ||||||
|       endif |       endif | ||||||
|    elseif line =~ '^\s*\(begin\|is\)\>' |    elseif line =~ '^\s*\(begin\|is\)\>' | ||||||
|       let ind = s:MainBlockIndent( ind, lnum, '\(procedure\|function\|declare\|package\|task\)\>', 'begin\>' ) |       let ind = s:MainBlockIndent( ind, lnum, '\(procedure\|function\|declare\|package\|task\)\>', 'begin\>' ) | ||||||
|    elseif line =~ '^\s*record\>' |    elseif line =~ '^\s*record\>' | ||||||
|       let ind = s:MainBlockIndent( ind, lnum, 'type\>\|for\>.*\<use\>', '' ) + &sw |       let ind = s:MainBlockIndent( ind, lnum, 'type\>\|for\>.*\<use\>', '' ) + shiftwidth() | ||||||
|    elseif line =~ '^\s*\(else\|elsif\)\>' |    elseif line =~ '^\s*\(else\|elsif\)\>' | ||||||
|       let ind = s:MainBlockIndent( ind, lnum, 'if\>', '' ) |       let ind = s:MainBlockIndent( ind, lnum, 'if\>', '' ) | ||||||
|    elseif line =~ '^\s*when\>' |    elseif line =~ '^\s*when\>' | ||||||
|       " Align 'when' one /in/ from matching block start |       " Align 'when' one /in/ from matching block start | ||||||
|       let ind = s:MainBlockIndent( ind, lnum, '\(case\|exception\)\>', '' ) + &sw |       let ind = s:MainBlockIndent( ind, lnum, '\(case\|exception\)\>', '' ) + shiftwidth() | ||||||
|    elseif line =~ '^\s*end\>\s*\<if\>' |    elseif line =~ '^\s*end\>\s*\<if\>' | ||||||
|       " End of if statements |       " End of if statements | ||||||
|       let ind = s:EndBlockIndent( ind, lnum, 'if\>', 'end\>\s*\<if\>' ) |       let ind = s:EndBlockIndent( ind, lnum, 'if\>', 'end\>\s*\<if\>' ) | ||||||
|   | |||||||
| @@ -60,7 +60,7 @@ function! GetAwkIndent() | |||||||
|    " 'pattern { action }' (simple check match on /{/ increases the indent then) |    " 'pattern { action }' (simple check match on /{/ increases the indent then) | ||||||
|  |  | ||||||
|    if s:Get_brace_balance( prev_data, '{', '}' ) > 0 |    if s:Get_brace_balance( prev_data, '{', '}' ) > 0 | ||||||
|       return ind + &sw |       return ind + shiftwidth() | ||||||
|    endif |    endif | ||||||
|  |  | ||||||
|    let brace_balance = s:Get_brace_balance( prev_data, '(', ')' ) |    let brace_balance = s:Get_brace_balance( prev_data, '(', ')' ) | ||||||
| @@ -99,7 +99,7 @@ function! GetAwkIndent() | |||||||
| 	  return s:Safe_indent( ind, s:First_word_len(prev_data), getline(v:lnum)) | 	  return s:Safe_indent( ind, s:First_word_len(prev_data), getline(v:lnum)) | ||||||
|        else |        else | ||||||
| 	 " if/for/while without '{' | 	 " if/for/while without '{' | ||||||
| 	 return ind + &sw | 	 return ind + shiftwidth() | ||||||
|        endif |        endif | ||||||
|      endif |      endif | ||||||
|    endif |    endif | ||||||
| @@ -140,7 +140,7 @@ function! GetAwkIndent() | |||||||
|  |  | ||||||
|    " Decrease indent if this line contains a '}'. |    " Decrease indent if this line contains a '}'. | ||||||
|    if getline(v:lnum) =~ '^\s*}' |    if getline(v:lnum) =~ '^\s*}' | ||||||
|       let ind = ind - &sw |       let ind = ind - shiftwidth() | ||||||
|    endif |    endif | ||||||
|  |  | ||||||
|    return ind |    return ind | ||||||
|   | |||||||
| @@ -69,7 +69,7 @@ function! GetBstIndent(lnum) abort | |||||||
|     endif |     endif | ||||||
|     let fakeline = substitute(line,'^}','','').matchstr(cline,'^}') |     let fakeline = substitute(line,'^}','','').matchstr(cline,'^}') | ||||||
|     let ind = indent(lnum) |     let ind = indent(lnum) | ||||||
|     let ind = ind + &sw * s:count(line,'{') |     let ind = ind + shiftwidth() * s:count(line,'{') | ||||||
|     let ind = ind - &sw * s:count(fakeline,'}') |     let ind = ind - shiftwidth() * s:count(fakeline,'}') | ||||||
|     return ind |     return ind | ||||||
| endfunction | endfunction | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| " Vim indent file | " Vim indent file | ||||||
| " Language:	Bazel (http://bazel.io) | " Language:	Bazel (http://bazel.io) | ||||||
| " Maintainer:	David Barnett (https://github.com/google/vim-ft-bzl) | " Maintainer:	David Barnett (https://github.com/google/vim-ft-bzl) | ||||||
| " Last Change:	2015 Aug 11 | " Last Change:	2017 Jun 13 | ||||||
|  |  | ||||||
| if exists('b:did_indent') | if exists('b:did_indent') | ||||||
|   finish |   finish | ||||||
| @@ -41,11 +41,8 @@ function GetBzlIndent(lnum) abort | |||||||
|     if exists('g:pyindent_open_paren') |     if exists('g:pyindent_open_paren') | ||||||
|       let l:pyindent_open_paren = g:pyindent_open_paren |       let l:pyindent_open_paren = g:pyindent_open_paren | ||||||
|     endif |     endif | ||||||
|     " Vim 7.3.693 and later defines a shiftwidth() function to get the effective |     let g:pyindent_nested_paren = 'shiftwidth() * 2' | ||||||
|     " shiftwidth value. Fall back to &shiftwidth if the function doesn't exist. |     let g:pyindent_open_paren = 'shiftwidth() * 2' | ||||||
|     let l:sw_expr = exists('*shiftwidth') ? 'shiftwidth()' : '&shiftwidth' |  | ||||||
|     let g:pyindent_nested_paren = l:sw_expr . ' * 2' |  | ||||||
|     let g:pyindent_open_paren = l:sw_expr . ' * 2' |  | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   let l:indent = -1 |   let l:indent = -1 | ||||||
|   | |||||||
| @@ -47,7 +47,7 @@ fun! CdlGetIndent(lnum) | |||||||
|   let thisline = getline(a:lnum) |   let thisline = getline(a:lnum) | ||||||
|   if match(thisline, '^\s*\(\k\+\|\[[^]]*]\)\s*\(,\|;\s*$\)') >= 0 |   if match(thisline, '^\s*\(\k\+\|\[[^]]*]\)\s*\(,\|;\s*$\)') >= 0 | ||||||
|     " it's an attributes line |     " it's an attributes line | ||||||
|     return &sw |     return shiftwidth() | ||||||
|   elseif match(thisline, '^\c\s*\([{}]\|\/[*/]\|dimension\|schedule\|group\|hierarchy\|class\)') >= 0 |   elseif match(thisline, '^\c\s*\([{}]\|\/[*/]\|dimension\|schedule\|group\|hierarchy\|class\)') >= 0 | ||||||
|     " it's a header or '{' or '}' or a comment |     " it's a header or '{' or '}' or a comment | ||||||
|     return 0 |     return 0 | ||||||
| @@ -71,13 +71,13 @@ fun! CdlGetIndent(lnum) | |||||||
|     let c = line[inicio-1] |     let c = line[inicio-1] | ||||||
|     " ')' and '=' don't change indent and are useless to set 'f' |     " ')' and '=' don't change indent and are useless to set 'f' | ||||||
|     if c == '{' |     if c == '{' | ||||||
|       return &sw |       return shiftwidth() | ||||||
|     elseif c != ')' && c != '=' |     elseif c != ')' && c != '=' | ||||||
|       let f = 1 " all but 'elseif' are followed by a formula |       let f = 1 " all but 'elseif' are followed by a formula | ||||||
|       if c ==? 'n' || c ==? 'e' " 'then', 'else' |       if c ==? 'n' || c ==? 'e' " 'then', 'else' | ||||||
| 	let ind = ind + &sw | 	let ind = ind + shiftwidth() | ||||||
|       elseif strpart(line, inicio-6, 6) ==? 'elseif' " elseif, set f to conditional |       elseif strpart(line, inicio-6, 6) ==? 'elseif' " elseif, set f to conditional | ||||||
| 	let ind = ind + &sw | 	let ind = ind + shiftwidth() | ||||||
| 	let f = 0 | 	let f = 0 | ||||||
|       end |       end | ||||||
|     end |     end | ||||||
| @@ -98,16 +98,16 @@ fun! CdlGetIndent(lnum) | |||||||
|       let ind = 0 |       let ind = 0 | ||||||
|       let f = 1 |       let f = 1 | ||||||
|     elseif c == ')' || c== ';' || strpart(line, inicio-5, 5) ==? 'endif' |     elseif c == ')' || c== ';' || strpart(line, inicio-5, 5) ==? 'endif' | ||||||
|       let ind = ind - &sw |       let ind = ind - shiftwidth() | ||||||
|     elseif c == '(' || c ==? 'f' " '(' or 'if' |     elseif c == '(' || c ==? 'f' " '(' or 'if' | ||||||
|       let ind = ind + &sw |       let ind = ind + shiftwidth() | ||||||
|     else " c == '=' |     else " c == '=' | ||||||
|       " if it is an asignment increase indent |       " if it is an asignment increase indent | ||||||
|       if f == -1 " we don't know yet, find out |       if f == -1 " we don't know yet, find out | ||||||
| 	let f = CdlAsignment(lnum, strpart(line, 0, inicio)) | 	let f = CdlAsignment(lnum, strpart(line, 0, inicio)) | ||||||
|       end |       end | ||||||
|       if f == 1 " formula increase it |       if f == 1 " formula increase it | ||||||
| 	let ind = ind + &sw | 	let ind = ind + shiftwidth() | ||||||
|       end |       end | ||||||
|     end |     end | ||||||
|   endw |   endw | ||||||
| @@ -115,13 +115,13 @@ fun! CdlGetIndent(lnum) | |||||||
|   " CURRENT LINE, if it starts with a closing element, decrease indent |   " CURRENT LINE, if it starts with a closing element, decrease indent | ||||||
|   " or if it starts with '=' (asignment), increase indent |   " or if it starts with '=' (asignment), increase indent | ||||||
|   if match(thisline, '^\c\s*\(else\|then\|endif\|[);]\)') >= 0 |   if match(thisline, '^\c\s*\(else\|then\|endif\|[);]\)') >= 0 | ||||||
|     let ind = ind - &sw |     let ind = ind - shiftwidth() | ||||||
|   elseif match(thisline, '^\s*=') >= 0 |   elseif match(thisline, '^\s*=') >= 0 | ||||||
|     if f == -1 " we don't know yet if is an asignment, find out |     if f == -1 " we don't know yet if is an asignment, find out | ||||||
|       let f = CdlAsignment(lnum, "") |       let f = CdlAsignment(lnum, "") | ||||||
|     end |     end | ||||||
|     if f == 1 " formula increase it |     if f == 1 " formula increase it | ||||||
|       let ind = ind + &sw |       let ind = ind + shiftwidth() | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   | |||||||
| @@ -31,19 +31,19 @@ function! GetChaiScriptIndent() | |||||||
|   let flag = 0 |   let flag = 0 | ||||||
|   let prevline = getline(lnum) |   let prevline = getline(lnum) | ||||||
|   if prevline =~ '^.*{.*' |   if prevline =~ '^.*{.*' | ||||||
|     let ind = ind + &shiftwidth |     let ind = ind + shiftwidth() | ||||||
|     let flag = 1 |     let flag = 1 | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " Subtract a 'shiftwidth' after lines containing a { followed by a } |   " Subtract a 'shiftwidth' after lines containing a { followed by a } | ||||||
|   " to keep it balanced |   " to keep it balanced | ||||||
|   if flag == 1 && prevline =~ '.*{.*}.*' |   if flag == 1 && prevline =~ '.*{.*}.*' | ||||||
|     let ind = ind - &shiftwidth |     let ind = ind - shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " Subtract a 'shiftwidth' on lines ending with } |   " Subtract a 'shiftwidth' on lines ending with } | ||||||
|   if getline(v:lnum) =~ '^\s*\%(}\)' |   if getline(v:lnum) =~ '^\s*\%(}\)' | ||||||
|     let ind = ind - &shiftwidth |     let ind = ind - shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   return ind |   return ind | ||||||
|   | |||||||
| @@ -261,7 +261,7 @@ if exists("*searchpairpos") | |||||||
| 		call cursor(paren) | 		call cursor(paren) | ||||||
|  |  | ||||||
| 		if s:is_method_special_case(paren) | 		if s:is_method_special_case(paren) | ||||||
| 			return [paren[0], paren[1] + &shiftwidth - 1] | 			return [paren[0], paren[1] + shiftwidth() - 1] | ||||||
| 		endif | 		endif | ||||||
|  |  | ||||||
| 		if s:is_reader_conditional_special_case(paren) | 		if s:is_reader_conditional_special_case(paren) | ||||||
| @@ -299,19 +299,19 @@ if exists("*searchpairpos") | |||||||
| 		let ww = s:strip_namespace_and_macro_chars(w) | 		let ww = s:strip_namespace_and_macro_chars(w) | ||||||
|  |  | ||||||
| 		if &lispwords =~# '\V\<' . ww . '\>' | 		if &lispwords =~# '\V\<' . ww . '\>' | ||||||
| 			return [paren[0], paren[1] + &shiftwidth - 1] | 			return [paren[0], paren[1] + shiftwidth() - 1] | ||||||
| 		endif | 		endif | ||||||
|  |  | ||||||
| 		if g:clojure_fuzzy_indent | 		if g:clojure_fuzzy_indent | ||||||
| 			\ && !s:match_one(g:clojure_fuzzy_indent_blacklist, ww) | 			\ && !s:match_one(g:clojure_fuzzy_indent_blacklist, ww) | ||||||
| 			\ && s:match_one(g:clojure_fuzzy_indent_patterns, ww) | 			\ && s:match_one(g:clojure_fuzzy_indent_patterns, ww) | ||||||
| 			return [paren[0], paren[1] + &shiftwidth - 1] | 			return [paren[0], paren[1] + shiftwidth() - 1] | ||||||
| 		endif | 		endif | ||||||
|  |  | ||||||
| 		call search('\v\_s', 'cW') | 		call search('\v\_s', 'cW') | ||||||
| 		call search('\v\S', 'W') | 		call search('\v\S', 'W') | ||||||
| 		if paren[0] < line(".") | 		if paren[0] < line(".") | ||||||
| 			return [paren[0], paren[1] + (g:clojure_align_subforms ? 0 : &shiftwidth - 1)] | 			return [paren[0], paren[1] + (g:clojure_align_subforms ? 0 : shiftwidth() - 1)] | ||||||
| 		endif | 		endif | ||||||
|  |  | ||||||
| 		call search('\v\S', 'bW') | 		call search('\v\S', 'bW') | ||||||
|   | |||||||
| @@ -68,19 +68,19 @@ fun! CMakeGetIndent(lnum) | |||||||
|     let ind = ind |     let ind = ind | ||||||
|   else |   else | ||||||
|     if previous_line =~? cmake_indent_begin_regex |     if previous_line =~? cmake_indent_begin_regex | ||||||
|       let ind = ind + &sw |       let ind = ind + shiftwidth() | ||||||
|     endif |     endif | ||||||
|     if previous_line =~? cmake_indent_open_regex |     if previous_line =~? cmake_indent_open_regex | ||||||
|       let ind = ind + &sw |       let ind = ind + shiftwidth() | ||||||
|     endif |     endif | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " Subtract |   " Subtract | ||||||
|   if this_line =~? cmake_indent_end_regex |   if this_line =~? cmake_indent_end_regex | ||||||
|     let ind = ind - &sw |     let ind = ind - shiftwidth() | ||||||
|   endif |   endif | ||||||
|   if previous_line =~? cmake_indent_close_regex |   if previous_line =~? cmake_indent_close_regex | ||||||
|     let ind = ind - &sw |     let ind = ind - shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   return ind |   return ind | ||||||
|   | |||||||
| @@ -52,11 +52,11 @@ function! s:optionalblock(lnum,ind,blocks,clauses) | |||||||
|         if getline(lastclause) =~? clauses && s:stripped(lastclause) !~? '^'.begin |         if getline(lastclause) =~? clauses && s:stripped(lastclause) !~? '^'.begin | ||||||
|             let ind = indent(lastclause) |             let ind = indent(lastclause) | ||||||
|         elseif lastclause > 0 |         elseif lastclause > 0 | ||||||
|             let ind = indent(lastclause) + &sw |             let ind = indent(lastclause) + shiftwidth() | ||||||
|             "let ind = ind + &sw |             "let ind = ind + shiftwidth() | ||||||
|         endif |         endif | ||||||
|     elseif line =~? clauses && cline !~? end |     elseif line =~? clauses && cline !~? end | ||||||
|         let ind = ind + &sw |         let ind = ind + shiftwidth() | ||||||
|     endif |     endif | ||||||
|     return ind |     return ind | ||||||
| endfunction | endfunction | ||||||
| @@ -98,8 +98,8 @@ function! GetCobolIndent(lnum) abort | |||||||
|                 let num = matchstr(line,'^\s*\zs\d\+\>') |                 let num = matchstr(line,'^\s*\zs\d\+\>') | ||||||
|                 if 0+cnum == num |                 if 0+cnum == num | ||||||
|                     return lindent |                     return lindent | ||||||
|                 elseif 0+cnum > num && default < lindent + &sw |                 elseif 0+cnum > num && default < lindent + shiftwidth() | ||||||
|                     let default = lindent + &sw |                     let default = lindent + shiftwidth() | ||||||
|                 endif |                 endif | ||||||
|             elseif lindent < bshft && lindent >= ashft |             elseif lindent < bshft && lindent >= ashft | ||||||
|                 break |                 break | ||||||
| @@ -135,13 +135,13 @@ function! GetCobolIndent(lnum) abort | |||||||
|     if line =~? '^PERFORM\>' |     if line =~? '^PERFORM\>' | ||||||
|         let perfline = substitute(line, '\c^PERFORM\s*', "", "") |         let perfline = substitute(line, '\c^PERFORM\s*', "", "") | ||||||
|         if perfline =~? '^\%(\k\+\s\+TIMES\)\=\s*$' |         if perfline =~? '^\%(\k\+\s\+TIMES\)\=\s*$' | ||||||
|             let ind = ind + &sw |             let ind = ind + shiftwidth() | ||||||
|         elseif perfline =~? '^\%(WITH\s\+TEST\|VARYING\|UNTIL\)\>.*[^.]$' |         elseif perfline =~? '^\%(WITH\s\+TEST\|VARYING\|UNTIL\)\>.*[^.]$' | ||||||
|             let ind = ind + &sw |             let ind = ind + shiftwidth() | ||||||
|         endif |         endif | ||||||
|     endif |     endif | ||||||
|     if line =~? '^\%(IF\|THEN\|ELSE\|READ\|EVALUATE\|SEARCH\|SELECT\)\>' |     if line =~? '^\%(IF\|THEN\|ELSE\|READ\|EVALUATE\|SEARCH\|SELECT\)\>' | ||||||
|         let ind = ind + &sw |         let ind = ind + shiftwidth() | ||||||
|     endif |     endif | ||||||
|     let ind = s:optionalblock(a:lnum,ind,'ADD\|COMPUTE\|DIVIDE\|MULTIPLY\|SUBTRACT','ON\s\+SIZE\s\+ERROR') |     let ind = s:optionalblock(a:lnum,ind,'ADD\|COMPUTE\|DIVIDE\|MULTIPLY\|SUBTRACT','ON\s\+SIZE\s\+ERROR') | ||||||
|     let ind = s:optionalblock(a:lnum,ind,'STRING\|UNSTRING\|ACCEPT\|DISPLAY\|CALL','ON\s\+OVERFLOW\|ON\s\+EXCEPTION') |     let ind = s:optionalblock(a:lnum,ind,'STRING\|UNSTRING\|ACCEPT\|DISPLAY\|CALL','ON\s\+OVERFLOW\|ON\s\+EXCEPTION') | ||||||
| @@ -157,10 +157,10 @@ function! GetCobolIndent(lnum) abort | |||||||
|             "&& s:stripped(lastclause) !~? '^\%(SEARCH\|EVALUATE\|READ\)\>' |             "&& s:stripped(lastclause) !~? '^\%(SEARCH\|EVALUATE\|READ\)\>' | ||||||
|             let ind = indent(lastclause) |             let ind = indent(lastclause) | ||||||
|         elseif lastclause > 0 |         elseif lastclause > 0 | ||||||
|             let ind = indent(lastclause) + &sw |             let ind = indent(lastclause) + shiftwidth() | ||||||
|         endif |         endif | ||||||
|     elseif line =~? '^WHEN\>' |     elseif line =~? '^WHEN\>' | ||||||
|         let ind = ind + &sw |         let ind = ind + shiftwidth() | ||||||
|     endif |     endif | ||||||
|     "I'm not sure why I had this |     "I'm not sure why I had this | ||||||
|     "if line =~? '^ELSE\>-\@!' && line !~? '\.$' |     "if line =~? '^ELSE\>-\@!' && line !~? '\.$' | ||||||
| @@ -168,7 +168,7 @@ function! GetCobolIndent(lnum) abort | |||||||
|     "endif |     "endif | ||||||
|     if cline =~? '^\(END\)\>-\@!' |     if cline =~? '^\(END\)\>-\@!' | ||||||
|         " On lines with just END, 'guess' a simple shift left |         " On lines with just END, 'guess' a simple shift left | ||||||
|         let ind = ind - &sw |         let ind = ind - shiftwidth() | ||||||
|     elseif cline =~? '^\(END-IF\|THEN\|ELSE\)\>-\@!' |     elseif cline =~? '^\(END-IF\|THEN\|ELSE\)\>-\@!' | ||||||
|         call cursor(a:lnum,indent(a:lnum)) |         call cursor(a:lnum,indent(a:lnum)) | ||||||
|         let match = searchpair('\c-\@<!\<IF\>','\c-\@<!\%(THEN\|ELSE\)\>','\c-\@<!\<END-IF\>\zs','bnW',s:skip) |         let match = searchpair('\c-\@<!\<IF\>','\c-\@<!\%(THEN\|ELSE\)\>','\c-\@<!\<END-IF\>\zs','bnW',s:skip) | ||||||
| @@ -209,7 +209,7 @@ function! GetCobolIndent(lnum) abort | |||||||
|         if match > 0 |         if match > 0 | ||||||
|             let ind = indent(match) |             let ind = indent(match) | ||||||
|         elseif cline =~? '^\(END-\(READ\|EVALUATE\|SEARCH\|PERFORM\)\)\>' |         elseif cline =~? '^\(END-\(READ\|EVALUATE\|SEARCH\|PERFORM\)\)\>' | ||||||
|             let ind = ind - &sw |             let ind = ind - shiftwidth() | ||||||
|         endif |         endif | ||||||
|     endif |     endif | ||||||
|     return ind < bshft ? bshft : ind |     return ind < bshft ? bshft : ind | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| " Vim indent file | " Vim indent file | ||||||
| " Language:	Cucumber | " Language:	Cucumber | ||||||
| " Maintainer:	Tim Pope <vimNOSPAM@tpope.org> | " Maintainer:	Tim Pope <vimNOSPAM@tpope.org> | ||||||
| " Last Change:	2016 Aug 29 | " Last Change:	2017 Jun 13 | ||||||
|  |  | ||||||
| if exists("b:did_indent") | if exists("b:did_indent") | ||||||
|   finish |   finish | ||||||
| @@ -27,7 +27,7 @@ function! GetCucumberIndent() | |||||||
|   let line  = getline(prevnonblank(v:lnum-1)) |   let line  = getline(prevnonblank(v:lnum-1)) | ||||||
|   let cline = getline(v:lnum) |   let cline = getline(v:lnum) | ||||||
|   let nline = getline(nextnonblank(v:lnum+1)) |   let nline = getline(nextnonblank(v:lnum+1)) | ||||||
|   let sw = exists('*shiftwidth') ? shiftwidth() : &sw |   let sw = exists('*shiftwidth') ? shiftwidth() : shiftwidth() | ||||||
|   let syn = s:syn(prevnonblank(v:lnum-1)) |   let syn = s:syn(prevnonblank(v:lnum-1)) | ||||||
|   let csyn = s:syn(v:lnum) |   let csyn = s:syn(v:lnum) | ||||||
|   let nsyn = s:syn(nextnonblank(v:lnum+1)) |   let nsyn = s:syn(nextnonblank(v:lnum+1)) | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| " Vim indent file | " Vim indent file | ||||||
| " Language:	Dylan | " Language:	Dylan | ||||||
| " Version:	0.01 | " Version:	0.01 | ||||||
| " Last Change:	2003 Feb 04 | " Last Change:	2017 Jun 13 | ||||||
| " Maintainer:	Brent A. Fulgham <bfulgham@debian.org> | " Maintainer:	Brent A. Fulgham <bfulgham@debian.org> | ||||||
|  |  | ||||||
| " Only load this indent file when no other was loaded. | " Only load this indent file when no other was loaded. | ||||||
| @@ -45,13 +45,13 @@ function DylanGetIndent() | |||||||
|  |  | ||||||
|   " If previous line was a 'define', indent |   " If previous line was a 'define', indent | ||||||
|   if prevline =~? '\(^\s*\(begin\|block\|case\|define\|else\|elseif\|for\|finally\|if\|select\|unless\|while\)\|\s*\S*\s*=>$\)' |   if prevline =~? '\(^\s*\(begin\|block\|case\|define\|else\|elseif\|for\|finally\|if\|select\|unless\|while\)\|\s*\S*\s*=>$\)' | ||||||
|     let chg = &sw |     let chg = shiftwidth() | ||||||
|   " local methods indent the shift-width, plus 6 for the 'local' |   " local methods indent the shift-width, plus 6 for the 'local' | ||||||
|   elseif prevline =~? '^\s*local' |   elseif prevline =~? '^\s*local' | ||||||
|     let chg = &sw + 6 |     let chg = shiftwidth() + 6 | ||||||
|   " If previous line was a let with no closing semicolon, indent |   " If previous line was a let with no closing semicolon, indent | ||||||
|   elseif prevline =~? '^\s*let.*[^;]\s*$' |   elseif prevline =~? '^\s*let.*[^;]\s*$' | ||||||
|     let chg = &sw |     let chg = shiftwidth() | ||||||
|   " If previous line opened a parenthesis, and did not close it, indent |   " If previous line opened a parenthesis, and did not close it, indent | ||||||
|   elseif prevline =~ '^.*(\s*[^)]*\((.*)\)*[^)]*$' |   elseif prevline =~ '^.*(\s*[^)]*\((.*)\)*[^)]*$' | ||||||
|     return = match( prevline, '(.*\((.*)\|[^)]\)*.*$') + 1 |     return = match( prevline, '(.*\((.*)\|[^)]\)*.*$') + 1 | ||||||
| @@ -75,13 +75,13 @@ function DylanGetIndent() | |||||||
|     " line doesn't start with an indentable command: |     " line doesn't start with an indentable command: | ||||||
|     let curr_str = getline(curr_line) |     let curr_str = getline(curr_line) | ||||||
|     if curr_str =~? '^\s*\(begin\|block\|case\|define\|else\|elseif\|for\|finally\|if\|select\|unless\|while\)' |     if curr_str =~? '^\s*\(begin\|block\|case\|define\|else\|elseif\|for\|finally\|if\|select\|unless\|while\)' | ||||||
|       let chg = &sw |       let chg = shiftwidth() | ||||||
|     endif |     endif | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " If a line starts with end, un-indent (even if we just indented!) |   " If a line starts with end, un-indent (even if we just indented!) | ||||||
|   if cline =~? '^\s*\(cleanup\|end\|else\|elseif\|exception\|finally\|otherwise\)' |   if cline =~? '^\s*\(cleanup\|end\|else\|elseif\|exception\|finally\|otherwise\)' | ||||||
|     let chg = chg - &sw |     let chg = chg - shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   return ind + chg |   return ind + chg | ||||||
|   | |||||||
| @@ -669,7 +669,7 @@ function! s:BeginningOfClauseFound(stack, token, stored_vcol) | |||||||
|     call s:Pop(a:stack) |     call s:Pop(a:stack) | ||||||
|     if empty(a:stack) |     if empty(a:stack) | ||||||
|       call s:Log('    Stack is ["when"], so LTI is in a guard -> return') |       call s:Log('    Stack is ["when"], so LTI is in a guard -> return') | ||||||
|       return [1, a:stored_vcol + &sw + 2] |       return [1, a:stored_vcol + shiftwidth() + 2] | ||||||
|     else |     else | ||||||
|       return [1, s:UnexpectedToken(a:token, a:stack)] |       return [1, s:UnexpectedToken(a:token, a:stack)] | ||||||
|     endif |     endif | ||||||
| @@ -678,7 +678,7 @@ function! s:BeginningOfClauseFound(stack, token, stored_vcol) | |||||||
|     call s:Pop(a:stack) |     call s:Pop(a:stack) | ||||||
|     if empty(a:stack) |     if empty(a:stack) | ||||||
|       call s:Log('    Stack is ["->"], so LTI is in function body -> return') |       call s:Log('    Stack is ["->"], so LTI is in function body -> return') | ||||||
|       return [1, a:stored_vcol + &sw] |       return [1, a:stored_vcol + shiftwidth()] | ||||||
|     elseif a:stack[0] ==# ';' |     elseif a:stack[0] ==# ';' | ||||||
|       call s:Pop(a:stack) |       call s:Pop(a:stack) | ||||||
|       if empty(a:stack) |       if empty(a:stack) | ||||||
| @@ -797,7 +797,7 @@ function! s:ErlangCalcIndent2(lnum, stack) | |||||||
|  |  | ||||||
|       elseif token ==# 'begin' |       elseif token ==# 'begin' | ||||||
|         let [ret, res] = s:BeginElementFound(stack, token, curr_vcol, |         let [ret, res] = s:BeginElementFound(stack, token, curr_vcol, | ||||||
|                                             \stored_vcol, 'end', &sw) |                                             \stored_vcol, 'end', shiftwidth()) | ||||||
|         if ret | return res | endif |         if ret | return res | endif | ||||||
|  |  | ||||||
|       " case EXPR of BRANCHES end |       " case EXPR of BRANCHES end | ||||||
| @@ -848,11 +848,11 @@ function! s:ErlangCalcIndent2(lnum, stack) | |||||||
|         elseif stack == ['->'] |         elseif stack == ['->'] | ||||||
|           call s:Log('    LTI is in a branch after ' . |           call s:Log('    LTI is in a branch after ' . | ||||||
|                     \'"of/receive/after/if/catch" -> return') |                     \'"of/receive/after/if/catch" -> return') | ||||||
|           return stored_vcol + &sw |           return stored_vcol + shiftwidth() | ||||||
|         elseif stack == ['when'] |         elseif stack == ['when'] | ||||||
|           call s:Log('    LTI is in a guard after ' . |           call s:Log('    LTI is in a guard after ' . | ||||||
|                     \'"of/receive/after/if/catch" -> return') |                     \'"of/receive/after/if/catch" -> return') | ||||||
|           return stored_vcol + &sw |           return stored_vcol + shiftwidth() | ||||||
|         else |         else | ||||||
|           return s:UnexpectedToken(token, stack) |           return s:UnexpectedToken(token, stack) | ||||||
|         endif |         endif | ||||||
| @@ -888,7 +888,7 @@ function! s:ErlangCalcIndent2(lnum, stack) | |||||||
|           if empty(stack) |           if empty(stack) | ||||||
|             call s:Log('    LTI is in a condition; matching ' . |             call s:Log('    LTI is in a condition; matching ' . | ||||||
|                       \'"case/if/try/receive" found') |                       \'"case/if/try/receive" found') | ||||||
|             let stored_vcol = curr_vcol + &sw |             let stored_vcol = curr_vcol + shiftwidth() | ||||||
|           elseif stack[0] ==# 'align_to_begin_element' |           elseif stack[0] ==# 'align_to_begin_element' | ||||||
|             call s:Pop(stack) |             call s:Pop(stack) | ||||||
|             let stored_vcol = curr_vcol |             let stored_vcol = curr_vcol | ||||||
| @@ -897,23 +897,23 @@ function! s:ErlangCalcIndent2(lnum, stack) | |||||||
|                       \'"case/if/try/receive" found') |                       \'"case/if/try/receive" found') | ||||||
|             call s:Pop(stack) |             call s:Pop(stack) | ||||||
|             call s:Pop(stack) |             call s:Pop(stack) | ||||||
|             let stored_vcol = curr_vcol + &sw |             let stored_vcol = curr_vcol + shiftwidth() | ||||||
|           elseif stack[0] ==# '->' |           elseif stack[0] ==# '->' | ||||||
|             call s:Log('    LTI is in a branch; matching ' . |             call s:Log('    LTI is in a branch; matching ' . | ||||||
|                       \'"case/if/try/receive" found') |                       \'"case/if/try/receive" found') | ||||||
|             call s:Pop(stack) |             call s:Pop(stack) | ||||||
|             let stored_vcol = curr_vcol + 2 * &sw |             let stored_vcol = curr_vcol + 2 * shiftwidth() | ||||||
|           elseif stack[0] ==# 'when' |           elseif stack[0] ==# 'when' | ||||||
|             call s:Log('    LTI is in a guard; matching ' . |             call s:Log('    LTI is in a guard; matching ' . | ||||||
|                       \'"case/if/try/receive" found') |                       \'"case/if/try/receive" found') | ||||||
|             call s:Pop(stack) |             call s:Pop(stack) | ||||||
|             let stored_vcol = curr_vcol + 2 * &sw + 2 |             let stored_vcol = curr_vcol + 2 * shiftwidth() + 2 | ||||||
|           endif |           endif | ||||||
|  |  | ||||||
|         endif |         endif | ||||||
|  |  | ||||||
|         let [ret, res] = s:BeginElementFound(stack, token, curr_vcol, |         let [ret, res] = s:BeginElementFound(stack, token, curr_vcol, | ||||||
|                                             \stored_vcol, 'end', &sw) |                                             \stored_vcol, 'end', shiftwidth()) | ||||||
|         if ret | return res | endif |         if ret | return res | endif | ||||||
|  |  | ||||||
|       elseif token ==# 'fun' |       elseif token ==# 'fun' | ||||||
| @@ -930,7 +930,7 @@ function! s:ErlangCalcIndent2(lnum, stack) | |||||||
|           " stack = ['when']  =>  LTI is in a guard |           " stack = ['when']  =>  LTI is in a guard | ||||||
|           if empty(stack) |           if empty(stack) | ||||||
|             call s:Log('    LTI is in a condition; matching "fun" found') |             call s:Log('    LTI is in a condition; matching "fun" found') | ||||||
|             let stored_vcol = curr_vcol + &sw |             let stored_vcol = curr_vcol + shiftwidth() | ||||||
|           elseif len(stack) > 1 && stack[0] ==# '->' && stack[1] ==# ';' |           elseif len(stack) > 1 && stack[0] ==# '->' && stack[1] ==# ';' | ||||||
|             call s:Log('    LTI is in a condition; matching "fun" found') |             call s:Log('    LTI is in a condition; matching "fun" found') | ||||||
|             call s:Pop(stack) |             call s:Pop(stack) | ||||||
| @@ -938,15 +938,15 @@ function! s:ErlangCalcIndent2(lnum, stack) | |||||||
|           elseif stack[0] ==# '->' |           elseif stack[0] ==# '->' | ||||||
|             call s:Log('    LTI is in a branch; matching "fun" found') |             call s:Log('    LTI is in a branch; matching "fun" found') | ||||||
|             call s:Pop(stack) |             call s:Pop(stack) | ||||||
|             let stored_vcol = curr_vcol + 2 * &sw |             let stored_vcol = curr_vcol + 2 * shiftwidth() | ||||||
|           elseif stack[0] ==# 'when' |           elseif stack[0] ==# 'when' | ||||||
|             call s:Log('    LTI is in a guard; matching "fun" found') |             call s:Log('    LTI is in a guard; matching "fun" found') | ||||||
|             call s:Pop(stack) |             call s:Pop(stack) | ||||||
|             let stored_vcol = curr_vcol + 2 * &sw + 2 |             let stored_vcol = curr_vcol + 2 * shiftwidth() + 2 | ||||||
|           endif |           endif | ||||||
|  |  | ||||||
|           let [ret, res] = s:BeginElementFound(stack, token, curr_vcol, |           let [ret, res] = s:BeginElementFound(stack, token, curr_vcol, | ||||||
|                                               \stored_vcol, 'end', &sw) |                                               \stored_vcol, 'end', shiftwidth()) | ||||||
|           if ret | return res | endif |           if ret | return res | endif | ||||||
|         else |         else | ||||||
|           " Pass: we have a function reference (e.g. "fun f/0") |           " Pass: we have a function reference (e.g. "fun f/0") | ||||||
| @@ -1220,7 +1220,7 @@ function! s:ErlangCalcIndent2(lnum, stack) | |||||||
|             "   when A, |             "   when A, | ||||||
|             "        LTI |             "        LTI | ||||||
|             let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol, |             let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol, | ||||||
|                                                        \stored_vcol, &sw) |                                                        \stored_vcol, shiftwidth()) | ||||||
|             if ret | return res | endif |             if ret | return res | endif | ||||||
|           else |           else | ||||||
|             " Example: |             " Example: | ||||||
| @@ -1252,7 +1252,7 @@ function! s:ErlangCalcIndent2(lnum, stack) | |||||||
|           " If LTI is between an 'after' and the corresponding |           " If LTI is between an 'after' and the corresponding | ||||||
|           " 'end', then let's return |           " 'end', then let's return | ||||||
|           let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol, |           let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol, | ||||||
|                                                      \stored_vcol, &sw) |                                                      \stored_vcol, shiftwidth()) | ||||||
|           if ret | return res | endif |           if ret | return res | endif | ||||||
|         endif |         endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -47,11 +47,7 @@ set cpo&vim | |||||||
|  |  | ||||||
| function! GetErubyIndent(...) | function! GetErubyIndent(...) | ||||||
|   " The value of a single shift-width |   " The value of a single shift-width | ||||||
|   if exists('*shiftwidth') |   let sw = shiftwidth() | ||||||
|     let sw = shiftwidth() |  | ||||||
|   else |  | ||||||
|     let sw = &sw |  | ||||||
|   endif |  | ||||||
|  |  | ||||||
|   if a:0 && a:1 == '.' |   if a:0 && a:1 == '.' | ||||||
|     let v:lnum = line('.') |     let v:lnum = line('.') | ||||||
|   | |||||||
| @@ -339,7 +339,7 @@ function FalconGetIndent(...) | |||||||
|  |  | ||||||
|     " If the previous line ended with a block opening, add a level of indent. |     " If the previous line ended with a block opening, add a level of indent. | ||||||
|     if s:Match(lnum, s:block_regex) |     if s:Match(lnum, s:block_regex) | ||||||
| 	return indent(s:GetMSL(lnum)) + &sw | 	return indent(s:GetMSL(lnum)) + shiftwidth() | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|     " If it contained hanging closing brackets, find the rightmost one, find its |     " If it contained hanging closing brackets, find the rightmost one, find its | ||||||
| @@ -350,20 +350,20 @@ function FalconGetIndent(...) | |||||||
| 	if opening.pos != -1 | 	if opening.pos != -1 | ||||||
| 	    if opening.type == '(' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0 | 	    if opening.type == '(' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0 | ||||||
| 		if col('.') + 1 == col('$') | 		if col('.') + 1 == col('$') | ||||||
| 		    return ind + &sw | 		    return ind + shiftwidth() | ||||||
| 		else | 		else | ||||||
| 		    return virtcol('.') | 		    return virtcol('.') | ||||||
| 		endif | 		endif | ||||||
| 	    else | 	    else | ||||||
| 		let nonspace = matchend(line, '\S', opening.pos + 1) - 1 | 		let nonspace = matchend(line, '\S', opening.pos + 1) - 1 | ||||||
| 		return nonspace > 0 ? nonspace : ind + &sw | 		return nonspace > 0 ? nonspace : ind + shiftwidth() | ||||||
| 	    endif | 	    endif | ||||||
| 	elseif closing.pos != -1 | 	elseif closing.pos != -1 | ||||||
| 	    call cursor(lnum, closing.pos + 1) | 	    call cursor(lnum, closing.pos + 1) | ||||||
| 	    normal! % | 	    normal! % | ||||||
|  |  | ||||||
| 	    if s:Match(line('.'), s:falcon_indent_keywords) | 	    if s:Match(line('.'), s:falcon_indent_keywords) | ||||||
| 		return indent('.') + &sw | 		return indent('.') + shiftwidth() | ||||||
| 	    else | 	    else | ||||||
| 		return indent('.') | 		return indent('.') | ||||||
| 	    endif | 	    endif | ||||||
| @@ -392,7 +392,7 @@ function FalconGetIndent(...) | |||||||
|     let col = s:Match(lnum, s:falcon_indent_keywords) |     let col = s:Match(lnum, s:falcon_indent_keywords) | ||||||
|     if col > 0 |     if col > 0 | ||||||
| 	call cursor(lnum, col) | 	call cursor(lnum, col) | ||||||
| 	let ind = virtcol('.') - 1 + &sw | 	let ind = virtcol('.') - 1 + shiftwidth() | ||||||
| 	" TODO: make this better (we need to count them) (or, if a searchpair | 	" TODO: make this better (we need to count them) (or, if a searchpair | ||||||
| 	" fails, we know that something is lacking an end and thus we indent a | 	" fails, we know that something is lacking an end and thus we indent a | ||||||
| 	" level | 	" level | ||||||
| @@ -422,9 +422,9 @@ function FalconGetIndent(...) | |||||||
|     " TODO: this does not take into account contrived things such as |     " TODO: this does not take into account contrived things such as | ||||||
|     " module Foo; class Bar; end |     " module Foo; class Bar; end | ||||||
|     if s:Match(lnum, s:falcon_indent_keywords) |     if s:Match(lnum, s:falcon_indent_keywords) | ||||||
| 	let ind = msl_ind + &sw | 	let ind = msl_ind + shiftwidth() | ||||||
| 	if s:Match(lnum, s:end_end_regex) | 	if s:Match(lnum, s:end_end_regex) | ||||||
| 	    let ind = ind - &sw | 	    let ind = ind - shiftwidth() | ||||||
| 	endif | 	endif | ||||||
| 	return ind | 	return ind | ||||||
|     endif |     endif | ||||||
| @@ -433,7 +433,7 @@ function FalconGetIndent(...) | |||||||
|     " closing bracket, indent one extra level. |     " closing bracket, indent one extra level. | ||||||
|     if s:Match(lnum, s:non_bracket_continuation_regex) && !s:Match(lnum, '^\s*\([\])}]\|end\)') |     if s:Match(lnum, s:non_bracket_continuation_regex) && !s:Match(lnum, '^\s*\([\])}]\|end\)') | ||||||
| 	if lnum == p_lnum | 	if lnum == p_lnum | ||||||
| 	    let ind = msl_ind + &sw | 	    let ind = msl_ind + shiftwidth() | ||||||
| 	else | 	else | ||||||
| 	    let ind = msl_ind | 	    let ind = msl_ind | ||||||
| 	endif | 	endif | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| " Vim indent file | " Vim indent file | ||||||
| " Language:	git config file | " Language:	git config file | ||||||
| " Maintainer:	Tim Pope <vimNOSPAM@tpope.org> | " Maintainer:	Tim Pope <vimNOSPAM@tpope.org> | ||||||
| " Last Change:	2016 Aug 29 | " Last Change:	2017 Jun 13 | ||||||
|  |  | ||||||
| if exists("b:did_indent") | if exists("b:did_indent") | ||||||
|   finish |   finish | ||||||
| @@ -20,7 +20,7 @@ if exists("*GetGitconfigIndent") | |||||||
| endif | endif | ||||||
|  |  | ||||||
| function! GetGitconfigIndent() | function! GetGitconfigIndent() | ||||||
|   let sw    = exists('*shiftwidth') ? shiftwidth() : &sw |   let sw    = shiftwidth() | ||||||
|   let line  = getline(prevnonblank(v:lnum-1)) |   let line  = getline(prevnonblank(v:lnum-1)) | ||||||
|   let cline = getline(v:lnum) |   let cline = getline(v:lnum) | ||||||
|   if line =~  '\\\@<!\%(\\\\\)*\\$' |   if line =~  '\\\@<!\%(\\\\\)*\\$' | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| " Language:	gitolite configuration | " Language:	gitolite configuration | ||||||
| " URL:		https://github.com/tmatilai/gitolite.vim | " URL:		https://github.com/tmatilai/gitolite.vim | ||||||
| " Maintainer:	Teemu Matilainen <teemu.matilainen@iki.fi> | " Maintainer:	Teemu Matilainen <teemu.matilainen@iki.fi> | ||||||
| " Last Change:	2011-12-24 | " Last Change:	2017 Jun 13 | ||||||
|  |  | ||||||
| if exists("b:did_indent") | if exists("b:did_indent") | ||||||
|   finish |   finish | ||||||
| @@ -27,11 +27,11 @@ function! GetGitoliteIndent() | |||||||
|   let cline = getline(v:lnum) |   let cline = getline(v:lnum) | ||||||
|  |  | ||||||
|   if cline =~ '^\s*\(C\|R\|RW\|RW+\|RWC\|RW+C\|RWD\|RW+D\|RWCD\|RW+CD\|-\)[ \t=]' |   if cline =~ '^\s*\(C\|R\|RW\|RW+\|RWC\|RW+C\|RWD\|RW+D\|RWCD\|RW+CD\|-\)[ \t=]' | ||||||
|     return &sw |     return shiftwidth() | ||||||
|   elseif cline =~ '^\s*config\s' |   elseif cline =~ '^\s*config\s' | ||||||
|     return &sw |     return shiftwidth() | ||||||
|   elseif pline =~ '^\s*repo\s' && cline =~ '^\s*\(#.*\)\?$' |   elseif pline =~ '^\s*repo\s' && cline =~ '^\s*\(#.*\)\?$' | ||||||
|     return &sw |     return shiftwidth() | ||||||
|   elseif cline =~ '^\s*#' |   elseif cline =~ '^\s*#' | ||||||
|     return indent(prevln) |     return indent(prevln) | ||||||
|   elseif cline =~ '^\s*$' |   elseif cline =~ '^\s*$' | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| " Vim indent file | " Vim indent file | ||||||
| " Language:	Go | " Language:	Go | ||||||
| " Maintainer:	David Barnett (https://github.com/google/vim-ft-go) | " Maintainer:	David Barnett (https://github.com/google/vim-ft-go) | ||||||
| " Last Change:	2014 Aug 16 | " Last Change:	2017 Jun 13 | ||||||
| " | " | ||||||
| " TODO: | " TODO: | ||||||
| " - function invocations split across lines | " - function invocations split across lines | ||||||
| @@ -23,18 +23,6 @@ if exists('*GoIndent') | |||||||
|   finish |   finish | ||||||
| endif | endif | ||||||
|  |  | ||||||
| " The shiftwidth() function is relatively new. |  | ||||||
| " Don't require it to exist. |  | ||||||
| if exists('*shiftwidth') |  | ||||||
|   function s:sw() abort |  | ||||||
|     return shiftwidth() |  | ||||||
|   endfunction |  | ||||||
| else |  | ||||||
|   function s:sw() abort |  | ||||||
|     return &shiftwidth |  | ||||||
|   endfunction |  | ||||||
| endif |  | ||||||
|  |  | ||||||
| function! GoIndent(lnum) | function! GoIndent(lnum) | ||||||
|   let l:prevlnum = prevnonblank(a:lnum-1) |   let l:prevlnum = prevnonblank(a:lnum-1) | ||||||
|   if l:prevlnum == 0 |   if l:prevlnum == 0 | ||||||
| @@ -51,17 +39,17 @@ function! GoIndent(lnum) | |||||||
|  |  | ||||||
|   if l:prevl =~ '[({]\s*$' |   if l:prevl =~ '[({]\s*$' | ||||||
|     " previous line opened a block |     " previous line opened a block | ||||||
|     let l:ind += s:sw() |     let l:ind += shiftwidth() | ||||||
|   endif |   endif | ||||||
|   if l:prevl =~# '^\s*\(case .*\|default\):$' |   if l:prevl =~# '^\s*\(case .*\|default\):$' | ||||||
|     " previous line is part of a switch statement |     " previous line is part of a switch statement | ||||||
|     let l:ind += s:sw() |     let l:ind += shiftwidth() | ||||||
|   endif |   endif | ||||||
|   " TODO: handle if the previous line is a label. |   " TODO: handle if the previous line is a label. | ||||||
|  |  | ||||||
|   if l:thisl =~ '^\s*[)}]' |   if l:thisl =~ '^\s*[)}]' | ||||||
|     " this line closed a block |     " this line closed a block | ||||||
|     let l:ind -= s:sw() |     let l:ind -= shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " Colons are tricky. |   " Colons are tricky. | ||||||
| @@ -69,7 +57,7 @@ function! GoIndent(lnum) | |||||||
|   " We ignore trying to deal with jump labels because (a) they're rare, and |   " We ignore trying to deal with jump labels because (a) they're rare, and | ||||||
|   " (b) they're hard to disambiguate from a composite literal key. |   " (b) they're hard to disambiguate from a composite literal key. | ||||||
|   if l:thisl =~# '^\s*\(case .*\|default\):$' |   if l:thisl =~# '^\s*\(case .*\|default\):$' | ||||||
|     let l:ind -= s:sw() |     let l:ind -= shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   return l:ind |   return l:ind | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| " Vim indent file | " Vim indent file | ||||||
| " Language:	Haml | " Language:	Haml | ||||||
| " Maintainer:	Tim Pope <vimNOSPAM@tpope.org> | " Maintainer:	Tim Pope <vimNOSPAM@tpope.org> | ||||||
| " Last Change:	2016 Aug 29 | " Last Change:	2017 Jun 13 | ||||||
|  |  | ||||||
| if exists("b:did_indent") | if exists("b:did_indent") | ||||||
|   finish |   finish | ||||||
| @@ -37,7 +37,7 @@ function! GetHamlIndent() | |||||||
|   let line = substitute(line,'^\s\+','','') |   let line = substitute(line,'^\s\+','','') | ||||||
|   let indent = indent(lnum) |   let indent = indent(lnum) | ||||||
|   let cindent = indent(v:lnum) |   let cindent = indent(v:lnum) | ||||||
|   let sw = exists('*shiftwidth') ? shiftwidth() : &sw |   let sw = shiftwidth() | ||||||
|   if cline =~# '\v^-\s*%(elsif|else|when)>' |   if cline =~# '\v^-\s*%(elsif|else|when)>' | ||||||
|     let indent = cindent < indent ? cindent : indent - sw |     let indent = cindent < indent ? cindent : indent - sw | ||||||
|   endif |   endif | ||||||
|   | |||||||
| @@ -27,13 +27,13 @@ function HamGetIndent(lnum) | |||||||
|   " Add a shiftwidth to statements following if,  else, elseif, |   " Add a shiftwidth to statements following if,  else, elseif, | ||||||
|   " case, select, default, do, until, while, for, start |   " case, select, default, do, until, while, for, start | ||||||
|   if prevline =~? '^\s*\<\(if\|else\%(if\)\?\|for\|repeat\|do\|while\|sub\)\>'  |   if prevline =~? '^\s*\<\(if\|else\%(if\)\?\|for\|repeat\|do\|while\|sub\)\>'  | ||||||
|     let ind = ind + &sw |     let ind = ind + shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " Subtract a shiftwidth from else, elseif, end(if|while|for), until |   " Subtract a shiftwidth from else, elseif, end(if|while|for), until | ||||||
|   let line = getline(v:lnum) |   let line = getline(v:lnum) | ||||||
|   if line =~? '^\s*\(else\|elseif\|loop\|until\|end\%(if\|while\|for\|sub\)\)\>' |   if line =~? '^\s*\(else\|elseif\|loop\|until\|end\%(if\|while\|for\|sub\)\)\>' | ||||||
|     let ind = ind - &sw |     let ind = ind - shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   return ind |   return ind | ||||||
|   | |||||||
| @@ -47,7 +47,7 @@ function GetHogIndent() | |||||||
|     " Continuation of a line that wasn't indented |     " Continuation of a line that wasn't indented | ||||||
|     let prevline = getline(prevlnum) |     let prevline = getline(prevlnum) | ||||||
|     if prevline =~ '^\k\+.*\\\s*$' |     if prevline =~ '^\k\+.*\\\s*$' | ||||||
|         return &sw  |         return shiftwidth()  | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|     " Continuation of a line that was indented |     " Continuation of a line that was indented | ||||||
| @@ -58,13 +58,13 @@ function GetHogIndent() | |||||||
|     " Indent the next line if previous line contained a start of a block |     " Indent the next line if previous line contained a start of a block | ||||||
|     " definition ('{' or '('). |     " definition ('{' or '('). | ||||||
|     if prevline =~ '^\k\+[^#]*{}\@!\s*$' " TODO || prevline =~ '^\k\+[^#]*()\@!\s*$' |     if prevline =~ '^\k\+[^#]*{}\@!\s*$' " TODO || prevline =~ '^\k\+[^#]*()\@!\s*$' | ||||||
|         return &sw |         return shiftwidth() | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|     " Match inside of a block |     " Match inside of a block | ||||||
|     if s:IsInBlock(v:lnum) |     if s:IsInBlock(v:lnum) | ||||||
|         if prevline =~ "^\k\+.*$" |         if prevline =~ "^\k\+.*$" | ||||||
|             return &sw |             return shiftwidth() | ||||||
|         else |         else | ||||||
|             return indent(prevlnum) |             return indent(prevlnum) | ||||||
|         endif |         endif | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| " Header: "{{{ | " Header: "{{{ | ||||||
| " Maintainer:	Bram Moolenaar | " Maintainer:	Bram Moolenaar | ||||||
| " Original Author: Andy Wokula <anwoku@yahoo.de> | " Original Author: Andy Wokula <anwoku@yahoo.de> | ||||||
| " Last Change:	2017 Jan 17 | " Last Change:	2017 Jun 13 | ||||||
| " Version:	1.0 | " Version:	1.0 | ||||||
| " Description:	HTML indent script with cached state for faster indenting on a | " Description:	HTML indent script with cached state for faster indenting on a | ||||||
| "		range of lines. | "		range of lines. | ||||||
| @@ -51,15 +51,6 @@ if exists("*HtmlIndent") && !exists('g:force_reload_html') | |||||||
|   finish |   finish | ||||||
| endif | endif | ||||||
|  |  | ||||||
| " shiftwidth() exists since patch 7.3.694 |  | ||||||
| if exists('*shiftwidth') |  | ||||||
|   let s:ShiftWidth = function('shiftwidth') |  | ||||||
| else |  | ||||||
|   func! s:ShiftWidth() |  | ||||||
|     return &shiftwidth |  | ||||||
|   endfunc |  | ||||||
| endif |  | ||||||
|  |  | ||||||
| " Allow for line continuation below. | " Allow for line continuation below. | ||||||
| let s:cpo_save = &cpo | let s:cpo_save = &cpo | ||||||
| set cpo-=C | set cpo-=C | ||||||
| @@ -123,7 +114,7 @@ func! HtmlIndent_CheckUserSettings() | |||||||
|  |  | ||||||
|   let indone = {"zero": 0 |   let indone = {"zero": 0 | ||||||
|               \,"auto": "indent(prevnonblank(v:lnum-1))" |               \,"auto": "indent(prevnonblank(v:lnum-1))" | ||||||
|               \,"inc": "b:hi_indent.blocktagind + s:ShiftWidth()"} |               \,"inc": "b:hi_indent.blocktagind + shiftwidth()"} | ||||||
|  |  | ||||||
|   let script1 = '' |   let script1 = '' | ||||||
|   if exists("b:html_indent_script1") |   if exists("b:html_indent_script1") | ||||||
| @@ -358,7 +349,7 @@ func! s:CheckBlockTag(blocktag, ind) | |||||||
|     endif |     endif | ||||||
|     let b:hi_newstate.blocklnr = v:lnum |     let b:hi_newstate.blocklnr = v:lnum | ||||||
|     " save allover indent for the endtag |     " save allover indent for the endtag | ||||||
|     let b:hi_newstate.blocktagind = b:hi_indent.baseindent + (s:nextrel + s:curind) * s:ShiftWidth() |     let b:hi_newstate.blocktagind = b:hi_indent.baseindent + (s:nextrel + s:curind) * shiftwidth() | ||||||
|     if a:ind == 3 |     if a:ind == 3 | ||||||
|       return "SCRIPT"    " all except this must be lowercase |       return "SCRIPT"    " all except this must be lowercase | ||||||
|       " line is to be checked again for the type attribute |       " line is to be checked again for the type attribute | ||||||
| @@ -480,7 +471,7 @@ func! s:FreshState(lnum) | |||||||
|       let state.blocklnr = stopline |       let state.blocklnr = stopline | ||||||
|       " check preceding tags in the line: |       " check preceding tags in the line: | ||||||
|       call s:CountITags(tagline[: stopcol-2]) |       call s:CountITags(tagline[: stopcol-2]) | ||||||
|       let state.blocktagind = indent(stopline) + (s:curind + s:nextrel) * s:ShiftWidth() |       let state.blocktagind = indent(stopline) + (s:curind + s:nextrel) * shiftwidth() | ||||||
|       return state |       return state | ||||||
|     elseif stopline == state.lnum |     elseif stopline == state.lnum | ||||||
|       " handle special case: previous line (= state.lnum) contains a |       " handle special case: previous line (= state.lnum) contains a | ||||||
| @@ -490,7 +481,7 @@ func! s:FreshState(lnum) | |||||||
|       if !swendtag |       if !swendtag | ||||||
|         let [bline, bcol] = searchpos('<'.blocktag[1:].'\>', "bnW") |         let [bline, bcol] = searchpos('<'.blocktag[1:].'\>', "bnW") | ||||||
|         call s:CountITags(tolower(getline(bline)[: bcol-2])) |         call s:CountITags(tolower(getline(bline)[: bcol-2])) | ||||||
|         let state.baseindent = indent(bline) + (s:curind + s:nextrel) * s:ShiftWidth() |         let state.baseindent = indent(bline) + (s:curind + s:nextrel) * shiftwidth() | ||||||
|         return state |         return state | ||||||
|       endif |       endif | ||||||
|     endif |     endif | ||||||
| @@ -511,7 +502,7 @@ func! s:FreshState(lnum) | |||||||
|     if found == 2 |     if found == 2 | ||||||
|       let state.baseindent = b:hi_indent.baseindent |       let state.baseindent = b:hi_indent.baseindent | ||||||
|     endif |     endif | ||||||
|     let state.blocktagind = indent(comlnum) + (s:curind + s:nextrel) * s:ShiftWidth() |     let state.blocktagind = indent(comlnum) + (s:curind + s:nextrel) * shiftwidth() | ||||||
|     return state |     return state | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
| @@ -530,7 +521,7 @@ func! s:FreshState(lnum) | |||||||
|       let text = tolower(getline(comlnum)[: comcol-2]) |       let text = tolower(getline(comlnum)[: comcol-2]) | ||||||
|     endif |     endif | ||||||
|     call s:CountITags(text) |     call s:CountITags(text) | ||||||
|     let state.baseindent = indent(comlnum) + (s:curind + s:nextrel) * s:ShiftWidth() |     let state.baseindent = indent(comlnum) + (s:curind + s:nextrel) * shiftwidth() | ||||||
|     " TODO check tags that follow "-->" |     " TODO check tags that follow "-->" | ||||||
|     return state |     return state | ||||||
|   endif |   endif | ||||||
| @@ -550,9 +541,9 @@ func! s:FreshState(lnum) | |||||||
|         let text = getline(start_lnum) |         let text = getline(start_lnum) | ||||||
|         let swendtag = match(text, '^\s*</') >= 0 |         let swendtag = match(text, '^\s*</') >= 0 | ||||||
|         call s:CountITags(text[: col('.') - 2]) |         call s:CountITags(text[: col('.') - 2]) | ||||||
|         let state.baseindent += s:nextrel * s:ShiftWidth() |         let state.baseindent += s:nextrel * shiftwidth() | ||||||
|         if !swendtag |         if !swendtag | ||||||
|           let state.baseindent += s:curind * s:ShiftWidth() |           let state.baseindent += s:curind * shiftwidth() | ||||||
|         endif |         endif | ||||||
|       endif |       endif | ||||||
|       return state |       return state | ||||||
| @@ -565,9 +556,9 @@ func! s:FreshState(lnum) | |||||||
|   let text = getline(state.lnum) |   let text = getline(state.lnum) | ||||||
|   let swendtag = match(text, '^\s*</') >= 0 |   let swendtag = match(text, '^\s*</') >= 0 | ||||||
|   call s:CountITags(tolower(text)) |   call s:CountITags(tolower(text)) | ||||||
|   let state.baseindent = indent(state.lnum) + s:nextrel * s:ShiftWidth() |   let state.baseindent = indent(state.lnum) + s:nextrel * shiftwidth() | ||||||
|   if !swendtag |   if !swendtag | ||||||
|     let state.baseindent += s:curind * s:ShiftWidth() |     let state.baseindent += s:curind * shiftwidth() | ||||||
|   endif |   endif | ||||||
|   return state |   return state | ||||||
| endfunc "}}} | endfunc "}}} | ||||||
| @@ -646,7 +637,7 @@ func! s:CSSIndent() | |||||||
|  |  | ||||||
|   " add indent after { |   " add indent after { | ||||||
|   let brace_counts = HtmlIndent_CountBraces(prev_lnum) |   let brace_counts = HtmlIndent_CountBraces(prev_lnum) | ||||||
|   let extra = brace_counts.c_open * s:ShiftWidth() |   let extra = brace_counts.c_open * shiftwidth() | ||||||
|  |  | ||||||
|   let prev_text = getline(prev_lnum) |   let prev_text = getline(prev_lnum) | ||||||
|   let below_end_brace = prev_text =~ '}\s*$' |   let below_end_brace = prev_text =~ '}\s*$' | ||||||
| @@ -663,7 +654,7 @@ func! s:CSSIndent() | |||||||
|       " if the current line is not a comment or starts with @ (used by template |       " if the current line is not a comment or starts with @ (used by template | ||||||
|       " systems) reduce indent if previous line is a continuation line |       " systems) reduce indent if previous line is a continuation line | ||||||
|       if !prev_hasfield && !prev_special |       if !prev_hasfield && !prev_special | ||||||
|         let extra = -s:ShiftWidth() |         let extra = -shiftwidth() | ||||||
|       endif |       endif | ||||||
|     else |     else | ||||||
|       let cur_hasfield = curtext =~ '^\s*[a-zA-Z0-9-]\+:' |       let cur_hasfield = curtext =~ '^\s*[a-zA-Z0-9-]\+:' | ||||||
| @@ -671,14 +662,14 @@ func! s:CSSIndent() | |||||||
|       if !cur_hasfield && (prev_hasfield || prev_unfinished) |       if !cur_hasfield && (prev_hasfield || prev_unfinished) | ||||||
|         " Continuation line has extra indent if the previous line was not a |         " Continuation line has extra indent if the previous line was not a | ||||||
|         " continuation line. |         " continuation line. | ||||||
|         let extra = s:ShiftWidth() |         let extra = shiftwidth() | ||||||
|         " Align with @if |         " Align with @if | ||||||
|         if prev_text =~ '^\s*@if ' |         if prev_text =~ '^\s*@if ' | ||||||
|           let extra = 4 |           let extra = 4 | ||||||
|         endif |         endif | ||||||
|       elseif cur_hasfield && !prev_hasfield && !prev_special |       elseif cur_hasfield && !prev_hasfield && !prev_special | ||||||
|         " less indent below a continuation line |         " less indent below a continuation line | ||||||
|         let extra = -s:ShiftWidth() |         let extra = -shiftwidth() | ||||||
|       endif |       endif | ||||||
|     endif |     endif | ||||||
|   endif |   endif | ||||||
| @@ -699,10 +690,10 @@ func! s:CSSIndent() | |||||||
|     if special |     if special | ||||||
|       " do not reduce indent below @{ ... } |       " do not reduce indent below @{ ... } | ||||||
|       if extra < 0 |       if extra < 0 | ||||||
|         let extra += s:ShiftWidth() |         let extra += shiftwidth() | ||||||
|       endif |       endif | ||||||
|     else |     else | ||||||
|       let extra -= (brace_counts.c_close - (prev_text =~ '^\s*}')) * s:ShiftWidth() |       let extra -= (brace_counts.c_close - (prev_text =~ '^\s*}')) * shiftwidth() | ||||||
|     endif |     endif | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
| @@ -710,10 +701,10 @@ func! s:CSSIndent() | |||||||
|   if extra == 0 |   if extra == 0 | ||||||
|     if brace_counts.p_open > brace_counts.p_close |     if brace_counts.p_open > brace_counts.p_close | ||||||
|       " previous line has more ( than ): add a shiftwidth |       " previous line has more ( than ): add a shiftwidth | ||||||
|       let extra = s:ShiftWidth() |       let extra = shiftwidth() | ||||||
|     elseif brace_counts.p_open < brace_counts.p_close |     elseif brace_counts.p_open < brace_counts.p_close | ||||||
|       " previous line has more ) than (: subtract a shiftwidth |       " previous line has more ) than (: subtract a shiftwidth | ||||||
|       let extra = -s:ShiftWidth() |       let extra = -shiftwidth() | ||||||
|     endif |     endif | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
| @@ -816,7 +807,7 @@ func! s:Alien5() | |||||||
|   let idx = match(prevtext, '^\s*\zs<!--') |   let idx = match(prevtext, '^\s*\zs<!--') | ||||||
|   if idx >= 0 |   if idx >= 0 | ||||||
|     " just below comment start, add a shiftwidth |     " just below comment start, add a shiftwidth | ||||||
|     return idx + s:ShiftWidth() |     return idx + shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " Some files add 4 spaces just below a TODO line.  It's difficult to detect |   " Some files add 4 spaces just below a TODO line.  It's difficult to detect | ||||||
| @@ -837,7 +828,7 @@ func! s:Alien6() | |||||||
|       return indent(lnum) |       return indent(lnum) | ||||||
|     endif |     endif | ||||||
|   endif |   endif | ||||||
|   return b:hi_indent.baseindent + s:ShiftWidth() |   return b:hi_indent.baseindent + shiftwidth() | ||||||
| endfunc "}}} | endfunc "}}} | ||||||
|  |  | ||||||
| " When the "lnum" line ends in ">" find the line containing the matching "<". | " When the "lnum" line ends in ">" find the line containing the matching "<". | ||||||
| @@ -947,7 +938,7 @@ func! HtmlIndent() | |||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   let curtext = tolower(getline(v:lnum)) |   let curtext = tolower(getline(v:lnum)) | ||||||
|   let indentunit = s:ShiftWidth() |   let indentunit = shiftwidth() | ||||||
|  |  | ||||||
|   let b:hi_newstate = {} |   let b:hi_newstate = {} | ||||||
|   let b:hi_newstate.lnum = v:lnum |   let b:hi_newstate.lnum = v:lnum | ||||||
| @@ -1030,9 +1021,9 @@ func! HtmlIndent() | |||||||
|         if col('.') > 2 |         if col('.') > 2 | ||||||
|           let swendtag = match(text, '^\s*</') >= 0 |           let swendtag = match(text, '^\s*</') >= 0 | ||||||
|           call s:CountITags(text[: col('.') - 2]) |           call s:CountITags(text[: col('.') - 2]) | ||||||
|           let indent += s:nextrel * s:ShiftWidth() |           let indent += s:nextrel * shiftwidth() | ||||||
|           if !swendtag |           if !swendtag | ||||||
|             let indent += s:curind * s:ShiftWidth() |             let indent += s:curind * shiftwidth() | ||||||
|           endif |           endif | ||||||
|         endif |         endif | ||||||
|       else |       else | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| " IDL (Interactive Data Language) indent file. | " IDL (Interactive Data Language) indent file. | ||||||
| " Language: IDL (ft=idlang) | " Language: IDL (ft=idlang) | ||||||
| " Last change:	2012 May 18 | " Last change:	2017 Jun 13 | ||||||
| " Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com> | " Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com> | ||||||
|  |  | ||||||
| " Only load this indent file when no other was loaded. | " Only load this indent file when no other was loaded. | ||||||
| @@ -34,25 +34,25 @@ function GetIdlangIndent(lnum) | |||||||
|    " Indenting of continued lines. |    " Indenting of continued lines. | ||||||
|    if getline(pnum) =~ '\$\s*\(;.*\)\=$' |    if getline(pnum) =~ '\$\s*\(;.*\)\=$' | ||||||
|       if getline(pnum2) !~ '\$\s*\(;.*\)\=$' |       if getline(pnum2) !~ '\$\s*\(;.*\)\=$' | ||||||
| 	 let curind = curind+&sw | 	 let curind = curind+shiftwidth() | ||||||
|       endif |       endif | ||||||
|    else |    else | ||||||
|       if getline(pnum2) =~ '\$\s*\(;.*\)\=$' |       if getline(pnum2) =~ '\$\s*\(;.*\)\=$' | ||||||
| 	 let curind = curind-&sw | 	 let curind = curind-shiftwidth() | ||||||
|       endif |       endif | ||||||
|    endif |    endif | ||||||
|  |  | ||||||
|    " Indenting blocks of statements. |    " Indenting blocks of statements. | ||||||
|    if getline(v:lnum) =~? '^\s*\(endif\|endelse\|endwhile\|endfor\|endrep\)\>' |    if getline(v:lnum) =~? '^\s*\(endif\|endelse\|endwhile\|endfor\|endrep\)\>' | ||||||
|       if getline(pnum) =~? 'begin\>' |       if getline(pnum) =~? 'begin\>' | ||||||
|       elseif indent(v:lnum) > curind-&sw |       elseif indent(v:lnum) > curind-shiftwidth() | ||||||
| 	 let curind = curind-&sw | 	 let curind = curind-shiftwidth() | ||||||
|       else |       else | ||||||
| 	 return -1 | 	 return -1 | ||||||
|       endif |       endif | ||||||
|    elseif getline(pnum) =~? 'begin\>' |    elseif getline(pnum) =~? 'begin\>' | ||||||
|       if indent(v:lnum) < curind+&sw |       if indent(v:lnum) < curind+shiftwidth() | ||||||
| 	 let curind = curind+&sw | 	 let curind = curind+shiftwidth() | ||||||
|       else |       else | ||||||
| 	 return -1 | 	 return -1 | ||||||
|       endif |       endif | ||||||
|   | |||||||
| @@ -50,17 +50,17 @@ fun! GetIshdIndent(lnum) | |||||||
|  |  | ||||||
|     " Add |     " Add | ||||||
|     if previous_line =~ '^\s*\<\(function\|begin\|switch\|case\|default\|if.\{-}then\|else\|elseif\|while\|repeat\)\>' |     if previous_line =~ '^\s*\<\(function\|begin\|switch\|case\|default\|if.\{-}then\|else\|elseif\|while\|repeat\)\>' | ||||||
| 	let ind = ind + &sw | 	let ind = ind + shiftwidth() | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|     " Subtract |     " Subtract | ||||||
|     if this_line =~ '^\s*\<endswitch\>' |     if this_line =~ '^\s*\<endswitch\>' | ||||||
| 	let ind = ind - 2 * &sw | 	let ind = ind - 2 * shiftwidth() | ||||||
|     elseif this_line =~ '^\s*\<\(begin\|end\|endif\|endwhile\|else\|elseif\|until\)\>' |     elseif this_line =~ '^\s*\<\(begin\|end\|endif\|endwhile\|else\|elseif\|until\)\>' | ||||||
| 	let ind = ind - &sw | 	let ind = ind - shiftwidth() | ||||||
|     elseif this_line =~ '^\s*\<\(case\|default\)\>' |     elseif this_line =~ '^\s*\<\(case\|default\)\>' | ||||||
| 	if previous_line !~ '^\s*\<switch\>' | 	if previous_line !~ '^\s*\<switch\>' | ||||||
| 	    let ind = ind - &sw | 	    let ind = ind - shiftwidth() | ||||||
| 	endif | 	endif | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| " Language: Javascript | " Language: Javascript | ||||||
| " Maintainer: Chris Paul ( https://github.com/bounceme ) | " Maintainer: Chris Paul ( https://github.com/bounceme ) | ||||||
| " URL: https://github.com/pangloss/vim-javascript | " URL: https://github.com/pangloss/vim-javascript | ||||||
| " Last Change: December 31, 2016 | " Last Change: March 21, 2017 | ||||||
|  |  | ||||||
| " Only load this indent file when no other was loaded. | " Only load this indent file when no other was loaded. | ||||||
| if exists('b:did_indent') | if exists('b:did_indent') | ||||||
| @@ -14,6 +14,10 @@ let b:did_indent = 1 | |||||||
| setlocal indentexpr=GetJavascriptIndent() | setlocal indentexpr=GetJavascriptIndent() | ||||||
| setlocal autoindent nolisp nosmartindent | setlocal autoindent nolisp nosmartindent | ||||||
| setlocal indentkeys+=0],0) | setlocal indentkeys+=0],0) | ||||||
|  | " Testable with something like: | ||||||
|  | " vim  -eNs "+filetype plugin indent on" "+syntax on" "+set ft=javascript" \ | ||||||
|  | "       "+norm! gg=G" '+%print' '+:q!' testfile.js \ | ||||||
|  | "       | diff -uBZ testfile.js - | ||||||
|  |  | ||||||
| let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys<' | let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys<' | ||||||
|  |  | ||||||
| @@ -32,10 +36,14 @@ if exists('*shiftwidth') | |||||||
|   endfunction |   endfunction | ||||||
| else | else | ||||||
|   function s:sw() |   function s:sw() | ||||||
|     return &sw |     return &l:shiftwidth == 0 ? &l:tabstop : &l:shiftwidth | ||||||
|   endfunction |   endfunction | ||||||
| endif | endif | ||||||
|  |  | ||||||
|  | " Performance for forwards search(): start search at pos rather than masking | ||||||
|  | " matches before pos. | ||||||
|  | let s:z = has('patch-7.4.984') ? 'z' : '' | ||||||
|  |  | ||||||
| " searchpair() wrapper | " searchpair() wrapper | ||||||
| if has('reltime') | if has('reltime') | ||||||
|   function s:GetPair(start,end,flags,skip,time,...) |   function s:GetPair(start,end,flags,skip,time,...) | ||||||
| @@ -48,34 +56,41 @@ else | |||||||
| endif | endif | ||||||
|  |  | ||||||
| " Regex of syntax group names that are or delimit string or are comments. | " Regex of syntax group names that are or delimit string or are comments. | ||||||
| let s:syng_strcom = 'string\|comment\|regex\|special\|doc\|template' | let s:syng_strcom = 'string\|comment\|regex\|special\|doc\|template\%(braces\)\@!' | ||||||
| let s:syng_str = 'string\|template' | let s:syng_str = 'string\|template\|special' | ||||||
| let s:syng_com = 'comment\|doc' | let s:syng_com = 'comment\|doc' | ||||||
| " Expression used to check whether we should skip a match with searchpair(). | " Expression used to check whether we should skip a match with searchpair(). | ||||||
| let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" | let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" | ||||||
|  |  | ||||||
|  | function s:parse_cino(f) abort | ||||||
|  |   return float2nr(eval(substitute(substitute(join(split( | ||||||
|  |         \ matchstr(&cino,'.*'.a:f.'\zs[^,]*'), 's',1), '*'.s:W) | ||||||
|  |         \ , '^-\=\zs\*','',''), '^-\=\zs\.','0.',''))) | ||||||
|  | endfunction | ||||||
|  |  | ||||||
| function s:skip_func() | function s:skip_func() | ||||||
|   if !s:free || search('\m`\|\*\/','nW',s:looksyn) |   if getline('.') =~ '\%<'.col('.').'c\/.\{-}\/\|\%>'.col('.').'c[''"]\|\\$' | ||||||
|     let s:free = !eval(s:skip_expr) |     return eval(s:skip_expr) | ||||||
|     let s:looksyn = s:free ? line('.') : s:looksyn |   elseif s:checkIn || search('\m`\|\${\|\*\/','nW'.s:z,s:looksyn) | ||||||
|     return !s:free |     let s:checkIn = eval(s:skip_expr) | ||||||
|   endif |   endif | ||||||
|   let s:looksyn = line('.') |   let s:looksyn = line('.') | ||||||
|   return (search('\m\/','nbW',s:looksyn) || search('\m[''"]\|\\$','nW',s:looksyn)) && eval(s:skip_expr) |   return s:checkIn | ||||||
| endfunction | endfunction | ||||||
|  |  | ||||||
| function s:alternatePair(stop) | function s:alternatePair(stop) | ||||||
|   let pos = getpos('.')[1:2] |   let pos = getpos('.')[1:2] | ||||||
|   while search('\m[][(){}]','bW',a:stop) |   let pat = '[][(){};]' | ||||||
|     if !s:skip_func() |   while search('\m'.pat,'bW',a:stop) | ||||||
|       let idx = stridx('])}',s:looking_at()) |     if s:skip_func() | continue | endif | ||||||
|       if idx + 1 |     let idx = stridx('])};',s:looking_at()) | ||||||
|         if !s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,a:stop) |     if idx is 3 | let pat = '[{}()]' | continue | endif | ||||||
|           break |     if idx + 1 | ||||||
|         endif |       if s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,a:stop) <= 0 | ||||||
|       else |         break | ||||||
|         return |  | ||||||
|       endif |       endif | ||||||
|  |     else | ||||||
|  |       return | ||||||
|     endif |     endif | ||||||
|   endwhile |   endwhile | ||||||
|   call call('cursor',pos) |   call call('cursor',pos) | ||||||
| @@ -100,93 +115,91 @@ function s:token() | |||||||
|   return s:looking_at() =~ '\k' ? expand('<cword>') : s:looking_at() |   return s:looking_at() =~ '\k' ? expand('<cword>') : s:looking_at() | ||||||
| endfunction | endfunction | ||||||
|  |  | ||||||
| function s:b_token() |  | ||||||
|   if s:looking_at() =~ '\k' |  | ||||||
|     call search('\m\<','cbW') |  | ||||||
|   endif |  | ||||||
|   return search('\m\S','bW') |  | ||||||
| endfunction |  | ||||||
|  |  | ||||||
| function s:previous_token() | function s:previous_token() | ||||||
|   let l:n = line('.') |   let l:pos = getpos('.')[1:2] | ||||||
|   while s:b_token() |   if search('\m\k\{1,}\zs\k\|\S','bW') | ||||||
|     if (s:looking_at() == '/' || line('.') != l:n && search('\m\/\/','nbW', |     if (getline('.')[col('.')-2:col('.')-1] == '*/' || line('.') != l:pos[0] && | ||||||
|           \ line('.'))) && s:syn_at(line('.'),col('.')) =~? s:syng_com |           \ getline('.') =~ '\%<'.col('.').'c\/\/') && s:syn_at(line('.'),col('.')) =~? s:syng_com | ||||||
|       call search('\m\_[^/]\zs\/[/*]','bW') |       while search('\m\S\ze\_s*\/[/*]','bW') | ||||||
|  |         if s:syn_at(line('.'),col('.')) !~? s:syng_com | ||||||
|  |           return s:token() | ||||||
|  |         endif | ||||||
|  |       endwhile | ||||||
|     else |     else | ||||||
|       return s:token() |       return s:token() | ||||||
|     endif |     endif | ||||||
|   endwhile |   endif | ||||||
|  |   call call('cursor',l:pos) | ||||||
|   return '' |   return '' | ||||||
| endfunction | endfunction | ||||||
|  |  | ||||||
| function s:others(p) | function s:expr_col() | ||||||
|   return "((line2byte(line('.')) + col('.')) <= ".(line2byte(a:p[0]) + a:p[1]).") || ".s:skip_expr |   if getline('.')[col('.')-2] == ':' | ||||||
| endfunction |     return 1 | ||||||
|  |  | ||||||
| function s:tern_skip(p) |  | ||||||
|   return s:GetPair('{','}','nbW',s:others(a:p),200,a:p[0]) > 0 |  | ||||||
| endfunction |  | ||||||
|  |  | ||||||
| function s:tern_col(p) |  | ||||||
|   return s:GetPair('?',':\@<!::\@!','nbW',s:others(a:p) |  | ||||||
|         \ .' || s:tern_skip('.string(a:p).')',200,a:p[0]) > 0 |  | ||||||
| endfunction |  | ||||||
|  |  | ||||||
| function s:label_col() |  | ||||||
|   let pos = getpos('.')[1:2] |  | ||||||
|   let [s:looksyn,s:free] = pos |  | ||||||
|   call s:alternatePair(0) |  | ||||||
|   if s:save_pos('s:IsBlock') |  | ||||||
|     let poss = getpos('.')[1:2] |  | ||||||
|     return call('cursor',pos) || !s:tern_col(poss) |  | ||||||
|   elseif s:looking_at() == ':' |  | ||||||
|     return !s:tern_col([0,0]) |  | ||||||
|   endif |   endif | ||||||
|  |   let bal = 0 | ||||||
|  |   while search('\m[{}?:;]','bW') | ||||||
|  |     if eval(s:skip_expr) | continue | endif | ||||||
|  |     " switch (looking_at()) | ||||||
|  |     exe {   '}': "if s:GetPair('{','}','bW',s:skip_expr,200) <= 0 | return | endif", | ||||||
|  |           \ ';': "return", | ||||||
|  |           \ '{': "return getpos('.')[1:2] != b:js_cache[1:] && !s:IsBlock()", | ||||||
|  |           \ ':': "let bal -= getline('.')[max([col('.')-2,0]):col('.')] !~ '::'", | ||||||
|  |           \ '?': "let bal += 1 | if bal > 0 | return 1 | endif" }[s:looking_at()] | ||||||
|  |   endwhile | ||||||
| endfunction | endfunction | ||||||
|  |  | ||||||
| " configurable regexes that define continuation lines, not including (, {, or [. | " configurable regexes that define continuation lines, not including (, {, or [. | ||||||
| let s:opfirst = '^' . get(g:,'javascript_opfirst', | let s:opfirst = '^' . get(g:,'javascript_opfirst', | ||||||
|       \ '\%([<>=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)') |       \ '\C\%([<>=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)') | ||||||
| let s:continuation = get(g:,'javascript_continuation', | let s:continuation = get(g:,'javascript_continuation', | ||||||
|       \ '\%([<=,.~!?/*^%|&:]\|+\@<!+\|-\@<!-\|=\@<!>\|\<\%(typeof\|delete\|void\|in\|instanceof\)\)') . '$' |       \ '\C\%([-+<>=,.~!?/*^%|&:]\|\<\%(typeof\|new\|delete\|void\|in\|instanceof\|await\)\)') . '$' | ||||||
|  |  | ||||||
| function s:continues(ln,con) | function s:continues(ln,con) | ||||||
|   return !cursor(a:ln, match(' '.a:con,s:continuation)) && |   if !cursor(a:ln, match(' '.a:con,s:continuation)) | ||||||
|         \ eval((['s:syn_at(line("."),col(".")) !~? "regex"'] + |     let teol = s:looking_at() | ||||||
|         \ repeat(['s:previous_token() != "."'],5) + [1])[ |     if teol == '/' | ||||||
|         \ index(split('/ typeof in instanceof void delete'),s:token())]) |       return s:syn_at(line('.'),col('.')) !~? 'regex' | ||||||
|  |     elseif teol =~ '[-+>]' | ||||||
|  |       return getline('.')[col('.')-2] != tr(teol,'>','=') | ||||||
|  |     elseif teol =~ '\l' | ||||||
|  |       return s:previous_token() != '.' | ||||||
|  |     elseif teol == ':' | ||||||
|  |       return s:expr_col() | ||||||
|  |     endif | ||||||
|  |     return 1 | ||||||
|  |   endif | ||||||
| endfunction | endfunction | ||||||
|  |  | ||||||
| " get the line of code stripped of comments and move cursor to the last | " get the line of code stripped of comments and move cursor to the last | ||||||
| " non-comment char. | " non-comment char. | ||||||
| function s:Trim(ln) | function s:Trim(ln) | ||||||
|   let pline = substitute(getline(a:ln),'\s*$','','') |   let pline = substitute(getline(a:ln),'\s*$','','') | ||||||
|   let l:max = max([match(pline,'.*[^/]\zs\/[/*]'),0]) |   let l:max = max([strridx(pline,'//'), strridx(pline,'/*')]) | ||||||
|   while l:max && s:syn_at(a:ln, strlen(pline)) =~? s:syng_com |   while l:max != -1 && s:syn_at(a:ln, strlen(pline)) =~? s:syng_com | ||||||
|     let pline = substitute(strpart(pline, 0, l:max),'\s*$','','') |     let pline = pline[: l:max] | ||||||
|     let l:max = max([match(pline,'.*[^/]\zs\/[/*]'),0]) |     let l:max = max([strridx(pline,'//'), strridx(pline,'/*')]) | ||||||
|  |     let pline = substitute(pline[:-2],'\s*$','','') | ||||||
|   endwhile |   endwhile | ||||||
|   return cursor(a:ln,strlen(pline)) ? pline : pline |   return pline is '' || cursor(a:ln,strlen(pline)) ? pline : pline | ||||||
| endfunction | endfunction | ||||||
|  |  | ||||||
| " Find line above 'lnum' that isn't empty or in a comment | " Find line above 'lnum' that isn't empty or in a comment | ||||||
| function s:PrevCodeLine(lnum) | function s:PrevCodeLine(lnum) | ||||||
|   let l:n = prevnonblank(a:lnum) |   let [l:pos, l:n] = [getpos('.')[1:2], prevnonblank(a:lnum)] | ||||||
|   while l:n |   while l:n | ||||||
|     if getline(l:n) =~ '^\s*\/[/*]' |     if getline(l:n) =~ '^\s*\/[/*]' | ||||||
|       if (stridx(getline(l:n),'`') > 0 || getline(l:n-1)[-1:] == '\') && |  | ||||||
|             \ s:syn_at(l:n,1) =~? s:syng_str |  | ||||||
|         return l:n |  | ||||||
|       endif |  | ||||||
|       let l:n = prevnonblank(l:n-1) |       let l:n = prevnonblank(l:n-1) | ||||||
|     elseif s:syn_at(l:n,1) =~? s:syng_com |     elseif stridx(getline(l:n), '*/') + 1 && s:syn_at(l:n,1) =~? s:syng_com | ||||||
|       let l:n = s:save_pos('eval', |       call cursor(l:n,1) | ||||||
|             \ 'cursor('.l:n.',1) + search(''\m\/\*'',"bW")') |       keepjumps norm! [* | ||||||
|  |       let l:n = search('\m\S','nbW') | ||||||
|     else |     else | ||||||
|       return l:n |       break | ||||||
|     endif |     endif | ||||||
|   endwhile |   endwhile | ||||||
|  |   call call('cursor',l:pos) | ||||||
|  |   return l:n | ||||||
| endfunction | endfunction | ||||||
|  |  | ||||||
| " Check if line 'lnum' has a balanced amount of parentheses. | " Check if line 'lnum' has a balanced amount of parentheses. | ||||||
| @@ -201,7 +214,9 @@ function s:Balanced(lnum) | |||||||
|         return |         return | ||||||
|       endif |       endif | ||||||
|     endif |     endif | ||||||
|     let pos = match(l:line, '[][(){}]', pos + 1) |     let pos = match(l:line, (l:open ? | ||||||
|  |           \ '['.escape(tr(l:line[pos],'({[]})',')}][{(').l:line[pos],']').']' : | ||||||
|  |           \ '[][(){}]'), pos + 1) | ||||||
|   endwhile |   endwhile | ||||||
|   return !l:open |   return !l:open | ||||||
| endfunction | endfunction | ||||||
| @@ -210,20 +225,21 @@ function s:OneScope(lnum) | |||||||
|   let pline = s:Trim(a:lnum) |   let pline = s:Trim(a:lnum) | ||||||
|   let kw = 'else do' |   let kw = 'else do' | ||||||
|   if pline[-1:] == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 |   if pline[-1:] == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 | ||||||
|     call s:previous_token() |     if s:previous_token() =~# '^\%(await\|each\)$' | ||||||
|     let kw = 'for if let while with' |  | ||||||
|     if index(split('await each'),s:token()) + 1 |  | ||||||
|       call s:previous_token() |       call s:previous_token() | ||||||
|       let kw = 'for' |       let kw = 'for' | ||||||
|  |     else | ||||||
|  |       let kw = 'for if let while with' | ||||||
|     endif |     endif | ||||||
|   endif |   endif | ||||||
|   return pline[-2:] == '=>' || index(split(kw),s:token()) + 1 && |   return pline[-2:] == '=>' || index(split(kw),s:token()) + 1 && | ||||||
|         \ s:save_pos('s:previous_token') != '.' |         \ s:save_pos('s:previous_token') != '.' | ||||||
| endfunction | endfunction | ||||||
|  |  | ||||||
| " returns braceless levels started by 'i' and above lines * &sw. 'num' is the | " returns braceless levels started by 'i' and above lines * shiftwidth(). | ||||||
| " lineNr which encloses the entire context, 'cont' if whether line 'i' + 1 is | " 'num' is the lineNr which encloses the entire context, 'cont' if whether | ||||||
| " a continued expression, which could have started in a braceless context | " line 'i' + 1 is a continued expression, which could have started in a | ||||||
|  | " braceless context | ||||||
| function s:iscontOne(i,num,cont) | function s:iscontOne(i,num,cont) | ||||||
|   let [l:i, l:num, bL] = [a:i, a:num + !a:num, 0] |   let [l:i, l:num, bL] = [a:i, a:num + !a:num, 0] | ||||||
|   let pind = a:num ? indent(l:num) + s:W : 0 |   let pind = a:num ? indent(l:num) + s:W : 0 | ||||||
| @@ -246,18 +262,23 @@ function s:IsBlock() | |||||||
|   if s:looking_at() == '{' |   if s:looking_at() == '{' | ||||||
|     let l:n = line('.') |     let l:n = line('.') | ||||||
|     let char = s:previous_token() |     let char = s:previous_token() | ||||||
|     let syn = char =~ '[{>/]' ? s:syn_at(line('.'),col('.')-(char == '{')) : '' |     if match(s:stack,'\cxml\|jsx') + 1 && s:syn_at(line('.'),col('.')-1) =~? 'xml\|jsx' | ||||||
|     if syn =~? 'xml\|jsx' |  | ||||||
|       return char != '{' |       return char != '{' | ||||||
|     elseif char =~ '\k' |     elseif char =~ '\k' | ||||||
|       return index(split('return const let import export yield default delete var await void typeof throw case new in instanceof') |       if char ==# 'type' | ||||||
|             \ ,char) < (line('.') != l:n) || s:previous_token() == '.' |         return s:previous_token() !~# '^\%(im\|ex\)port$' | ||||||
|  |       endif | ||||||
|  |       return index(split('return const let import export extends yield default delete var await void typeof throw case new of in instanceof') | ||||||
|  |             \ ,char) < (line('.') != l:n) || s:save_pos('s:previous_token') == '.' | ||||||
|     elseif char == '>' |     elseif char == '>' | ||||||
|       return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow' |       return getline('.')[col('.')-2] == '=' || s:syn_at(line('.'),col('.')) =~? '^jsflow' | ||||||
|     elseif char == ':' |     elseif char == ':' | ||||||
|       return getline('.')[col('.')-2] != ':' && s:label_col() |       return !s:save_pos('s:expr_col') | ||||||
|  |     elseif char == '/' | ||||||
|  |       return s:syn_at(line('.'),col('.')) =~? 'regex' | ||||||
|     endif |     endif | ||||||
|     return syn =~? 'regex' || char !~ '[-=~!<*+,/?^%|&([]' |     return char !~ '[=~!<*,?^%|&([]' && | ||||||
|  |           \ (char !~ '[-+]' || l:n != line('.') && getline('.')[col('.')-2] == char) | ||||||
|   endif |   endif | ||||||
| endfunction | endfunction | ||||||
|  |  | ||||||
| @@ -266,7 +287,9 @@ function GetJavascriptIndent() | |||||||
|   " Get the current line. |   " Get the current line. | ||||||
|   call cursor(v:lnum,1) |   call cursor(v:lnum,1) | ||||||
|   let l:line = getline('.') |   let l:line = getline('.') | ||||||
|   let syns = s:syn_at(v:lnum, 1) |   " use synstack as it validates syn state and works in an empty line | ||||||
|  |   let s:stack = map(synstack(v:lnum,1),"synIDattr(v:val,'name')") | ||||||
|  |   let syns = get(s:stack,-1,'') | ||||||
|  |  | ||||||
|   " start with strings,comments,etc. |   " start with strings,comments,etc. | ||||||
|   if syns =~? s:syng_com |   if syns =~? s:syng_com | ||||||
| @@ -275,7 +298,7 @@ function GetJavascriptIndent() | |||||||
|     elseif l:line !~ '^\s*\/[/*]' |     elseif l:line !~ '^\s*\/[/*]' | ||||||
|       return -1 |       return -1 | ||||||
|     endif |     endif | ||||||
|   elseif syns =~? s:syng_str && l:line !~ '^[''"]' |   elseif syns =~? s:syng_str | ||||||
|     if b:js_cache[0] == v:lnum - 1 && s:Balanced(v:lnum-1) |     if b:js_cache[0] == v:lnum - 1 && s:Balanced(v:lnum-1) | ||||||
|       let b:js_cache[0] = v:lnum |       let b:js_cache[0] = v:lnum | ||||||
|     endif |     endif | ||||||
| @@ -295,69 +318,60 @@ function GetJavascriptIndent() | |||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " the containing paren, bracket, or curly. Many hacks for performance |   " the containing paren, bracket, or curly. Many hacks for performance | ||||||
|   let idx = strlen(l:line) ? stridx('])}',l:line[0]) : -1 |   let idx = index([']',')','}'],l:line[0]) | ||||||
|   if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && |   if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && | ||||||
|         \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum)) |         \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum)) | ||||||
|     call call('cursor',b:js_cache[1:]) |     call call('cursor',b:js_cache[1:]) | ||||||
|   else |   else | ||||||
|     let [s:looksyn, s:free, top] = [v:lnum - 1, 1, (!indent(l:lnum) && |     let [s:looksyn, s:checkIn, top] = [v:lnum - 1, 0, (!indent(l:lnum) && | ||||||
|           \ s:syn_at(l:lnum,1) !~? s:syng_str) * l:lnum] |           \ s:syn_at(l:lnum,1) !~? s:syng_str) * l:lnum] | ||||||
|     if idx + 1 |     if idx + 1 | ||||||
|       call s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,top) |       call s:GetPair(['\[','(','{'][idx],'])}'[idx],'bW','s:skip_func()',2000,top) | ||||||
|     elseif indent(v:lnum) && syns =~? 'block' |     elseif getline(v:lnum) !~ '^\S' && syns =~? 'block' | ||||||
|       call s:GetPair('{','}','bW','s:skip_func()',2000,top) |       call s:GetPair('{','}','bW','s:skip_func()',2000,top) | ||||||
|     else |     else | ||||||
|       call s:alternatePair(top) |       call s:alternatePair(top) | ||||||
|     endif |     endif | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   if idx + 1 || l:line[:1] == '|}' |  | ||||||
|     if idx == 2 && search('\m\S','bW',line('.')) && s:looking_at() == ')' |  | ||||||
|       call s:GetPair('(',')','bW',s:skip_expr,200) |  | ||||||
|     endif |  | ||||||
|     return indent('.') |  | ||||||
|   endif |  | ||||||
|  |  | ||||||
|   let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [0,0] : getpos('.')[1:2]) |   let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [0,0] : getpos('.')[1:2]) | ||||||
|   let num = b:js_cache[1] |   let num = b:js_cache[1] | ||||||
|  |  | ||||||
|   let [s:W, isOp, bL, switch_offset] = [s:sw(),0,0,0] |   let [s:W, isOp, bL, switch_offset] = [s:sw(),0,0,0] | ||||||
|   if !num || s:IsBlock() |   if !num || s:IsBlock() | ||||||
|  |     let ilnum = line('.') | ||||||
|     let pline = s:save_pos('s:Trim',l:lnum) |     let pline = s:save_pos('s:Trim',l:lnum) | ||||||
|     if num && s:looking_at() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 |     if num && s:looking_at() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 | ||||||
|       let num = line('.') |       let num = ilnum == num ? line('.') : num | ||||||
|       if s:previous_token() ==# 'switch' && s:previous_token() != '.' |       if idx < 0 && s:previous_token() ==# 'switch' && s:previous_token() != '.' | ||||||
|         if &cino !~ ':' || !has('float') |         if &cino !~ ':' | ||||||
|           let switch_offset = s:W |           let switch_offset = s:W | ||||||
|         else |         else | ||||||
|           let cinc = matchlist(&cino,'.*:\(-\)\=\([0-9.]*\)\(s\)\=\C') |           let switch_offset = max([-indent(num),s:parse_cino(':')]) | ||||||
|           let switch_offset = float2nr(str2float(cinc[1].(strlen(cinc[2]) ? cinc[2] : strlen(cinc[3]))) |  | ||||||
|                 \ * (strlen(cinc[3]) ? s:W : 1)) |  | ||||||
|         endif |         endif | ||||||
|         if pline[-1:] != '.' && l:line =~# '^\%(default\|case\)\>' |         if pline[-1:] != '.' && l:line =~# '^\%(default\|case\)\>' | ||||||
|           return indent(num) + switch_offset |           return indent(num) + switch_offset | ||||||
|         endif |         endif | ||||||
|       endif |       endif | ||||||
|     endif |     endif | ||||||
|     if pline[-1:] !~ '[{;]' |     if idx < 0 && pline[-1:] !~ '[{;]' | ||||||
|       if pline =~# ':\@<!:$' |       let isOp = (l:line =~# s:opfirst || s:continues(l:lnum,pline)) * s:W | ||||||
|         call cursor(l:lnum,strlen(pline)) |       let bL = s:iscontOne(l:lnum,b:js_cache[1],isOp) | ||||||
|         let isOp = s:tern_col(b:js_cache[1:2]) |  | ||||||
|       else |  | ||||||
|         let isOp = l:line =~# s:opfirst || s:continues(l:lnum,pline) |  | ||||||
|       endif |  | ||||||
|       let bL = s:iscontOne(l:lnum,num,isOp) |  | ||||||
|       let bL -= (bL && l:line[0] == '{') * s:W |       let bL -= (bL && l:line[0] == '{') * s:W | ||||||
|     endif |     endif | ||||||
|  |   elseif idx < 0 && getline(b:js_cache[1])[b:js_cache[2]-1] == '(' && &cino =~ '(' | ||||||
|  |     let pval = s:parse_cino('(') | ||||||
|  |     return !pval ? (s:parse_cino('w') ? 0 : -(!!search('\m\S','W'.s:z,num))) + virtcol('.') : | ||||||
|  |           \ max([indent('.') + pval + (s:GetPair('(',')','nbrmW',s:skip_expr,100,num) * s:W),0]) | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " main return |   " main return | ||||||
|   if isOp |   if l:line =~ '^\%([])}]\||}\)' | ||||||
|     return (num ? indent(num) : -s:W) + (s:W * 2) + switch_offset + bL |     return max([indent(num),0]) | ||||||
|   elseif num |   elseif num | ||||||
|     return indent(num) + s:W + switch_offset + bL |     return indent(num) + s:W + switch_offset + bL + isOp | ||||||
|   endif |   endif | ||||||
|   return bL |   return bL + isOp | ||||||
| endfunction | endfunction | ||||||
|  |  | ||||||
| let &cpo = s:cpo_save | let &cpo = s:cpo_save | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| " Vim indent file | " Vim indent file | ||||||
| " Language:		JSON | " Language:		JSON | ||||||
| " Mantainer:		Eli Parra <eli@elzr.com> https://github.com/elzr/vim-json | " Mantainer:		Eli Parra <eli@elzr.com> https://github.com/elzr/vim-json | ||||||
| " Last Change:          2014 Aug 29 | " Last Change:          2017 Jun 13 | ||||||
| "   https://github.com/jakar/vim-json/commit/20b650e22aa750c4ab6a66aa646bdd95d7cd548a#diff-e81fc111b2052e306d126bd9989f7b7c | "   https://github.com/jakar/vim-json/commit/20b650e22aa750c4ab6a66aa646bdd95d7cd548a#diff-e81fc111b2052e306d126bd9989f7b7c | ||||||
| " Original Author:	Rogerz Zhang <rogerz.zhang at gmail.com> http://github.com/rogerz/vim-json | " Original Author:	Rogerz Zhang <rogerz.zhang at gmail.com> http://github.com/rogerz/vim-json | ||||||
| " Acknowledgement:      Based off of vim-javascript maintained by Darrick Wiebe  | " Acknowledgement:      Based off of vim-javascript maintained by Darrick Wiebe  | ||||||
| @@ -141,7 +141,7 @@ function GetJSONIndent() | |||||||
|  |  | ||||||
|   " If the previous line ended with a block opening, add a level of indent. |   " If the previous line ended with a block opening, add a level of indent. | ||||||
|   " if s:Match(lnum, s:block_regex) |   " if s:Match(lnum, s:block_regex) | ||||||
|     " return indent(lnum) + &sw |     " return indent(lnum) + shiftwidth() | ||||||
|   " endif |   " endif | ||||||
|  |  | ||||||
|   " If the previous line contained an opening bracket, and we are still in it, |   " If the previous line contained an opening bracket, and we are still in it, | ||||||
| @@ -149,7 +149,7 @@ function GetJSONIndent() | |||||||
|   if line =~ '[[({]' |   if line =~ '[[({]' | ||||||
|     let counts = s:LineHasOpeningBrackets(lnum) |     let counts = s:LineHasOpeningBrackets(lnum) | ||||||
|     if counts[0] == '1' || counts[1] == '1' || counts[2] == '1' |     if counts[0] == '1' || counts[1] == '1' || counts[2] == '1' | ||||||
|       return ind + &sw |       return ind + shiftwidth() | ||||||
|     else |     else | ||||||
|       call cursor(v:lnum, vcol) |       call cursor(v:lnum, vcol) | ||||||
|     end |     end | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| " Vim indent file | " Vim indent file | ||||||
| " Language:     Liquid | " Language:     Liquid | ||||||
| " Maintainer:   Tim Pope <vimNOSPAM@tpope.org> | " Maintainer:   Tim Pope <vimNOSPAM@tpope.org> | ||||||
| " Last Change:	2016 Aug 29 | " Last Change:	2017 Jun 13 | ||||||
|  |  | ||||||
| if exists('b:did_indent') | if exists('b:did_indent') | ||||||
|   finish |   finish | ||||||
| @@ -54,7 +54,7 @@ function! GetLiquidIndent(...) | |||||||
|   let line  = substitute(line,'\C^\%(\s*{%\s*end\w*\s*%}\)\+','','') |   let line  = substitute(line,'\C^\%(\s*{%\s*end\w*\s*%}\)\+','','') | ||||||
|   let line .= matchstr(cline,'\C^\%(\s*{%\s*end\w*\s*%}\)\+') |   let line .= matchstr(cline,'\C^\%(\s*{%\s*end\w*\s*%}\)\+') | ||||||
|   let cline = substitute(cline,'\C^\%(\s*{%\s*end\w*\s*%}\)\+','','') |   let cline = substitute(cline,'\C^\%(\s*{%\s*end\w*\s*%}\)\+','','') | ||||||
|   let sw = exists('*shiftwidth') ? shiftwidth() : &sw |   let sw = shiftwidth() | ||||||
|   let ind += sw * s:count(line,'{%\s*\%(if\|elsif\|else\|unless\|ifchanged\|case\|when\|for\|empty\|tablerow\|capture\)\>') |   let ind += sw * s:count(line,'{%\s*\%(if\|elsif\|else\|unless\|ifchanged\|case\|when\|for\|empty\|tablerow\|capture\)\>') | ||||||
|   let ind -= sw * s:count(line,'{%\s*end\%(if\|unless\|ifchanged\|case\|for\|tablerow\|capture\)\>') |   let ind -= sw * s:count(line,'{%\s*end\%(if\|unless\|ifchanged\|case\|for\|tablerow\|capture\)\>') | ||||||
|   let ind -= sw * s:count(cline,'{%\s*\%(elsif\|else\|when\|empty\)\>') |   let ind -= sw * s:count(cline,'{%\s*\%(elsif\|else\|when\|empty\)\>') | ||||||
|   | |||||||
| @@ -38,24 +38,24 @@ function! GetLogtalkIndent() | |||||||
| 	endif | 	endif | ||||||
| 	" Check for entity opening directive on previous line | 	" Check for entity opening directive on previous line | ||||||
| 	if pline =~ '^\s*:-\s\(object\|protocol\|category\)\ze(.*,$' | 	if pline =~ '^\s*:-\s\(object\|protocol\|category\)\ze(.*,$' | ||||||
| 		let ind = ind + &sw | 		let ind = ind + shiftwidth() | ||||||
| 	" Check for clause head on previous line | 	" Check for clause head on previous line | ||||||
| 	elseif pline =~ ':-\s*\(%.*\)\?$' | 	elseif pline =~ ':-\s*\(%.*\)\?$' | ||||||
| 		let ind = ind + &sw | 		let ind = ind + shiftwidth() | ||||||
| 	" Check for entity closing directive on previous line | 	" Check for entity closing directive on previous line | ||||||
| 	elseif pline =~ '^\s*:-\send_\(object\|protocol\|category\)\.\(%.*\)\?$' | 	elseif pline =~ '^\s*:-\send_\(object\|protocol\|category\)\.\(%.*\)\?$' | ||||||
| 		let ind = ind - &sw | 		let ind = ind - shiftwidth() | ||||||
| 	" Check for end of clause on previous line | 	" Check for end of clause on previous line | ||||||
| 	elseif pline =~ '\.\s*\(%.*\)\?$' | 	elseif pline =~ '\.\s*\(%.*\)\?$' | ||||||
| 		let ind = ind - &sw | 		let ind = ind - shiftwidth() | ||||||
| 	endif | 	endif | ||||||
| 	" Check for opening conditional on previous line | 	" Check for opening conditional on previous line | ||||||
| 	if pline =~ '^\s*\([(;]\|->\)' && pline !~ '\.\s*\(%.*\)\?$' && pline !~ '^.*\([)][,]\s*\(%.*\)\?$\)' | 	if pline =~ '^\s*\([(;]\|->\)' && pline !~ '\.\s*\(%.*\)\?$' && pline !~ '^.*\([)][,]\s*\(%.*\)\?$\)' | ||||||
| 		let ind = ind + &sw | 		let ind = ind + shiftwidth() | ||||||
| 	endif | 	endif | ||||||
| 	" Check for closing an unclosed paren, or middle ; or -> | 	" Check for closing an unclosed paren, or middle ; or -> | ||||||
| 	if line =~ '^\s*\([);]\|->\)' | 	if line =~ '^\s*\([);]\|->\)' | ||||||
| 		let ind = ind - &sw | 		let ind = ind - shiftwidth() | ||||||
| 	endif | 	endif | ||||||
| 	return ind | 	return ind | ||||||
| endfunction | endfunction | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| " Language:	Lua script | " Language:	Lua script | ||||||
| " Maintainer:	Marcus Aurelius Farias <marcus.cf 'at' bol.com.br> | " Maintainer:	Marcus Aurelius Farias <marcus.cf 'at' bol.com.br> | ||||||
| " First Author:	Max Ischenko <mfi 'at' ukr.net> | " First Author:	Max Ischenko <mfi 'at' ukr.net> | ||||||
| " Last Change:	2016 Jan 10 | " Last Change:	2017 Jun 13 | ||||||
|  |  | ||||||
| " Only load this indent file when no other was loaded. | " Only load this indent file when no other was loaded. | ||||||
| if exists("b:did_indent") | if exists("b:did_indent") | ||||||
| @@ -48,7 +48,7 @@ function! GetLuaIndent() | |||||||
|     " Add 'shiftwidth' if what we found previously is not in a comment and |     " Add 'shiftwidth' if what we found previously is not in a comment and | ||||||
|     " an "end" or "until" is not present on the same line. |     " an "end" or "until" is not present on the same line. | ||||||
|     if synIDattr(synID(prevlnum, midx + 1, 1), "name") != "luaComment" && prevline !~ '\<end\>\|\<until\>' |     if synIDattr(synID(prevlnum, midx + 1, 1), "name") != "luaComment" && prevline !~ '\<end\>\|\<until\>' | ||||||
|       let ind = ind + &shiftwidth |       let ind = ind + shiftwidth() | ||||||
|     endif |     endif | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
| @@ -56,7 +56,7 @@ function! GetLuaIndent() | |||||||
|   " This is the part that requires 'indentkeys'. |   " This is the part that requires 'indentkeys'. | ||||||
|   let midx = match(getline(v:lnum), '^\s*\%(end\>\|else\>\|elseif\>\|until\>\|}\)') |   let midx = match(getline(v:lnum), '^\s*\%(end\>\|else\>\|elseif\>\|until\>\|}\)') | ||||||
|   if midx != -1 && synIDattr(synID(v:lnum, midx + 1, 1), "name") != "luaComment" |   if midx != -1 && synIDattr(synID(v:lnum, midx + 1, 1), "name") != "luaComment" | ||||||
|     let ind = ind - &shiftwidth |     let ind = ind - shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   return ind |   return ind | ||||||
|   | |||||||
| @@ -44,9 +44,9 @@ function GetMatlabIndent(lnum) | |||||||
|     " See if this line does not follow the line right after an openblock |     " See if this line does not follow the line right after an openblock | ||||||
|     if getline(plnum) =~ '^\s*\(for\|if\|else\|elseif\|case\|while\|switch\|try\|otherwise\|catch\)\>' |     if getline(plnum) =~ '^\s*\(for\|if\|else\|elseif\|case\|while\|switch\|try\|otherwise\|catch\)\>' | ||||||
|     " See if the user has already dedented |     " See if the user has already dedented | ||||||
|     elseif indent(v:lnum) > curind - &sw |     elseif indent(v:lnum) > curind - shiftwidth() | ||||||
|       " If not, recommend one dedent |       " If not, recommend one dedent | ||||||
| 	let curind = curind - &sw | 	let curind = curind - shiftwidth() | ||||||
|     else |     else | ||||||
|       " Otherwise, trust the user |       " Otherwise, trust the user | ||||||
|       return -1 |       return -1 | ||||||
| @@ -56,9 +56,9 @@ function GetMatlabIndent(lnum) | |||||||
|   " If the previous line opened a block |   " If the previous line opened a block | ||||||
|   elseif getline(plnum) =~ '^\s*\(for\|if\|else\|elseif\|case\|while\|switch\|try\|otherwise\|catch\)\>' |   elseif getline(plnum) =~ '^\s*\(for\|if\|else\|elseif\|case\|while\|switch\|try\|otherwise\|catch\)\>' | ||||||
|     " See if the user has already indented |     " See if the user has already indented | ||||||
|     if indent(v:lnum) < curind + &sw |     if indent(v:lnum) < curind + shiftwidth() | ||||||
|       "If not, recommend indent |       "If not, recommend indent | ||||||
|       let curind = curind + &sw |       let curind = curind + shiftwidth() | ||||||
|     else |     else | ||||||
|       " Otherwise, trust the user |       " Otherwise, trust the user | ||||||
|       return -1 |       return -1 | ||||||
|   | |||||||
| @@ -49,7 +49,7 @@ function GetMmaIndent() | |||||||
|     " also, indent only if this line if this line isn't starting a new |     " also, indent only if this line if this line isn't starting a new | ||||||
|     " block... TODO - fix this with indentkeys? |     " block... TODO - fix this with indentkeys? | ||||||
|     if getline(v:lnum-1) =~ '\\\@<!\%(\[[^\]]*\|([^)]*\|{[^}]*\)$' && getline(v:lnum) !~ '\s\+[\[({]' |     if getline(v:lnum-1) =~ '\\\@<!\%(\[[^\]]*\|([^)]*\|{[^}]*\)$' && getline(v:lnum) !~ '\s\+[\[({]' | ||||||
|         let ind = ind+&sw |         let ind = ind+shiftwidth() | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|     " if this line had unmatched closing block, |     " if this line had unmatched closing block, | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
| "               Mike Leary           <leary@nwlink.com> | "               Mike Leary           <leary@nwlink.com> | ||||||
| "               Markus Mottl         <markus.mottl@gmail.com> | "               Markus Mottl         <markus.mottl@gmail.com> | ||||||
| " URL:          http://www.ocaml.info/vim/indent/ocaml.vim | " URL:          http://www.ocaml.info/vim/indent/ocaml.vim | ||||||
| " Last Change:  2013 Jun 29 | " Last Change:  2017 Jun 13 | ||||||
| "               2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working | "               2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working | ||||||
| "               2005 May 09 - Added an option to not indent OCaml-indents specially (MM) | "               2005 May 09 - Added an option to not indent OCaml-indents specially (MM) | ||||||
| "               2013 June   - commented textwidth (Marc Weber) | "               2013 June   - commented textwidth (Marc Weber) | ||||||
| @@ -101,7 +101,7 @@ function! GetOCamlIndent() | |||||||
|  |  | ||||||
|  " Return double 'shiftwidth' after lines matching: |  " Return double 'shiftwidth' after lines matching: | ||||||
|  if lline =~ '^\s*|.*->\s*$' |  if lline =~ '^\s*|.*->\s*$' | ||||||
|    return ind + &sw + &sw |    return ind + 2 * shiftwidth() | ||||||
|  endif |  endif | ||||||
|  |  | ||||||
|  let line = getline(v:lnum) |  let line = getline(v:lnum) | ||||||
| @@ -172,7 +172,7 @@ function! GetOCamlIndent() | |||||||
|  " Indent if current line begins with 'and': |  " Indent if current line begins with 'and': | ||||||
|  elseif line =~ '^\s*and\>' |  elseif line =~ '^\s*and\>' | ||||||
|    if lline !~ '^\s*\(and\|let\|type\)\>\|\<end\s*$' |    if lline !~ '^\s*\(and\|let\|type\)\>\|\<end\s*$' | ||||||
|      return ind - &sw |      return ind - shiftwidth() | ||||||
|    endif |    endif | ||||||
|  |  | ||||||
|  " Indent if current line begins with 'with': |  " Indent if current line begins with 'with': | ||||||
| @@ -199,14 +199,14 @@ function! GetOCamlIndent() | |||||||
|  " or 'method': |  " or 'method': | ||||||
|  elseif line =~ '^\s*\(constraint\|inherit\|initializer\|method\)\>' |  elseif line =~ '^\s*\(constraint\|inherit\|initializer\|method\)\>' | ||||||
|    if lline !~ s:obj |    if lline !~ s:obj | ||||||
|      return indent(search('\<\(object\|object\s*(.*)\)\s*$', 'bW')) + &sw |      return indent(search('\<\(object\|object\s*(.*)\)\s*$', 'bW')) + shiftwidth() | ||||||
|    endif |    endif | ||||||
|  |  | ||||||
|  endif |  endif | ||||||
|  |  | ||||||
|  " Add a 'shiftwidth' after lines ending with: |  " Add a 'shiftwidth' after lines ending with: | ||||||
|  if lline =~ '\(:\|=\|->\|<-\|(\|\[\|{\|{<\|\[|\|\[<\|\<\(begin\|do\|else\|fun\|function\|functor\|if\|initializer\|object\|parser\|private\|sig\|struct\|then\|try\)\|\<object\s*(.*)\)\s*$' |  if lline =~ '\(:\|=\|->\|<-\|(\|\[\|{\|{<\|\[|\|\[<\|\<\(begin\|do\|else\|fun\|function\|functor\|if\|initializer\|object\|parser\|private\|sig\|struct\|then\|try\)\|\<object\s*(.*)\)\s*$' | ||||||
|    let ind = ind + &sw |    let ind = ind + shiftwidth() | ||||||
|  |  | ||||||
|  " Back to normal indent after lines ending with ';;': |  " Back to normal indent after lines ending with ';;': | ||||||
|  elseif lline =~ ';;\s*$' && lline !~ '^\s*;;' |  elseif lline =~ ';;\s*$' && lline !~ '^\s*;;' | ||||||
| @@ -263,7 +263,7 @@ function! GetOCamlIndent() | |||||||
|  |  | ||||||
|  " Subtract a 'shiftwidth' after lines matching 'match ... with parser': |  " Subtract a 'shiftwidth' after lines matching 'match ... with parser': | ||||||
|  if lline =~ '\<match\>.*\<with\>\s*\<parser\s*$' |  if lline =~ '\<match\>.*\<with\>\s*\<parser\s*$' | ||||||
|    let ind = ind - &sw |    let ind = ind - shiftwidth() | ||||||
|  endif |  endif | ||||||
|  |  | ||||||
|  return ind |  return ind | ||||||
|   | |||||||
| @@ -131,7 +131,7 @@ function GetOccamIndent() | |||||||
|   if line =~ s:FirstLevelIndent || (line =~ s:FirstLevelNonColonEndIndent && line !~ s:ColonEnd) |   if line =~ s:FirstLevelIndent || (line =~ s:FirstLevelNonColonEndIndent && line !~ s:ColonEnd) | ||||||
| 	\ || (line !~ s:ColonStart && (prevline =~ s:SecondLevelIndent | 	\ || (line !~ s:ColonStart && (prevline =~ s:SecondLevelIndent | ||||||
| 	\ || (prevline =~ s:SecondLevelNonColonEndIndent && prevline !~ s:ColonEnd))) | 	\ || (prevline =~ s:SecondLevelNonColonEndIndent && prevline !~ s:ColonEnd))) | ||||||
|     let curindent = curindent + &shiftwidth |     let curindent = curindent + shiftwidth() | ||||||
|  |  | ||||||
|     " Restore magic |     " Restore magic | ||||||
|     if !save_magic|setlocal nomagic|endif |     if !save_magic|setlocal nomagic|endif | ||||||
| @@ -153,7 +153,7 @@ function GetOccamIndent() | |||||||
|  |  | ||||||
|   while !found |   while !found | ||||||
|  |  | ||||||
|     if indent(prevlinenum) == curindent - &shiftwidth |     if indent(prevlinenum) == curindent - shiftwidth() | ||||||
|       let found = 1 |       let found = 1 | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
| @@ -171,7 +171,7 @@ function GetOccamIndent() | |||||||
|  |  | ||||||
|   if prevlinenum > 0 |   if prevlinenum > 0 | ||||||
|     if getline(prevlinenum) =~ s:SecondLevelIndent |     if getline(prevlinenum) =~ s:SecondLevelIndent | ||||||
|       let curindent = curindent + &shiftwidth |       let curindent = curindent + shiftwidth() | ||||||
|     endif |     endif | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| " Language:    Pascal | " Language:    Pascal | ||||||
| " Maintainer:  Neil Carter <n.carter@swansea.ac.uk> | " Maintainer:  Neil Carter <n.carter@swansea.ac.uk> | ||||||
| " Created:     2004 Jul 13 | " Created:     2004 Jul 13 | ||||||
| " Last Change: 2011 Apr 01 | " Last Change: 2017 Jun 13 | ||||||
| " | " | ||||||
| " This is version 2.0, a complete rewrite. | " This is version 2.0, a complete rewrite. | ||||||
| " | " | ||||||
| @@ -102,12 +102,12 @@ function! GetPascalIndent( line_num ) | |||||||
|  |  | ||||||
| 	" If the PREVIOUS LINE ended in these items, always indent | 	" If the PREVIOUS LINE ended in these items, always indent | ||||||
| 	if prev_codeline =~ '\<\(type\|const\|var\)$' | 	if prev_codeline =~ '\<\(type\|const\|var\)$' | ||||||
| 		return indnt + &shiftwidth | 		return indnt + shiftwidth() | ||||||
| 	endif | 	endif | ||||||
|  |  | ||||||
| 	if prev_codeline =~ '\<repeat$' | 	if prev_codeline =~ '\<repeat$' | ||||||
| 		if this_codeline !~ '^\s*until\>' | 		if this_codeline !~ '^\s*until\>' | ||||||
| 			return indnt + &shiftwidth | 			return indnt + shiftwidth() | ||||||
| 		else | 		else | ||||||
| 			return indnt | 			return indnt | ||||||
| 		endif | 		endif | ||||||
| @@ -115,7 +115,7 @@ function! GetPascalIndent( line_num ) | |||||||
|  |  | ||||||
| 	if prev_codeline =~ '\<\(begin\|record\)$' | 	if prev_codeline =~ '\<\(begin\|record\)$' | ||||||
| 		if this_codeline !~ '^\s*end\>' | 		if this_codeline !~ '^\s*end\>' | ||||||
| 			return indnt + &shiftwidth | 			return indnt + shiftwidth() | ||||||
| 		else | 		else | ||||||
| 			return indnt | 			return indnt | ||||||
| 		endif | 		endif | ||||||
| @@ -125,10 +125,10 @@ function! GetPascalIndent( line_num ) | |||||||
| 	" followed by "begin" | 	" followed by "begin" | ||||||
| 	if prev_codeline =~ '\<\(\|else\|then\|do\)$' || prev_codeline =~ ':$' | 	if prev_codeline =~ '\<\(\|else\|then\|do\)$' || prev_codeline =~ ':$' | ||||||
| 		if this_codeline !~ '^\s*begin\>' | 		if this_codeline !~ '^\s*begin\>' | ||||||
| 			return indnt + &shiftwidth | 			return indnt + shiftwidth() | ||||||
| 		else | 		else | ||||||
| 			" If it does start with "begin" then keep the same indent | 			" If it does start with "begin" then keep the same indent | ||||||
| 			"return indnt + &shiftwidth | 			"return indnt + shiftwidth() | ||||||
| 			return indnt | 			return indnt | ||||||
| 		endif | 		endif | ||||||
| 	endif | 	endif | ||||||
| @@ -137,7 +137,7 @@ function! GetPascalIndent( line_num ) | |||||||
| 	" only the line before the current one. TODO: Get it working for | 	" only the line before the current one. TODO: Get it working for | ||||||
| 	" parameter lists longer than two lines. | 	" parameter lists longer than two lines. | ||||||
| 	if prev_codeline =~ '([^)]\+$' | 	if prev_codeline =~ '([^)]\+$' | ||||||
| 		return indnt + &shiftwidth | 		return indnt + shiftwidth() | ||||||
| 	endif | 	endif | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -146,7 +146,7 @@ function! GetPascalIndent( line_num ) | |||||||
| 	" Lines starting with "else", but not following line ending with | 	" Lines starting with "else", but not following line ending with | ||||||
| 	" "end". | 	" "end". | ||||||
| 	if this_codeline =~ '^\s*else\>' && prev_codeline !~ '\<end$' | 	if this_codeline =~ '^\s*else\>' && prev_codeline !~ '\<end$' | ||||||
| 		return indnt - &shiftwidth | 		return indnt - shiftwidth() | ||||||
| 	endif | 	endif | ||||||
|  |  | ||||||
| 	" Lines after a single-statement branch/loop. | 	" Lines after a single-statement branch/loop. | ||||||
| @@ -160,16 +160,16 @@ function! GetPascalIndent( line_num ) | |||||||
| 		" additional unindentation. | 		" additional unindentation. | ||||||
| 		if this_codeline =~ '^\s*\(end;\|except\|finally\|\)$' | 		if this_codeline =~ '^\s*\(end;\|except\|finally\|\)$' | ||||||
| 			" Note that we don't return from here. | 			" Note that we don't return from here. | ||||||
| 			return indnt - &shiftwidth - &shiftwidth | 			return indnt - 2 * shiftwidth() | ||||||
| 		endif | 		endif | ||||||
| 		return indnt - &shiftwidth | 		return indnt - shiftwidth() | ||||||
| 	endif | 	endif | ||||||
|  |  | ||||||
| 	" Lines starting with "until" or "end". This rule must be overridden | 	" Lines starting with "until" or "end". This rule must be overridden | ||||||
| 	" by the one for "end" after a single-statement branch/loop. In | 	" by the one for "end" after a single-statement branch/loop. In | ||||||
| 	" other words that rule should come before this one. | 	" other words that rule should come before this one. | ||||||
| 	if this_codeline =~ '^\s*\(end\|until\)\>' | 	if this_codeline =~ '^\s*\(end\|until\)\>' | ||||||
| 		return indnt - &shiftwidth | 		return indnt - shiftwidth() | ||||||
| 	endif | 	endif | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -201,7 +201,7 @@ function! GetPascalIndent( line_num ) | |||||||
|  |  | ||||||
| 	" If the PREVIOUS LINE ended in these items, always indent. | 	" If the PREVIOUS LINE ended in these items, always indent. | ||||||
| 	if prev_codeline =~ '^\s*\(unit\|uses\|try\|except\|finally\|private\|protected\|public\|published\)$' | 	if prev_codeline =~ '^\s*\(unit\|uses\|try\|except\|finally\|private\|protected\|public\|published\)$' | ||||||
| 		return indnt + &shiftwidth | 		return indnt + shiftwidth() | ||||||
| 	endif | 	endif | ||||||
|  |  | ||||||
| 	" ???? Indent "procedure" and "functions" if they appear within an | 	" ???? Indent "procedure" and "functions" if they appear within an | ||||||
| @@ -212,11 +212,11 @@ function! GetPascalIndent( line_num ) | |||||||
| 	" UNINDENT ONCE | 	" UNINDENT ONCE | ||||||
|  |  | ||||||
| 	if this_codeline =~ '^\s*\(except\|finally\)$' | 	if this_codeline =~ '^\s*\(except\|finally\)$' | ||||||
| 		return indnt - &shiftwidth | 		return indnt - shiftwidth() | ||||||
| 	endif | 	endif | ||||||
|  |  | ||||||
| 	if this_codeline =~ '^\s*\(private\|protected\|public\|published\)$' | 	if this_codeline =~ '^\s*\(private\|protected\|public\|published\)$' | ||||||
| 		return indnt - &shiftwidth | 		return indnt - shiftwidth() | ||||||
| 	endif | 	endif | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ | |||||||
| " Maintainer:    vim-perl <vim-perl@googlegroups.com> | " Maintainer:    vim-perl <vim-perl@googlegroups.com> | ||||||
| " Homepage:      http://github.com/vim-perl/vim-perl | " Homepage:      http://github.com/vim-perl/vim-perl | ||||||
| " Bugs/requests: http://github.com/vim-perl/vim-perl/issues | " Bugs/requests: http://github.com/vim-perl/vim-perl/issues | ||||||
| " Last Change:   2013-07-24 | " Last Change:   2017 Jun 13 | ||||||
|  |  | ||||||
| " Suggestions and improvements by : | " Suggestions and improvements by : | ||||||
| "   Aaron J. Sherman (use syntax for hints) | "   Aaron J. Sherman (use syntax for hints) | ||||||
| @@ -138,9 +138,9 @@ function! GetPerlIndent() | |||||||
|                         \ || synid =~ '^perl\(Sub\|Block\|Package\)Fold' |                         \ || synid =~ '^perl\(Sub\|Block\|Package\)Fold' | ||||||
|                 let brace = strpart(line, bracepos, 1) |                 let brace = strpart(line, bracepos, 1) | ||||||
|                 if brace == '(' || brace == '{' || brace == '[' |                 if brace == '(' || brace == '{' || brace == '[' | ||||||
|                     let ind = ind + &sw |                     let ind = ind + shiftwidth() | ||||||
|                 else |                 else | ||||||
|                     let ind = ind - &sw |                     let ind = ind - shiftwidth() | ||||||
|                 endif |                 endif | ||||||
|             endif |             endif | ||||||
|             let bracepos = match(line, braceclass, bracepos + 1) |             let bracepos = match(line, braceclass, bracepos + 1) | ||||||
| @@ -152,25 +152,25 @@ function! GetPerlIndent() | |||||||
|                         \ || synid == "perlMatchStartEnd" |                         \ || synid == "perlMatchStartEnd" | ||||||
|                         \ || synid == "perlBraces" |                         \ || synid == "perlBraces" | ||||||
|                         \ || synid =~ '^perl\(Sub\|Block\|Package\)Fold' |                         \ || synid =~ '^perl\(Sub\|Block\|Package\)Fold' | ||||||
|                 let ind = ind - &sw |                 let ind = ind - shiftwidth() | ||||||
|             endif |             endif | ||||||
|         endif |         endif | ||||||
|     else |     else | ||||||
|         if line =~ '[{[(]\s*\(#[^])}]*\)\=$' |         if line =~ '[{[(]\s*\(#[^])}]*\)\=$' | ||||||
|             let ind = ind + &sw |             let ind = ind + shiftwidth() | ||||||
|         endif |         endif | ||||||
|         if cline =~ '^\s*[])}]' |         if cline =~ '^\s*[])}]' | ||||||
|             let ind = ind - &sw |             let ind = ind - shiftwidth() | ||||||
|         endif |         endif | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|     " Indent lines that begin with 'or' or 'and' |     " Indent lines that begin with 'or' or 'and' | ||||||
|     if cline =~ '^\s*\(or\|and\)\>' |     if cline =~ '^\s*\(or\|and\)\>' | ||||||
|         if line !~ '^\s*\(or\|and\)\>' |         if line !~ '^\s*\(or\|and\)\>' | ||||||
|             let ind = ind + &sw |             let ind = ind + shiftwidth() | ||||||
|         endif |         endif | ||||||
|     elseif line =~ '^\s*\(or\|and\)\>' |     elseif line =~ '^\s*\(or\|and\)\>' | ||||||
|         let ind = ind - &sw |         let ind = ind - shiftwidth() | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|     return ind |     return ind | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ | |||||||
| " Maintainer:    vim-perl <vim-perl@googlegroups.com> | " Maintainer:    vim-perl <vim-perl@googlegroups.com> | ||||||
| " Homepage:      http://github.com/vim-perl/vim-perl | " Homepage:      http://github.com/vim-perl/vim-perl | ||||||
| " Bugs/requests: http://github.com/vim-perl/vim-perl/issues | " Bugs/requests: http://github.com/vim-perl/vim-perl/issues | ||||||
| " Last Change:   2013-07-21 | " Last Change:   2017 Jun 13 | ||||||
| " Contributors:  Andy Lester <andy@petdance.com> | " Contributors:  Andy Lester <andy@petdance.com> | ||||||
| "                Hinrik Örn Sigurðsson <hinrik.sig@gmail.com> | "                Hinrik Örn Sigurðsson <hinrik.sig@gmail.com> | ||||||
| " | " | ||||||
| @@ -107,19 +107,19 @@ function! GetPerl6Indent() | |||||||
|     endif |     endif | ||||||
|  |  | ||||||
|         if line =~ '[<«\[{(]\s*\(#[^)}\]»>]*\)\=$' |         if line =~ '[<«\[{(]\s*\(#[^)}\]»>]*\)\=$' | ||||||
|             let ind = ind + &sw |             let ind = ind + shiftwidth() | ||||||
|         endif |         endif | ||||||
|         if cline =~ '^\s*[)}\]»>]' |         if cline =~ '^\s*[)}\]»>]' | ||||||
|             let ind = ind - &sw |             let ind = ind - shiftwidth() | ||||||
|         endif |         endif | ||||||
|  |  | ||||||
|     " Indent lines that begin with 'or' or 'and' |     " Indent lines that begin with 'or' or 'and' | ||||||
|     if cline =~ '^\s*\(or\|and\)\>' |     if cline =~ '^\s*\(or\|and\)\>' | ||||||
|         if line !~ '^\s*\(or\|and\)\>' |         if line !~ '^\s*\(or\|and\)\>' | ||||||
|             let ind = ind + &sw |             let ind = ind + shiftwidth() | ||||||
|         endif |         endif | ||||||
|     elseif line =~ '^\s*\(or\|and\)\>' |     elseif line =~ '^\s*\(or\|and\)\>' | ||||||
|         let ind = ind - &sw |         let ind = ind - shiftwidth() | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|     return ind |     return ind | ||||||
|   | |||||||
| @@ -3,8 +3,8 @@ | |||||||
| " Author:	John Wellesz <John.wellesz (AT) teaser (DOT) fr> | " Author:	John Wellesz <John.wellesz (AT) teaser (DOT) fr> | ||||||
| " URL:		http://www.2072productions.com/vim/indent/php.vim | " URL:		http://www.2072productions.com/vim/indent/php.vim | ||||||
| " Home:		https://github.com/2072/PHP-Indenting-for-VIm | " Home:		https://github.com/2072/PHP-Indenting-for-VIm | ||||||
| " Last Change:	2015 September 8th | " Last Change:	2017 Jun 13 | ||||||
| " Version:	1.60 | " Version:	1.62 | ||||||
| " | " | ||||||
| " | " | ||||||
| "	Type :help php-indent for available options | "	Type :help php-indent for available options | ||||||
| @@ -50,25 +50,15 @@ let b:did_indent = 1 | |||||||
|  |  | ||||||
| let g:php_sync_method = 0 | let g:php_sync_method = 0 | ||||||
|  |  | ||||||
| if exists('*shiftwidth') |  | ||||||
|   function! s:sw() |  | ||||||
|     return shiftwidth() |  | ||||||
|   endfunction |  | ||||||
| else |  | ||||||
|   function! s:sw() |  | ||||||
|     return &shiftwidth |  | ||||||
|   endfunction |  | ||||||
| endif |  | ||||||
|  |  | ||||||
|  |  | ||||||
| if exists("PHP_default_indenting") | if exists("PHP_default_indenting") | ||||||
|     let b:PHP_default_indenting = PHP_default_indenting * s:sw() |     let b:PHP_default_indenting = PHP_default_indenting * shiftwidth() | ||||||
| else | else | ||||||
|     let b:PHP_default_indenting = 0 |     let b:PHP_default_indenting = 0 | ||||||
| endif | endif | ||||||
|  |  | ||||||
| if exists("PHP_outdentSLComments") | if exists("PHP_outdentSLComments") | ||||||
|     let b:PHP_outdentSLComments = PHP_outdentSLComments * s:sw() |     let b:PHP_outdentSLComments = PHP_outdentSLComments * shiftwidth() | ||||||
| else | else | ||||||
|     let b:PHP_outdentSLComments = 0 |     let b:PHP_outdentSLComments = 0 | ||||||
| endif | endif | ||||||
| @@ -141,11 +131,13 @@ let s:PHP_validVariable = '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*' | |||||||
| let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\|die\|else\)' | let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\|die\|else\)' | ||||||
| let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|\%(}\s*\)\?else\>\|do\>\|while\>\|switch\>\|case\>\|default\>\|for\%(each\)\=\>\|declare\>\|class\>\|trait\>\|use\>\|interface\>\|abstract\>\|final\>\|try\>\|\%(}\s*\)\=catch\>\|\%(}\s*\)\=finally\>\)' | let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|\%(}\s*\)\?else\>\|do\>\|while\>\|switch\>\|case\>\|default\>\|for\%(each\)\=\>\|declare\>\|class\>\|trait\>\|use\>\|interface\>\|abstract\>\|final\>\|try\>\|\%(}\s*\)\=catch\>\|\%(}\s*\)\=finally\>\)' | ||||||
| let s:functionDecl = '\<function\>\%(\s\+'.s:PHP_validVariable.'\)\=\s*(.*' | let s:functionDecl = '\<function\>\%(\s\+'.s:PHP_validVariable.'\)\=\s*(.*' | ||||||
| let s:endline= '\s*\%(//.*\|#.*\|/\*.*\*/\s*\)\=$' | let s:endline = '\s*\%(//.*\|#.*\|/\*.*\*/\s*\)\=$' | ||||||
|  | let s:unstated = '\%(^\s*'.s:blockstart.'.*)\|\%(//.*\)\@<!\<e'.'lse\>\)'.s:endline | ||||||
|  |  | ||||||
|  |  | ||||||
| let s:terminated = '\%(\%(;\%(\s*\%(?>\|}\)\)\=\|<<<\s*[''"]\=\a\w*[''"]\=$\|^\s*}\|^\s*'.s:PHP_validVariable.':\)'.s:endline.'\)\|^[^''"`]*[''"`]$' | let s:terminated = '\%(\%(;\%(\s*\%(?>\|}\)\)\=\|<<<\s*[''"]\=\a\w*[''"]\=$\|^\s*}\|^\s*'.s:PHP_validVariable.':\)'.s:endline.'\)' | ||||||
| let s:PHP_startindenttag = '<?\%(.*?>\)\@!\|<script[^>]*>\%(.*<\/script>\)\@!' | let s:PHP_startindenttag = '<?\%(.*?>\)\@!\|<script[^>]*>\%(.*<\/script>\)\@!' | ||||||
|  | let s:structureHead = '^\s*\%(' . s:blockstart . '\)\|'. s:functionDecl . s:endline . '\|\<new\s\+class\>' | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -214,10 +206,28 @@ function! GetLastRealCodeLNum(startline) " {{{ | |||||||
| 		let lnum = lnum - 1 | 		let lnum = lnum - 1 | ||||||
| 	    endwhile | 	    endwhile | ||||||
| 	elseif lastline =~ '^[^''"`]*[''"`][;,]'.s:endline | 	elseif lastline =~ '^[^''"`]*[''"`][;,]'.s:endline | ||||||
| 	    let tofind=substitute( lastline, '^.*\([''"`]\)[;,].*$', '^[^\1]\\+[\1]$', '') |  | ||||||
| 	    while getline(lnum) !~? tofind && lnum > 1 | 	    let tofind=substitute( lastline, '^.*\([''"`]\)[;,].*$', '^[^\1]\\+[\1]$\\|^[^\1]\\+[=([]\\s*[\1]', '') | ||||||
| 		let lnum = lnum - 1 | 	    let trylnum = lnum | ||||||
|  | 	    while getline(trylnum) !~? tofind && trylnum > 1 | ||||||
|  | 		let trylnum = trylnum - 1 | ||||||
| 	    endwhile | 	    endwhile | ||||||
|  |  | ||||||
|  | 	    if trylnum == 1 | ||||||
|  | 		break | ||||||
|  | 	    else | ||||||
|  | 		if lastline =~ ';'.s:endline | ||||||
|  | 		    while getline(trylnum) !~? s:terminated && getline(trylnum) !~? '{'.s:endline && trylnum > 1 | ||||||
|  | 			let trylnum = prevnonblank(trylnum - 1) | ||||||
|  | 		    endwhile | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 		    if trylnum == 1 | ||||||
|  | 			break | ||||||
|  | 		    end | ||||||
|  | 		end | ||||||
|  | 		let lnum = trylnum | ||||||
|  | 	    end | ||||||
| 	else | 	else | ||||||
| 	    break | 	    break | ||||||
| 	endif | 	endif | ||||||
| @@ -262,7 +272,7 @@ function! FindOpenBracket(lnum, blockStarter) " {{{ | |||||||
| 	while line > 1 | 	while line > 1 | ||||||
| 	    let linec = getline(line) | 	    let linec = getline(line) | ||||||
|  |  | ||||||
| 	    if linec =~ s:terminated || linec =~ '^\s*\%(' . s:blockstart . '\)\|'. s:functionDecl . s:endline | 	    if linec =~ s:terminated || linec =~ s:structureHead | ||||||
| 		break | 		break | ||||||
| 	    endif | 	    endif | ||||||
|  |  | ||||||
| @@ -273,6 +283,20 @@ function! FindOpenBracket(lnum, blockStarter) " {{{ | |||||||
|     return line |     return line | ||||||
| endfun " }}} | endfun " }}} | ||||||
|  |  | ||||||
|  | let s:blockChars = {'{':1, '[': 1, '(': 1, ')':-1, ']':-1, '}':-1} | ||||||
|  | function! BalanceDirection (str) | ||||||
|  |  | ||||||
|  |     let balance = 0 | ||||||
|  |  | ||||||
|  |     for c in split(a:str, '\zs') | ||||||
|  | 	if has_key(s:blockChars, c) | ||||||
|  | 	    let balance += s:blockChars[c] | ||||||
|  | 	endif | ||||||
|  |     endfor | ||||||
|  |  | ||||||
|  |     return balance | ||||||
|  | endfun | ||||||
|  |  | ||||||
| function! FindTheIfOfAnElse (lnum, StopAfterFirstPrevElse) " {{{ | function! FindTheIfOfAnElse (lnum, StopAfterFirstPrevElse) " {{{ | ||||||
|  |  | ||||||
|     if getline(a:lnum) =~# '^\s*}\s*else\%(if\)\=\>' |     if getline(a:lnum) =~# '^\s*}\s*else\%(if\)\=\>' | ||||||
| @@ -323,7 +347,7 @@ function! FindTheSwitchIndent (lnum) " {{{ | |||||||
|     let test = GetLastRealCodeLNum(a:lnum - 1) |     let test = GetLastRealCodeLNum(a:lnum - 1) | ||||||
|  |  | ||||||
|     if test <= 1 |     if test <= 1 | ||||||
| 	return indent(1) - s:sw() * b:PHP_vintage_case_default_indent | 	return indent(1) - shiftwidth() * b:PHP_vintage_case_default_indent | ||||||
|     end |     end | ||||||
|  |  | ||||||
|     while getline(test) =~ '^\s*}' && test > 1 |     while getline(test) =~ '^\s*}' && test > 1 | ||||||
| @@ -337,7 +361,7 @@ function! FindTheSwitchIndent (lnum) " {{{ | |||||||
|     if getline(test) =~# '^\s*switch\>' |     if getline(test) =~# '^\s*switch\>' | ||||||
| 	return indent(test) | 	return indent(test) | ||||||
|     elseif getline(test) =~# s:defaultORcase |     elseif getline(test) =~# s:defaultORcase | ||||||
| 	return indent(test) - s:sw() * b:PHP_vintage_case_default_indent | 	return indent(test) - shiftwidth() * b:PHP_vintage_case_default_indent | ||||||
|     else |     else | ||||||
| 	return FindTheSwitchIndent(test) | 	return FindTheSwitchIndent(test) | ||||||
|     endif |     endif | ||||||
| @@ -410,7 +434,7 @@ function! GetPhpIndent() | |||||||
|     endif |     endif | ||||||
|  |  | ||||||
|     if b:PHP_default_indenting |     if b:PHP_default_indenting | ||||||
| 	let b:PHP_default_indenting = g:PHP_default_indenting * s:sw() | 	let b:PHP_default_indenting = g:PHP_default_indenting * shiftwidth() | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|     let cline = getline(v:lnum) |     let cline = getline(v:lnum) | ||||||
| @@ -457,7 +481,7 @@ function! GetPhpIndent() | |||||||
|  |  | ||||||
| 	if synname!="" | 	if synname!="" | ||||||
| 	    if synname == "SpecStringEntrails" | 	    if synname == "SpecStringEntrails" | ||||||
| 		let b:InPHPcode = -1 | 		let b:InPHPcode = -1 " thumb down | ||||||
| 		let b:InPHPcode_tofind = "" | 		let b:InPHPcode_tofind = "" | ||||||
| 	    elseif synname != "phpHereDoc" && synname != "phpHereDocDelimiter" | 	    elseif synname != "phpHereDoc" && synname != "phpHereDocDelimiter" | ||||||
| 		let b:InPHPcode = 1 | 		let b:InPHPcode = 1 | ||||||
| @@ -540,7 +564,7 @@ function! GetPhpIndent() | |||||||
| 		let b:InPHPcode_and_script = 1 | 		let b:InPHPcode_and_script = 1 | ||||||
| 	    endif | 	    endif | ||||||
|  |  | ||||||
| 	elseif last_line =~ '^[^''"`]\+[''"`]$' | 	elseif last_line =~ '^[^''"`]\+[''"`]$' " a string identifier with nothing after it and no other string identifier before | ||||||
| 	    let b:InPHPcode = -1 | 	    let b:InPHPcode = -1 | ||||||
| 	    let b:InPHPcode_tofind = substitute( last_line, '^.*\([''"`]\).*$', '^[^\1]*\1[;,]$', '') | 	    let b:InPHPcode_tofind = substitute( last_line, '^.*\([''"`]\).*$', '^[^\1]*\1[;,]$', '') | ||||||
| 	elseif last_line =~? '<<<\s*[''"]\=\a\w*[''"]\=$' | 	elseif last_line =~? '<<<\s*[''"]\=\a\w*[''"]\=$' | ||||||
| @@ -660,25 +684,26 @@ function! GetPhpIndent() | |||||||
|  |  | ||||||
|     let terminated = s:terminated |     let terminated = s:terminated | ||||||
|  |  | ||||||
|     let unstated   = '\%(^\s*'.s:blockstart.'.*)\|\%(//.*\)\@<!\<e'.'lse\>\)'.endline |     let unstated  = s:unstated | ||||||
|  |  | ||||||
|  |  | ||||||
|     if ind != b:PHP_default_indenting && cline =~# '^\s*else\%(if\)\=\>' |     if ind != b:PHP_default_indenting && cline =~# '^\s*else\%(if\)\=\>' | ||||||
| 	let b:PHP_CurrentIndentLevel = b:PHP_default_indenting | 	let b:PHP_CurrentIndentLevel = b:PHP_default_indenting | ||||||
| 	return indent(FindTheIfOfAnElse(v:lnum, 1)) | 	return indent(FindTheIfOfAnElse(v:lnum, 1)) | ||||||
|     elseif cline =~# s:defaultORcase |     elseif cline =~# s:defaultORcase | ||||||
| 	return FindTheSwitchIndent(v:lnum) + s:sw() * b:PHP_vintage_case_default_indent | 	return FindTheSwitchIndent(v:lnum) + shiftwidth() * b:PHP_vintage_case_default_indent | ||||||
|     elseif cline =~ '^\s*)\=\s*{' |     elseif cline =~ '^\s*)\=\s*{' | ||||||
| 	let previous_line = last_line | 	let previous_line = last_line | ||||||
| 	let last_line_num = lnum | 	let last_line_num = lnum | ||||||
|  |  | ||||||
| 	while last_line_num > 1 | 	while last_line_num > 1 | ||||||
|  |  | ||||||
| 	    if previous_line =~ terminated || previous_line =~ '^\s*\%(' . s:blockstart . '\)\|'. s:functionDecl . endline | 	    if previous_line =~ terminated || previous_line =~ s:structureHead | ||||||
|  |  | ||||||
| 		let ind = indent(last_line_num) | 		let ind = indent(last_line_num) | ||||||
|  |  | ||||||
| 		if  b:PHP_BracesAtCodeLevel | 		if  b:PHP_BracesAtCodeLevel | ||||||
| 		    let ind = ind + s:sw() | 		    let ind = ind + shiftwidth() | ||||||
| 		endif | 		endif | ||||||
|  |  | ||||||
| 		return ind | 		return ind | ||||||
| @@ -689,7 +714,7 @@ function! GetPhpIndent() | |||||||
| 	endwhile | 	endwhile | ||||||
|  |  | ||||||
|     elseif last_line =~# unstated && cline !~ '^\s*);\='.endline |     elseif last_line =~# unstated && cline !~ '^\s*);\='.endline | ||||||
| 	let ind = ind + s:sw() | 	let ind = ind + shiftwidth() " we indent one level further when the preceding line is not stated | ||||||
| 	return ind + addSpecial | 	return ind + addSpecial | ||||||
|  |  | ||||||
|     elseif (ind != b:PHP_default_indenting || last_line =~ '^[)\]]' ) && last_line =~ terminated |     elseif (ind != b:PHP_default_indenting || last_line =~ '^[)\]]' ) && last_line =~ terminated | ||||||
| @@ -699,7 +724,7 @@ function! GetPhpIndent() | |||||||
|  |  | ||||||
| 	let isSingleLineBlock = 0 | 	let isSingleLineBlock = 0 | ||||||
| 	while 1 | 	while 1 | ||||||
| 	    if ! isSingleLineBlock && previous_line =~ '^\s*}\|;\s*}'.endline | 	    if ! isSingleLineBlock && previous_line =~ '^\s*}\|;\s*}'.endline " XXX | ||||||
|  |  | ||||||
| 		call cursor(last_line_num, 1) | 		call cursor(last_line_num, 1) | ||||||
| 		if previous_line !~ '^}' | 		if previous_line !~ '^}' | ||||||
| @@ -780,15 +805,15 @@ function! GetPhpIndent() | |||||||
|     if !LastLineClosed |     if !LastLineClosed | ||||||
|  |  | ||||||
|  |  | ||||||
| 	if last_line =~# '[{(\[]'.endline || last_line =~? '\h\w*\s*(.*,$' && AntepenultimateLine !~ '[,(\[]'.endline | 	if last_line =~# '[{(\[]'.endline || last_line =~? '\h\w*\s*(.*,$' && AntepenultimateLine !~ '[,(\[]'.endline && BalanceDirection(last_line) > 0 | ||||||
|  |  | ||||||
| 	    let dontIndent = 0 | 	    let dontIndent = 0 | ||||||
| 	    if last_line =~ '\S\+\s*{'.endline && last_line !~ '^\s*)\s*{'.endline && last_line !~ '^\s*\%(' . s:blockstart . '\)\|'. s:functionDecl . s:endline | 	    if last_line =~ '\S\+\s*{'.endline && last_line !~ '^\s*[)\]]\+\s*{'.endline && last_line !~ s:structureHead | ||||||
| 		let dontIndent = 1 | 		let dontIndent = 1 | ||||||
| 	    endif | 	    endif | ||||||
|  |  | ||||||
| 	    if !dontIndent && (!b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{') | 	    if !dontIndent && (!b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{') | ||||||
| 		let ind = ind + s:sw() | 		let ind = ind + shiftwidth() | ||||||
| 	    endif | 	    endif | ||||||
|  |  | ||||||
| 	    if b:PHP_BracesAtCodeLevel || b:PHP_vintage_case_default_indent == 1 | 	    if b:PHP_BracesAtCodeLevel || b:PHP_vintage_case_default_indent == 1 | ||||||
| @@ -797,26 +822,26 @@ function! GetPhpIndent() | |||||||
| 		return ind + addSpecial | 		return ind + addSpecial | ||||||
| 	    endif | 	    endif | ||||||
|  |  | ||||||
| 	elseif last_line =~ '\S\+\s*),'.endline | 	elseif last_line =~ '\S\+\s*),'.endline && BalanceDirection(last_line) < 0 | ||||||
| 	    call cursor(lnum, 1) | 	    call cursor(lnum, 1) | ||||||
| 	    call search('),'.endline, 'W') | 	    call search('),'.endline, 'W') " line never begins with ) so no need for 'c' flag | ||||||
| 	    let openedparent = searchpair('(', '', ')', 'bW', 'Skippmatch()') | 	    let openedparent = searchpair('(', '', ')', 'bW', 'Skippmatch()') | ||||||
| 	    if openedparent != lnum | 	    if openedparent != lnum | ||||||
| 		let ind = indent(openedparent) | 		let ind = indent(openedparent) | ||||||
| 	    endif | 	    endif | ||||||
|  |  | ||||||
| 	elseif last_line =~ '^\s*'.s:blockstart | 	elseif last_line =~ '^\s*'.s:blockstart | ||||||
| 	    let ind = ind + s:sw() | 	    let ind = ind + shiftwidth() | ||||||
|  |  | ||||||
|  |  | ||||||
|     elseif AntepenultimateLine =~ '{'.endline || AntepenultimateLine =~ terminated || AntepenultimateLine =~# s:defaultORcase | 	elseif AntepenultimateLine =~ '{'.endline && AntepenultimateLine !~? '^\s*use\>' || AntepenultimateLine =~ terminated || AntepenultimateLine =~# s:defaultORcase | ||||||
| 	    let ind = ind + s:sw() | 	    let ind = ind + shiftwidth() | ||||||
| 	endif | 	endif | ||||||
|  |  | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|     if cline =~  '^\s*[)\]];\=' |     if cline =~  '^\s*[)\]];\=' | ||||||
| 	let ind = ind - s:sw() | 	let ind = ind - shiftwidth() | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|     let b:PHP_CurrentIndentLevel = ind |     let b:PHP_CurrentIndentLevel = ind | ||||||
|   | |||||||
| @@ -41,16 +41,16 @@ function! PostscrIndentGet(lnum) | |||||||
|  |  | ||||||
|   " Indent for dicts, arrays, and saves with possible trailing comment |   " Indent for dicts, arrays, and saves with possible trailing comment | ||||||
|   if pline =~ '\(begin\|<<\|g\=save\|{\|[\)\s*\(%.*\)\=$' |   if pline =~ '\(begin\|<<\|g\=save\|{\|[\)\s*\(%.*\)\=$' | ||||||
|     let ind = ind + &sw |     let ind = ind + shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " Remove indent for popped dicts, and restores. |   " Remove indent for popped dicts, and restores. | ||||||
|   if pline =~ '\(end\|g\=restore\)\s*$' |   if pline =~ '\(end\|g\=restore\)\s*$' | ||||||
|     let ind = ind - &sw |     let ind = ind - shiftwidth() | ||||||
|  |  | ||||||
|   " Else handle immediate dedents of dicts, restores, and arrays. |   " Else handle immediate dedents of dicts, restores, and arrays. | ||||||
|   elseif getline(a:lnum) =~ '\(end\|>>\|g\=restore\|}\|]\)' |   elseif getline(a:lnum) =~ '\(end\|>>\|g\=restore\|}\|]\)' | ||||||
|     let ind = ind - &sw |     let ind = ind - shiftwidth() | ||||||
|  |  | ||||||
|   " Else handle DSC comments - always start of line. |   " Else handle DSC comments - always start of line. | ||||||
|   elseif getline(a:lnum) =~ '^\s*%%' |   elseif getline(a:lnum) =~ '^\s*%%' | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| " Vim indent file | " Vim indent file | ||||||
| " Language: PoV-Ray Scene Description Language | " Language: PoV-Ray Scene Description Language | ||||||
| " Maintainer: David Necas (Yeti) <yeti@physics.muni.cz> | " Maintainer: David Necas (Yeti) <yeti@physics.muni.cz> | ||||||
| " Last Change: 2002-10-20 | " Last Change: 2017 Jun 13 | ||||||
| " URI: http://trific.ath.cx/Ftp/vim/indent/pov.vim | " URI: http://trific.ath.cx/Ftp/vim/indent/pov.vim | ||||||
|  |  | ||||||
| " Only load this indent file when no other was loaded. | " Only load this indent file when no other was loaded. | ||||||
| @@ -75,9 +75,9 @@ function GetPoVRayIndent() | |||||||
|   " opening line. |   " opening line. | ||||||
|   let cur = s:MatchCount(v:lnum, '^\s*\%(#\s*\%(end\|else\)\>\|[]})]\)') |   let cur = s:MatchCount(v:lnum, '^\s*\%(#\s*\%(end\|else\)\>\|[]})]\)') | ||||||
|   if cur > 0 |   if cur > 0 | ||||||
|     let final = plind + (chg - cur) * &sw |     let final = plind + (chg - cur) * shiftwidth() | ||||||
|   else |   else | ||||||
|     let final = plind + chg * &sw |     let final = plind + chg * shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   return final < 0 ? 0 : final |   return final < 0 ? 0 : final | ||||||
|   | |||||||
| @@ -41,18 +41,18 @@ function! GetPrologIndent() | |||||||
|     endif |     endif | ||||||
|     " Check for clause head on previous line |     " Check for clause head on previous line | ||||||
|     if pline =~ ':-\s*\(%.*\)\?$' |     if pline =~ ':-\s*\(%.*\)\?$' | ||||||
| 	let ind = ind + &sw | 	let ind = ind + shiftwidth() | ||||||
|     " Check for end of clause on previous line |     " Check for end of clause on previous line | ||||||
|     elseif pline =~ '\.\s*\(%.*\)\?$' |     elseif pline =~ '\.\s*\(%.*\)\?$' | ||||||
| 	let ind = ind - &sw | 	let ind = ind - shiftwidth() | ||||||
|     endif |     endif | ||||||
|     " Check for opening conditional on previous line |     " Check for opening conditional on previous line | ||||||
|     if pline =~ '^\s*\([(;]\|->\)' |     if pline =~ '^\s*\([(;]\|->\)' | ||||||
| 	let ind = ind + &sw | 	let ind = ind + shiftwidth() | ||||||
|     endif |     endif | ||||||
|     " Check for closing an unclosed paren, or middle ; or -> |     " Check for closing an unclosed paren, or middle ; or -> | ||||||
|     if line =~ '^\s*\([);]\|->\)' |     if line =~ '^\s*\([);]\|->\)' | ||||||
| 	let ind = ind - &sw | 	let ind = ind - shiftwidth() | ||||||
|     endif |     endif | ||||||
|     return ind |     return ind | ||||||
| endfunction | endfunction | ||||||
|   | |||||||
| @@ -274,7 +274,7 @@ function GetRIndent() | |||||||
|         let nlnum = s:Get_prev_line(nlnum) |         let nlnum = s:Get_prev_line(nlnum) | ||||||
|         let nline = SanitizeRLine(getline(nlnum)) . nline |         let nline = SanitizeRLine(getline(nlnum)) . nline | ||||||
|       endwhile |       endwhile | ||||||
|       if nline =~ '^\s*function\s*(' && indent(nlnum) == &sw |       if nline =~ '^\s*function\s*(' && indent(nlnum) == shiftwidth() | ||||||
|         return 0 |         return 0 | ||||||
|       endif |       endif | ||||||
|     endif |     endif | ||||||
| @@ -285,7 +285,7 @@ function GetRIndent() | |||||||
|  |  | ||||||
|   " line is an incomplete command: |   " line is an incomplete command: | ||||||
|   if line =~ '\<\(if\|while\|for\|function\)\s*()$' || line =~ '\<else$' || line =~ '<-$' || line =~ '->$' |   if line =~ '\<\(if\|while\|for\|function\)\s*()$' || line =~ '\<else$' || line =~ '<-$' || line =~ '->$' | ||||||
|     return indent(lnum) + &sw |     return indent(lnum) + shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " Deal with () and [] |   " Deal with () and [] | ||||||
| @@ -293,14 +293,14 @@ function GetRIndent() | |||||||
|   let pb = s:Get_paren_balance(line, '(', ')') |   let pb = s:Get_paren_balance(line, '(', ')') | ||||||
|  |  | ||||||
|   if line =~ '^\s*{$' || line =~ '(\s*{' || (pb == 0 && (line =~ '{$' || line =~ '(\s*{$')) |   if line =~ '^\s*{$' || line =~ '(\s*{' || (pb == 0 && (line =~ '{$' || line =~ '(\s*{$')) | ||||||
|     return indent(lnum) + &sw |     return indent(lnum) + shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   let s:curtabstop = repeat(' ', &tabstop) |   let s:curtabstop = repeat(' ', &tabstop) | ||||||
|  |  | ||||||
|   if g:r_indent_align_args == 1 |   if g:r_indent_align_args == 1 | ||||||
|     if pb > 0 && line =~ '{$' |     if pb > 0 && line =~ '{$' | ||||||
|       return s:Get_last_paren_idx(line, '(', ')', pb) + &sw |       return s:Get_last_paren_idx(line, '(', ')', pb) + shiftwidth() | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|     let bb = s:Get_paren_balance(line, '[', ']') |     let bb = s:Get_paren_balance(line, '[', ']') | ||||||
| @@ -364,11 +364,11 @@ function GetRIndent() | |||||||
|       if oline =~ g:r_indent_op_pattern && s:Get_paren_balance(line, "(", ")") == 0 |       if oline =~ g:r_indent_op_pattern && s:Get_paren_balance(line, "(", ")") == 0 | ||||||
|         return indent(lnum) |         return indent(lnum) | ||||||
|       else |       else | ||||||
|         return indent(lnum) + &sw |         return indent(lnum) + shiftwidth() | ||||||
|       endif |       endif | ||||||
|     else |     else | ||||||
|       if oline =~ g:r_indent_op_pattern && s:Get_paren_balance(line, "(", ")") == 0 |       if oline =~ g:r_indent_op_pattern && s:Get_paren_balance(line, "(", ")") == 0 | ||||||
|         return indent(lnum) - &sw |         return indent(lnum) - shiftwidth() | ||||||
|       endif |       endif | ||||||
|     endif |     endif | ||||||
|   endif |   endif | ||||||
| @@ -383,7 +383,7 @@ function GetRIndent() | |||||||
|       let line = linepiece . line |       let line = linepiece . line | ||||||
|     endwhile |     endwhile | ||||||
|     if line =~ '{$' && post_block == 0 |     if line =~ '{$' && post_block == 0 | ||||||
|       return indent(lnum) + &sw |       return indent(lnum) + shiftwidth() | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|     " Now we can do some tests again |     " Now we can do some tests again | ||||||
| @@ -393,19 +393,19 @@ function GetRIndent() | |||||||
|     if post_block == 0 |     if post_block == 0 | ||||||
|       let newl = SanitizeRLine(line) |       let newl = SanitizeRLine(line) | ||||||
|       if newl =~ '\<\(if\|while\|for\|function\)\s*()$' || newl =~ '\<else$' || newl =~ '<-$' |       if newl =~ '\<\(if\|while\|for\|function\)\s*()$' || newl =~ '\<else$' || newl =~ '<-$' | ||||||
|         return indent(lnum) + &sw |         return indent(lnum) + shiftwidth() | ||||||
|       endif |       endif | ||||||
|     endif |     endif | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   if cline =~ '^\s*else' |   if cline =~ '^\s*else' | ||||||
|     if line =~ '<-\s*if\s*()' |     if line =~ '<-\s*if\s*()' | ||||||
|       return indent(lnum) + &sw |       return indent(lnum) + shiftwidth() | ||||||
|     else |     else | ||||||
|       if line =~ '\<if\s*()' |       if line =~ '\<if\s*()' | ||||||
|         return indent(lnum) |         return indent(lnum) | ||||||
|       else |       else | ||||||
|         return indent(lnum) - &sw |         return indent(lnum) - shiftwidth() | ||||||
|       endif |       endif | ||||||
|     endif |     endif | ||||||
|   endif |   endif | ||||||
| @@ -474,12 +474,12 @@ function GetRIndent() | |||||||
|   let ind = indent(lnum) |   let ind = indent(lnum) | ||||||
|  |  | ||||||
|   if g:r_indent_align_args == 0 && pb != 0 |   if g:r_indent_align_args == 0 && pb != 0 | ||||||
|     let ind += pb * &sw |     let ind += pb * shiftwidth() | ||||||
|     return ind |     return ind | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   if g:r_indent_align_args == 0 && bb != 0 |   if g:r_indent_align_args == 0 && bb != 0 | ||||||
|     let ind += bb * &sw |     let ind += bb * shiftwidth() | ||||||
|     return ind |     return ind | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
| @@ -489,7 +489,7 @@ function GetRIndent() | |||||||
|     let pind = 0 |     let pind = 0 | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   if ind == pind || (ind == (pind  + &sw) && pline =~ '{$' && ppost_else == 0) |   if ind == pind || (ind == (pind  + shiftwidth()) && pline =~ '{$' && ppost_else == 0) | ||||||
|     return ind |     return ind | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
| @@ -509,7 +509,7 @@ function GetRIndent() | |||||||
|       let pbb = s:Get_paren_balance(pline, '[', ']') |       let pbb = s:Get_paren_balance(pline, '[', ']') | ||||||
|     endwhile |     endwhile | ||||||
|     let pind = indent(plnum) |     let pind = indent(plnum) | ||||||
|     if ind == (pind  + &sw) && pline =~ '{$' |     if ind == (pind  + shiftwidth()) && pline =~ '{$' | ||||||
|       return ind |       return ind | ||||||
|     endif |     endif | ||||||
|   endwhile |   endwhile | ||||||
|   | |||||||
| @@ -82,7 +82,7 @@ function GetRHelpIndent() | |||||||
|   let closeb = strlen(line2) - strlen(line3) |   let closeb = strlen(line2) - strlen(line3) | ||||||
|   let bb = openb - closeb |   let bb = openb - closeb | ||||||
|  |  | ||||||
|   let ind = indent(lnum) + (bb * &sw) |   let ind = indent(lnum) + (bb * shiftwidth()) | ||||||
|  |  | ||||||
|   if line =~ '^\s*}\s*$' |   if line =~ '^\s*}\s*$' | ||||||
|     let ind = indent(lnum) |     let ind = indent(lnum) | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| " Vim indent file | " Vim indent file | ||||||
| " Language:	RPL/2 | " Language:	RPL/2 | ||||||
| " Version:	0.2 | " Version:	0.2 | ||||||
| " Last Change:	2005 Mar 28 | " Last Change:	2017 Jun 13 | ||||||
| " Maintainer:	BERTRAND Jo<4A>l <rpl2@free.fr> | " Maintainer:	BERTRAND Jo<4A>l <rpl2@free.fr> | ||||||
|  |  | ||||||
| " Only load this indent file when no other was loaded. | " Only load this indent file when no other was loaded. | ||||||
| @@ -32,16 +32,16 @@ function RplGetIndent(lnum) | |||||||
|   if prevstat =~? '\<\(if\|iferr\|do\|while\)\>' && prevstat =~? '\<end\>' |   if prevstat =~? '\<\(if\|iferr\|do\|while\)\>' && prevstat =~? '\<end\>' | ||||||
|   elseif prevstat =~? '\(^\|\s\+\)<<\($\|\s\+\)' && prevstat =~? '\s\+>>\($\|\s\+\)' |   elseif prevstat =~? '\(^\|\s\+\)<<\($\|\s\+\)' && prevstat =~? '\s\+>>\($\|\s\+\)' | ||||||
|   elseif prevstat =~? '\<\(if\|iferr\|then\|else\|elseif\|select\|case\|do\|until\|while\|repeat\|for\|start\|default\)\>' || prevstat =~? '\(^\|\s\+\)<<\($\|\s\+\)' |   elseif prevstat =~? '\<\(if\|iferr\|then\|else\|elseif\|select\|case\|do\|until\|while\|repeat\|for\|start\|default\)\>' || prevstat =~? '\(^\|\s\+\)<<\($\|\s\+\)' | ||||||
|     let ind = ind + &sw |     let ind = ind + shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " Subtract a shiftwidth from then, else, elseif, end, until, repeat, next, |   " Subtract a shiftwidth from then, else, elseif, end, until, repeat, next, | ||||||
|   " step |   " step | ||||||
|   let line = getline(v:lnum) |   let line = getline(v:lnum) | ||||||
|   if line =~? '^\s*\(then\|else\|elseif\|until\|repeat\|next\|step\|default\|end\)\>' |   if line =~? '^\s*\(then\|else\|elseif\|until\|repeat\|next\|step\|default\|end\)\>' | ||||||
|     let ind = ind - &sw |     let ind = ind - shiftwidth() | ||||||
|   elseif line =~? '^\s*>>\($\|\s\+\)' |   elseif line =~? '^\s*>>\($\|\s\+\)' | ||||||
|     let ind = ind - &sw |     let ind = ind - shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   return ind |   return ind | ||||||
|   | |||||||
| @@ -404,11 +404,7 @@ function GetRubyIndent(...) | |||||||
|   " ---------- |   " ---------- | ||||||
|  |  | ||||||
|   " The value of a single shift-width |   " The value of a single shift-width | ||||||
|   if exists('*shiftwidth') |   let sw = shiftwidth() | ||||||
|     let sw = shiftwidth() |  | ||||||
|   else |  | ||||||
|     let sw = &sw |  | ||||||
|   endif |  | ||||||
|  |  | ||||||
|   " For the current line, use the first argument if given, else v:lnum |   " For the current line, use the first argument if given, else v:lnum | ||||||
|   let clnum = a:0 ? a:1 : v:lnum |   let clnum = a:0 ? a:1 : v:lnum | ||||||
|   | |||||||
							
								
								
									
										213
									
								
								runtime/indent/rust.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										213
									
								
								runtime/indent/rust.vim
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,213 @@ | |||||||
|  | " Vim indent file | ||||||
|  | " Language:         Rust | ||||||
|  | " Author:           Chris Morgan <me@chrismorgan.info> | ||||||
|  | " Last Change:      2017 Jun 13 | ||||||
|  | " For bugs, patches and license go to https://github.com/rust-lang/rust.vim | ||||||
|  |  | ||||||
|  | " Only load this indent file when no other was loaded. | ||||||
|  | if exists("b:did_indent") | ||||||
|  | 	finish | ||||||
|  | endif | ||||||
|  | let b:did_indent = 1 | ||||||
|  |  | ||||||
|  | setlocal cindent | ||||||
|  | setlocal cinoptions=L0,(0,Ws,J1,j1 | ||||||
|  | setlocal cinkeys=0{,0},!^F,o,O,0[,0] | ||||||
|  | " Don't think cinwords will actually do anything at all... never mind | ||||||
|  | setlocal cinwords=for,if,else,while,loop,impl,mod,unsafe,trait,struct,enum,fn,extern | ||||||
|  |  | ||||||
|  | " Some preliminary settings | ||||||
|  | setlocal nolisp		" Make sure lisp indenting doesn't supersede us | ||||||
|  | setlocal autoindent	" indentexpr isn't much help otherwise | ||||||
|  | " Also do indentkeys, otherwise # gets shoved to column 0 :-/ | ||||||
|  | setlocal indentkeys=0{,0},!^F,o,O,0[,0] | ||||||
|  |  | ||||||
|  | setlocal indentexpr=GetRustIndent(v:lnum) | ||||||
|  |  | ||||||
|  | " Only define the function once. | ||||||
|  | if exists("*GetRustIndent") | ||||||
|  | 	finish | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | let s:save_cpo = &cpo | ||||||
|  | set cpo&vim | ||||||
|  |  | ||||||
|  | " Come here when loading the script the first time. | ||||||
|  |  | ||||||
|  | function! s:get_line_trimmed(lnum) | ||||||
|  | 	" Get the line and remove a trailing comment. | ||||||
|  | 	" Use syntax highlighting attributes when possible. | ||||||
|  | 	" NOTE: this is not accurate; /* */ or a line continuation could trick it | ||||||
|  | 	let line = getline(a:lnum) | ||||||
|  | 	let line_len = strlen(line) | ||||||
|  | 	if has('syntax_items') | ||||||
|  | 		" If the last character in the line is a comment, do a binary search for | ||||||
|  | 		" the start of the comment.  synID() is slow, a linear search would take | ||||||
|  | 		" too long on a long line. | ||||||
|  | 		if synIDattr(synID(a:lnum, line_len, 1), "name") =~ 'Comment\|Todo' | ||||||
|  | 			let min = 1 | ||||||
|  | 			let max = line_len | ||||||
|  | 			while min < max | ||||||
|  | 				let col = (min + max) / 2 | ||||||
|  | 				if synIDattr(synID(a:lnum, col, 1), "name") =~ 'Comment\|Todo' | ||||||
|  | 					let max = col | ||||||
|  | 				else | ||||||
|  | 					let min = col + 1 | ||||||
|  | 				endif | ||||||
|  | 			endwhile | ||||||
|  | 			let line = strpart(line, 0, min - 1) | ||||||
|  | 		endif | ||||||
|  | 		return substitute(line, "\s*$", "", "") | ||||||
|  | 	else | ||||||
|  | 		" Sorry, this is not complete, nor fully correct (e.g. string "//"). | ||||||
|  | 		" Such is life. | ||||||
|  | 		return substitute(line, "\s*//.*$", "", "") | ||||||
|  | 	endif | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | function! s:is_string_comment(lnum, col) | ||||||
|  | 	if has('syntax_items') | ||||||
|  | 		for id in synstack(a:lnum, a:col) | ||||||
|  | 			let synname = synIDattr(id, "name") | ||||||
|  | 			if synname == "rustString" || synname =~ "^rustComment" | ||||||
|  | 				return 1 | ||||||
|  | 			endif | ||||||
|  | 		endfor | ||||||
|  | 	else | ||||||
|  | 		" without syntax, let's not even try | ||||||
|  | 		return 0 | ||||||
|  | 	endif | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | function GetRustIndent(lnum) | ||||||
|  |  | ||||||
|  | 	" Starting assumption: cindent (called at the end) will do it right | ||||||
|  | 	" normally. We just want to fix up a few cases. | ||||||
|  |  | ||||||
|  | 	let line = getline(a:lnum) | ||||||
|  |  | ||||||
|  | 	if has('syntax_items') | ||||||
|  | 		let synname = synIDattr(synID(a:lnum, 1, 1), "name") | ||||||
|  | 		if synname == "rustString" | ||||||
|  | 			" If the start of the line is in a string, don't change the indent | ||||||
|  | 			return -1 | ||||||
|  | 		elseif synname =~ '\(Comment\|Todo\)' | ||||||
|  | 					\ && line !~ '^\s*/\*'  " not /* opening line | ||||||
|  | 			if synname =~ "CommentML" " multi-line | ||||||
|  | 				if line !~ '^\s*\*' && getline(a:lnum - 1) =~ '^\s*/\*' | ||||||
|  | 					" This is (hopefully) the line after a /*, and it has no | ||||||
|  | 					" leader, so the correct indentation is that of the | ||||||
|  | 					" previous line. | ||||||
|  | 					return GetRustIndent(a:lnum - 1) | ||||||
|  | 				endif | ||||||
|  | 			endif | ||||||
|  | 			" If it's in a comment, let cindent take care of it now. This is | ||||||
|  | 			" for cases like "/*" where the next line should start " * ", not | ||||||
|  | 			" "* " as the code below would otherwise cause for module scope | ||||||
|  | 			" Fun fact: "  /*\n*\n*/" takes two calls to get right! | ||||||
|  | 			return cindent(a:lnum) | ||||||
|  | 		endif | ||||||
|  | 	endif | ||||||
|  |  | ||||||
|  | 	" cindent gets second and subsequent match patterns/struct members wrong, | ||||||
|  | 	" as it treats the comma as indicating an unfinished statement:: | ||||||
|  | 	" | ||||||
|  | 	" match a { | ||||||
|  | 	"     b => c, | ||||||
|  | 	"         d => e, | ||||||
|  | 	"         f => g, | ||||||
|  | 	" }; | ||||||
|  |  | ||||||
|  | 	" Search backwards for the previous non-empty line. | ||||||
|  | 	let prevlinenum = prevnonblank(a:lnum - 1) | ||||||
|  | 	let prevline = s:get_line_trimmed(prevlinenum) | ||||||
|  | 	while prevlinenum > 1 && prevline !~ '[^[:blank:]]' | ||||||
|  | 		let prevlinenum = prevnonblank(prevlinenum - 1) | ||||||
|  | 		let prevline = s:get_line_trimmed(prevlinenum) | ||||||
|  | 	endwhile | ||||||
|  |  | ||||||
|  | 	" Handle where clauses nicely: subsequent values should line up nicely. | ||||||
|  | 	if prevline[len(prevline) - 1] == "," | ||||||
|  | 				\ && prevline =~# '^\s*where\s' | ||||||
|  | 		return indent(prevlinenum) + 6 | ||||||
|  | 	endif | ||||||
|  |  | ||||||
|  | 	if prevline[len(prevline) - 1] == "," | ||||||
|  | 				\ && s:get_line_trimmed(a:lnum) !~ '^\s*[\[\]{}]' | ||||||
|  | 				\ && prevline !~ '^\s*fn\s' | ||||||
|  | 				\ && prevline !~ '([^()]\+,$' | ||||||
|  | 				\ && s:get_line_trimmed(a:lnum) !~ '^\s*\S\+\s*=>' | ||||||
|  | 		" Oh ho! The previous line ended in a comma! I bet cindent will try to | ||||||
|  | 		" take this too far... For now, let's normally use the previous line's | ||||||
|  | 		" indent. | ||||||
|  |  | ||||||
|  | 		" One case where this doesn't work out is where *this* line contains | ||||||
|  | 		" square or curly brackets; then we normally *do* want to be indenting | ||||||
|  | 		" further. | ||||||
|  | 		" | ||||||
|  | 		" Another case where we don't want to is one like a function | ||||||
|  | 		" definition with arguments spread over multiple lines: | ||||||
|  | 		" | ||||||
|  | 		" fn foo(baz: Baz, | ||||||
|  | 		"        baz: Baz) // <-- cindent gets this right by itself | ||||||
|  | 		" | ||||||
|  | 		" Another case is similar to the previous, except calling a function | ||||||
|  | 		" instead of defining it, or any conditional expression that leaves | ||||||
|  | 		" an open paren: | ||||||
|  | 		" | ||||||
|  | 		" foo(baz, | ||||||
|  | 		"     baz); | ||||||
|  | 		" | ||||||
|  | 		" if baz && (foo || | ||||||
|  | 		"            bar) { | ||||||
|  | 		" | ||||||
|  | 		" Another case is when the current line is a new match arm. | ||||||
|  | 		" | ||||||
|  | 		" There are probably other cases where we don't want to do this as | ||||||
|  | 		" well. Add them as needed. | ||||||
|  | 		return indent(prevlinenum) | ||||||
|  | 	endif | ||||||
|  |  | ||||||
|  | 	if !has("patch-7.4.355") | ||||||
|  | 		" cindent before 7.4.355 doesn't do the module scope well at all; e.g.:: | ||||||
|  | 		" | ||||||
|  | 		" static FOO : &'static [bool] = [ | ||||||
|  | 		" true, | ||||||
|  | 		"	 false, | ||||||
|  | 		"	 false, | ||||||
|  | 		"	 true, | ||||||
|  | 		"	 ]; | ||||||
|  | 		" | ||||||
|  | 		"	 uh oh, next statement is indented further! | ||||||
|  |  | ||||||
|  | 		" Note that this does *not* apply the line continuation pattern properly; | ||||||
|  | 		" that's too hard to do correctly for my liking at present, so I'll just | ||||||
|  | 		" start with these two main cases (square brackets and not returning to | ||||||
|  | 		" column zero) | ||||||
|  |  | ||||||
|  | 		call cursor(a:lnum, 1) | ||||||
|  | 		if searchpair('{\|(', '', '}\|)', 'nbW', | ||||||
|  | 					\ 's:is_string_comment(line("."), col("."))') == 0 | ||||||
|  | 			if searchpair('\[', '', '\]', 'nbW', | ||||||
|  | 						\ 's:is_string_comment(line("."), col("."))') == 0 | ||||||
|  | 				" Global scope, should be zero | ||||||
|  | 				return 0 | ||||||
|  | 			else | ||||||
|  | 				" At the module scope, inside square brackets only | ||||||
|  | 				"if getline(a:lnum)[0] == ']' || search('\[', '', '\]', 'nW') == a:lnum | ||||||
|  | 				if line =~ "^\\s*]" | ||||||
|  | 					" It's the closing line, dedent it | ||||||
|  | 					return 0 | ||||||
|  | 				else | ||||||
|  | 					return shiftwidth() | ||||||
|  | 				endif | ||||||
|  | 			endif | ||||||
|  | 		endif | ||||||
|  | 	endif | ||||||
|  |  | ||||||
|  | 	" Fall back on cindent, which does it mostly right | ||||||
|  | 	return cindent(a:lnum) | ||||||
|  | endfunction | ||||||
|  |  | ||||||
|  | let &cpo = s:save_cpo | ||||||
|  | unlet s:save_cpo | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| " Vim indent file | " Vim indent file | ||||||
| " Language:	Sass | " Language:	Sass | ||||||
| " Maintainer:	Tim Pope <vimNOSPAM@tpope.org> | " Maintainer:	Tim Pope <vimNOSPAM@tpope.org> | ||||||
| " Last Change:	2016 Aug 29 | " Last Change:	2017 Jun 13 | ||||||
|  |  | ||||||
| if exists("b:did_indent") | if exists("b:did_indent") | ||||||
|   finish |   finish | ||||||
| @@ -29,7 +29,7 @@ function! GetSassIndent() | |||||||
|   let indent = indent(lnum) |   let indent = indent(lnum) | ||||||
|   let cindent = indent(v:lnum) |   let cindent = indent(v:lnum) | ||||||
|   if line !~ s:property && line !~ s:extend && cline =~ s:property |   if line !~ s:property && line !~ s:extend && cline =~ s:property | ||||||
|     return indent + (exists('*shiftwidth') ? shiftwidth() : &sw) |     return indent + shiftwidth() | ||||||
|   else |   else | ||||||
|     return -1 |     return -1 | ||||||
|   endif |   endif | ||||||
|   | |||||||
| @@ -46,17 +46,17 @@ function! GetSDLIndent() | |||||||
|   if (getline(lnum) =~? '^\s*\(start\|state\|system\|package\|connection\|channel\|alternative\|macro\|operator\|newtype\|select\|substructure\|decision\|generator\|refinement\|service\|method\|exceptionhandler\|asntype\|syntype\|value\|(.*):\|\(priority\s\+\)\=input\|provided\)' |   if (getline(lnum) =~? '^\s*\(start\|state\|system\|package\|connection\|channel\|alternative\|macro\|operator\|newtype\|select\|substructure\|decision\|generator\|refinement\|service\|method\|exceptionhandler\|asntype\|syntype\|value\|(.*):\|\(priority\s\+\)\=input\|provided\)' | ||||||
|     \ || getline(lnum) =~? virtuality . '\(process\|procedure\|block\|object\)') |     \ || getline(lnum) =~? virtuality . '\(process\|procedure\|block\|object\)') | ||||||
|     \ && getline(lnum) !~? 'end[[:alpha:]]\+;$' |     \ && getline(lnum) !~? 'end[[:alpha:]]\+;$' | ||||||
|     let ind = ind + &sw |     let ind = ind + shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " Subtract a 'shiftwidth' after states |   " Subtract a 'shiftwidth' after states | ||||||
|   if getline(lnum) =~? '^\s*\(stop\|return\>\|nextstate\)' |   if getline(lnum) =~? '^\s*\(stop\|return\>\|nextstate\)' | ||||||
|     let ind = ind - &sw |     let ind = ind - shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " Subtract a 'shiftwidth' on on end (uncompleted line) |   " Subtract a 'shiftwidth' on on end (uncompleted line) | ||||||
|   if getline(v:lnum) =~? '^\s*end\>' |   if getline(v:lnum) =~? '^\s*end\>' | ||||||
|     let ind = ind - &sw |     let ind = ind - shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " Put each alternatives where the corresponding decision was |   " Put each alternatives where the corresponding decision was | ||||||
|   | |||||||
| @@ -3,10 +3,12 @@ | |||||||
| " Maintainer:          Christian Brabandt <cb@256bit.org> | " Maintainer:          Christian Brabandt <cb@256bit.org> | ||||||
| " Previous Maintainer: Peter Aronoff <telemachus@arpinum.org> | " Previous Maintainer: Peter Aronoff <telemachus@arpinum.org> | ||||||
| " Original Author:     Nikolai Weibull <now@bitwi.se> | " Original Author:     Nikolai Weibull <now@bitwi.se> | ||||||
| " Latest Revision:     2016-06-27 | " Latest Revision:     2017-05-02 | ||||||
| " License:             Vim (see :h license) | " License:             Vim (see :h license) | ||||||
| " Repository:          https://github.com/chrisbra/vim-sh-indent | " Repository:          https://github.com/chrisbra/vim-sh-indent | ||||||
| " Changelog: | " Changelog: | ||||||
|  | "          20170502: - get rid of buffer-shiftwidth function | ||||||
|  | "          20160912: - preserve indentation of here-doc blocks | ||||||
| "          20160627: - detect heredocs correctly | "          20160627: - detect heredocs correctly | ||||||
| "          20160213: - detect function definition correctly | "          20160213: - detect function definition correctly | ||||||
| "          20160202: - use shiftwidth() function | "          20160202: - use shiftwidth() function | ||||||
| @@ -33,15 +35,11 @@ endif | |||||||
| let s:cpo_save = &cpo | let s:cpo_save = &cpo | ||||||
| set cpo&vim | set cpo&vim | ||||||
|  |  | ||||||
| function s:buffer_shiftwidth() |  | ||||||
|   return shiftwidth() |  | ||||||
| endfunction |  | ||||||
|  |  | ||||||
| let s:sh_indent_defaults = { | let s:sh_indent_defaults = { | ||||||
|       \ 'default': function('s:buffer_shiftwidth'), |       \ 'default': function('shiftwidth'), | ||||||
|       \ 'continuation-line': function('s:buffer_shiftwidth'), |       \ 'continuation-line': function('shiftwidth'), | ||||||
|       \ 'case-labels': function('s:buffer_shiftwidth'), |       \ 'case-labels': function('shiftwidth'), | ||||||
|       \ 'case-statements': function('s:buffer_shiftwidth'), |       \ 'case-statements': function('shiftwidth'), | ||||||
|       \ 'case-breaks': 0 } |       \ 'case-breaks': 0 } | ||||||
|  |  | ||||||
| function! s:indent_value(option) | function! s:indent_value(option) | ||||||
| @@ -110,6 +108,9 @@ function! GetShIndent() | |||||||
|     let ind -= s:indent_value('case-breaks') |     let ind -= s:indent_value('case-breaks') | ||||||
|   elseif s:is_here_doc(line) |   elseif s:is_here_doc(line) | ||||||
|     let ind = 0 |     let ind = 0 | ||||||
|  |   " statements, executed within a here document. Keep the current indent | ||||||
|  |   elseif match(map(synstack(v:lnum, 1), 'synIDattr(v:val, "name")'), '\c\mheredoc') > -1 | ||||||
|  |     return indent(v:lnum) | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   return ind |   return ind | ||||||
|   | |||||||
| @@ -115,9 +115,9 @@ function! GetSMLIndent() | |||||||
|  |  | ||||||
| 	" Return double 'shiftwidth' after lines matching: | 	" Return double 'shiftwidth' after lines matching: | ||||||
| 	if lline =~ '^\s*|.*=>\s*$' | 	if lline =~ '^\s*|.*=>\s*$' | ||||||
| 		return ind + &sw + &sw | 		return ind + 2 *shiftwidth() | ||||||
| 	elseif lline =~ '^\s*val\>.*=\s*$' | 	elseif lline =~ '^\s*val\>.*=\s*$' | ||||||
| 		return ind + &sw | 		return ind + shiftwidth() | ||||||
| 	endif | 	endif | ||||||
|  |  | ||||||
|   let line = getline(v:lnum) |   let line = getline(v:lnum) | ||||||
| @@ -157,7 +157,7 @@ function! GetSMLIndent() | |||||||
| 		if lastModule == -1 | 		if lastModule == -1 | ||||||
| 			return 0 | 			return 0 | ||||||
| 		else | 		else | ||||||
| 			return lastModule + &sw | 			return lastModule + shiftwidth() | ||||||
| 		endif | 		endif | ||||||
|  |  | ||||||
| 	" Indent lines starting with '|' from matching 'case', 'handle' | 	" Indent lines starting with '|' from matching 'case', 'handle' | ||||||
| @@ -172,7 +172,7 @@ function! GetSMLIndent() | |||||||
| 		if switchLine =~ '\<case\>' | 		if switchLine =~ '\<case\>' | ||||||
| 			return col(".") + 2 | 			return col(".") + 2 | ||||||
| 		elseif switchLine =~ '\<handle\>' | 		elseif switchLine =~ '\<handle\>' | ||||||
| 			return switchLineIndent + &sw | 			return switchLineIndent + shiftwidth() | ||||||
| 		elseif switchLine =~ '\<datatype\>' | 		elseif switchLine =~ '\<datatype\>' | ||||||
| 			call search('=') | 			call search('=') | ||||||
| 			return col(".") - 1 | 			return col(".") - 1 | ||||||
| @@ -184,7 +184,7 @@ function! GetSMLIndent() | |||||||
|   " Indent if last line ends with 'sig', 'struct', 'let', 'then', 'else', |   " Indent if last line ends with 'sig', 'struct', 'let', 'then', 'else', | ||||||
|   " 'in' |   " 'in' | ||||||
|   elseif lline =~ '\<\(sig\|struct\|let\|in\|then\|else\)\s*$' |   elseif lline =~ '\<\(sig\|struct\|let\|in\|then\|else\)\s*$' | ||||||
| 		let ind = ind + &sw | 		let ind = ind + shiftwidth() | ||||||
|  |  | ||||||
|   " Indent if last line ends with 'of', align from 'case' |   " Indent if last line ends with 'of', align from 'case' | ||||||
|   elseif lline =~ '\<\(of\)\s*$' |   elseif lline =~ '\<\(of\)\s*$' | ||||||
| @@ -199,14 +199,14 @@ function! GetSMLIndent() | |||||||
|  |  | ||||||
| 	" Indent if last line starts with 'fun', 'case', 'fn' | 	" Indent if last line starts with 'fun', 'case', 'fn' | ||||||
| 	elseif lline =~ '^\s*\(fun\|fn\|case\)\>' | 	elseif lline =~ '^\s*\(fun\|fn\|case\)\>' | ||||||
| 		let ind = ind + &sw | 		let ind = ind + shiftwidth() | ||||||
|  |  | ||||||
| 	endif | 	endif | ||||||
|  |  | ||||||
| 	" Don't indent 'let' if last line started with 'fun', 'fn' | 	" Don't indent 'let' if last line started with 'fun', 'fn' | ||||||
| 	if line =~ '^\s*let\>' | 	if line =~ '^\s*let\>' | ||||||
| 		if lline =~ '^\s*\(fun\|fn\)' | 		if lline =~ '^\s*\(fun\|fn\)' | ||||||
| 			let ind = ind - &sw | 			let ind = ind - shiftwidth() | ||||||
| 		endif | 		endif | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| " Vim indent file | " Vim indent file | ||||||
| " Language:    SQL | " Language:    SQL | ||||||
| " Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com> | " Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com> | ||||||
| " Last Change: 2012 Dec 06 | " Last Change: 2017 Jun 13 | ||||||
| " Version:     3.0 | " Version:     3.0 | ||||||
| " Download:    http://vim.sourceforge.net/script.php?script_id=495 | " Download:    http://vim.sourceforge.net/script.php?script_id=495 | ||||||
|  |  | ||||||
| @@ -147,7 +147,7 @@ function! s:CheckToIgnoreRightParan( prev_lnum, num_levels ) | |||||||
|     endwhile |     endwhile | ||||||
|  |  | ||||||
|     " Fallback - just move back one |     " Fallback - just move back one | ||||||
|     " return a:prev_indent - &sw |     " return a:prev_indent - shiftwidth() | ||||||
|     return ignore_paran |     return ignore_paran | ||||||
| endfunction | endfunction | ||||||
|  |  | ||||||
| @@ -166,7 +166,7 @@ function! s:GetStmtStarterIndent( keyword, curr_lnum ) | |||||||
|     let lnum  = a:curr_lnum |     let lnum  = a:curr_lnum | ||||||
|  |  | ||||||
|     " Default - reduce indent by 1 |     " Default - reduce indent by 1 | ||||||
|     let ind = indent(a:curr_lnum) - &sw |     let ind = indent(a:curr_lnum) - shiftwidth() | ||||||
|  |  | ||||||
|     if a:keyword =~? 'end' |     if a:keyword =~? 'end' | ||||||
|         exec 'normal! ^' |         exec 'normal! ^' | ||||||
| @@ -230,7 +230,7 @@ function! s:ModuloIndent(ind) | |||||||
|     let ind = a:ind |     let ind = a:ind | ||||||
|  |  | ||||||
|     if ind > 0 |     if ind > 0 | ||||||
|         let modulo = ind % &shiftwidth |         let modulo = ind % shiftwidth() | ||||||
|  |  | ||||||
|         if modulo > 0 |         if modulo > 0 | ||||||
|             let ind = ind - modulo |             let ind = ind - modulo | ||||||
| @@ -291,7 +291,7 @@ function! GetSQLIndent() | |||||||
|     " where END IF, END, should decrease the indent. |     " where END IF, END, should decrease the indent. | ||||||
|     if prevline =~? s:SQLBlockStart |     if prevline =~? s:SQLBlockStart | ||||||
|         " Move indent in |         " Move indent in | ||||||
|         let ind = ind + &sw |         let ind = ind + shiftwidth() | ||||||
|         " echom 'prevl - SQLBlockStart - indent ' . ind . '  line: ' . prevline |         " echom 'prevl - SQLBlockStart - indent ' . ind . '  line: ' . prevline | ||||||
|     elseif prevline =~ '[()]' |     elseif prevline =~ '[()]' | ||||||
|         if prevline =~ '(' |         if prevline =~ '(' | ||||||
| @@ -308,7 +308,7 @@ function! GetSQLIndent() | |||||||
|         if num_unmatched_left > 0 |         if num_unmatched_left > 0 | ||||||
|             " There is a open left paranethesis |             " There is a open left paranethesis | ||||||
|             " increase indent |             " increase indent | ||||||
|             let ind = ind + ( &sw * num_unmatched_left ) |             let ind = ind + ( shiftwidth() * num_unmatched_left ) | ||||||
|         elseif num_unmatched_right > 0 |         elseif num_unmatched_right > 0 | ||||||
|             " if it is an unbalanced paranethesis only unindent if |             " if it is an unbalanced paranethesis only unindent if | ||||||
|             " it was part of a command (ie create table(..)  ) |             " it was part of a command (ie create table(..)  ) | ||||||
| @@ -323,7 +323,7 @@ function! GetSQLIndent() | |||||||
|             endif |             endif | ||||||
|  |  | ||||||
|             if (num_unmatched_right - ignore) > 0 |             if (num_unmatched_right - ignore) > 0 | ||||||
|                 let ind = ind - ( &sw * (num_unmatched_right - ignore) ) |                 let ind = ind - ( shiftwidth() * (num_unmatched_right - ignore) ) | ||||||
|             endif |             endif | ||||||
|  |  | ||||||
|         endif |         endif | ||||||
| @@ -339,12 +339,12 @@ function! GetSQLIndent() | |||||||
|     if line =~? '^\s*els' |     if line =~? '^\s*els' | ||||||
|         " Any line when you type else will automatically back up one |         " Any line when you type else will automatically back up one | ||||||
|         " ident level  (ie else, elseif, elsif) |         " ident level  (ie else, elseif, elsif) | ||||||
|         let ind = ind - &sw |         let ind = ind - shiftwidth() | ||||||
|         " echom 'curr - else - indent ' . ind |         " echom 'curr - else - indent ' . ind | ||||||
|     elseif line =~? '^\s*end\>' |     elseif line =~? '^\s*end\>' | ||||||
|         let ind = s:GetStmtStarterIndent('end', v:lnum) |         let ind = s:GetStmtStarterIndent('end', v:lnum) | ||||||
|         " General case for end |         " General case for end | ||||||
|         " let ind = ind - &sw |         " let ind = ind - shiftwidth() | ||||||
|         " echom 'curr - end - indent ' . ind |         " echom 'curr - end - indent ' . ind | ||||||
|     elseif line =~? '^\s*when\>' |     elseif line =~? '^\s*when\>' | ||||||
|         let ind = s:GetStmtStarterIndent('when', v:lnum) |         let ind = s:GetStmtStarterIndent('when', v:lnum) | ||||||
| @@ -352,7 +352,7 @@ function! GetSQLIndent() | |||||||
|         " clause, do not change the indent level, since these |         " clause, do not change the indent level, since these | ||||||
|         " statements do not have a corresponding END statement. |         " statements do not have a corresponding END statement. | ||||||
|         " if stmt_starter =~? 'case' |         " if stmt_starter =~? 'case' | ||||||
|         "    let ind = ind - &sw |         "    let ind = ind - shiftwidth() | ||||||
|         " endif |         " endif | ||||||
|         " elseif line =~ '^\s*)\s*;\?\s*$' |         " elseif line =~ '^\s*)\s*;\?\s*$' | ||||||
|         " elseif line =~ '^\s*)' |         " elseif line =~ '^\s*)' | ||||||
| @@ -371,14 +371,14 @@ function! GetSQLIndent() | |||||||
|         " let num_unmatched_right  = s:CountUnbalancedParan( line, ')' ) |         " let num_unmatched_right  = s:CountUnbalancedParan( line, ')' ) | ||||||
|         " if num_unmatched_right > 0 |         " if num_unmatched_right > 0 | ||||||
|         " elseif strpart( line, strlen(line)-1, 1 ) =~ ')' |         " elseif strpart( line, strlen(line)-1, 1 ) =~ ')' | ||||||
|         " let ind = ind - &sw |         " let ind = ind - shiftwidth() | ||||||
|         if line =~ '^\s*)' |         if line =~ '^\s*)' | ||||||
|             " let ignore = ignore + 1 |             " let ignore = ignore + 1 | ||||||
|             " echom 'curr - begins ) unbalanced ignore: ' . ignore |             " echom 'curr - begins ) unbalanced ignore: ' . ignore | ||||||
|         endif |         endif | ||||||
|  |  | ||||||
|         if (num_unmatched_right - ignore) > 0 |         if (num_unmatched_right - ignore) > 0 | ||||||
|             let ind = ind - ( &sw * (num_unmatched_right - ignore) ) |             let ind = ind - ( shiftwidth() * (num_unmatched_right - ignore) ) | ||||||
|         endif |         endif | ||||||
|         " endif |         " endif | ||||||
|     endif |     endif | ||||||
|   | |||||||
| @@ -29,7 +29,7 @@ function SystemVerilogIndent() | |||||||
|   if exists('b:systemverilog_indent_width') |   if exists('b:systemverilog_indent_width') | ||||||
|     let offset = b:systemverilog_indent_width |     let offset = b:systemverilog_indent_width | ||||||
|   else |   else | ||||||
|     let offset = &sw |     let offset = shiftwidth() | ||||||
|   endif |   endif | ||||||
|   if exists('b:systemverilog_indent_modules') |   if exists('b:systemverilog_indent_modules') | ||||||
|     let indent_modules = offset |     let indent_modules = offset | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ | |||||||
| "		Based on Tera Term Version 4.92 | "		Based on Tera Term Version 4.92 | ||||||
| " Maintainer:	Ken Takata | " Maintainer:	Ken Takata | ||||||
| " URL:		https://github.com/k-takata/vim-teraterm | " URL:		https://github.com/k-takata/vim-teraterm | ||||||
| " Last Change:	2016 Aug 17 | " Last Change:	2017 Jun 13 | ||||||
| " Filenames:	*.ttl | " Filenames:	*.ttl | ||||||
| " License:	VIM License | " License:	VIM License | ||||||
|  |  | ||||||
| @@ -22,16 +22,6 @@ if exists("*GetTeraTermIndent") | |||||||
|   finish |   finish | ||||||
| endif | endif | ||||||
|  |  | ||||||
| " The shiftwidth() function is relatively new. |  | ||||||
| " Don't require it to exist. |  | ||||||
| if exists('*shiftwidth') |  | ||||||
|   let s:sw = function('shiftwidth') |  | ||||||
| else |  | ||||||
|   function s:sw() abort |  | ||||||
|     return &shiftwidth |  | ||||||
|   endfunction |  | ||||||
| endif |  | ||||||
|  |  | ||||||
| function! GetTeraTermIndent(lnum) | function! GetTeraTermIndent(lnum) | ||||||
|   let l:prevlnum = prevnonblank(a:lnum-1) |   let l:prevlnum = prevnonblank(a:lnum-1) | ||||||
|   if l:prevlnum == 0 |   if l:prevlnum == 0 | ||||||
| @@ -48,15 +38,15 @@ function! GetTeraTermIndent(lnum) | |||||||
|  |  | ||||||
|   if l:prevl =~ '^\s*if\>.*\<then\>' |   if l:prevl =~ '^\s*if\>.*\<then\>' | ||||||
|     " previous line opened a block |     " previous line opened a block | ||||||
|     let l:ind += s:sw() |     let l:ind += shiftwidth() | ||||||
|   endif |   endif | ||||||
|   if l:prevl =~ '^\s*\%(elseif\|else\|do\|until\|while\|for\)\>' |   if l:prevl =~ '^\s*\%(elseif\|else\|do\|until\|while\|for\)\>' | ||||||
|     " previous line opened a block |     " previous line opened a block | ||||||
|     let l:ind += s:sw() |     let l:ind += shiftwidth() | ||||||
|   endif |   endif | ||||||
|   if l:thisl =~ '^\s*\%(elseif\|else\|endif\|enduntil\|endwhile\|loop\|next\)\>' |   if l:thisl =~ '^\s*\%(elseif\|else\|endif\|enduntil\|endwhile\|loop\|next\)\>' | ||||||
|     " this line closed a block |     " this line closed a block | ||||||
|     let l:ind -= s:sw() |     let l:ind -= shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   return l:ind |   return l:ind | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| " Vim indent file | " Vim indent file | ||||||
| " Language:     LaTeX | " Language:     LaTeX | ||||||
| " Maintainer:   YiChao Zhou <broken.zhou AT gmail.com> | " Maintainer:   Yichao Zhou <broken.zhou AT gmail.com> | ||||||
| " Created:      Sat, 16 Feb 2002 16:50:19 +0100 | " Created:      Sat, 16 Feb 2002 16:50:19 +0100 | ||||||
| " Version: 0.9.2 | " Version: 0.9.4 | ||||||
| "   Please email me if you found something I can do.  Comments, bug report and | "   Please email me if you found something I can do.  Comments, bug report and | ||||||
| "   feature request are welcome. | "   feature request are welcome. | ||||||
|  |  | ||||||
| @@ -15,49 +15,53 @@ | |||||||
| "               2005/06/15, Moshe Kaminsky <kaminsky AT math.huji.ac.il> | "               2005/06/15, Moshe Kaminsky <kaminsky AT math.huji.ac.il> | ||||||
| "               (*) New variables: | "               (*) New variables: | ||||||
| "                   g:tex_items, g:tex_itemize_env, g:tex_noindent_env | "                   g:tex_items, g:tex_itemize_env, g:tex_noindent_env | ||||||
| "               2011/3/6, by Zhou YiChao <broken.zhou AT gmail.com> | "               2011/3/6, by Yichao Zhou <broken.zhou AT gmail.com> | ||||||
| "               (*) Don't change indentation of lines starting with '%' | "               (*) Don't change indentation of lines starting with '%' | ||||||
| "                   I don't see any code with '%' and it doesn't work properly | "                   I don't see any code with '%' and it doesn't work properly | ||||||
| "                   so I add some code. | "                   so I add some code. | ||||||
| "               (*) New features: Add smartindent-like indent for "{}" and  "[]". | "               (*) New features: Add smartindent-like indent for "{}" and  "[]". | ||||||
| "               (*) New variables: g:tex_indent_brace | "               (*) New variables: g:tex_indent_brace | ||||||
| "               2011/9/25, by Zhou Yichao <broken.zhou AT gmail.com> | "               2011/9/25, by Yichao Zhou <broken.zhou AT gmail.com> | ||||||
| "               (*) Bug fix: smartindent-like indent for "[]" | "               (*) Bug fix: smartindent-like indent for "[]" | ||||||
| "               (*) New features: Align with "&". | "               (*) New features: Align with "&". | ||||||
| "               (*) New variable: g:tex_indent_and. | "               (*) New variable: g:tex_indent_and. | ||||||
| "               2011/10/23 by Zhou Yichao <broken.zhou AT gmail.com> | "               2011/10/23 by Yichao Zhou <broken.zhou AT gmail.com> | ||||||
| "               (*) Bug fix: improve the smartindent-like indent for "{}" and | "               (*) Bug fix: improve the smartindent-like indent for "{}" and | ||||||
| "               "[]". | "               "[]". | ||||||
| "               2012/02/27 by Zhou Yichao <broken.zhou AT gmail.com> | "               2012/02/27 by Yichao Zhou <broken.zhou AT gmail.com> | ||||||
| "               (*) Bug fix: support default folding marker. | "               (*) Bug fix: support default folding marker. | ||||||
| "               (*) Indent with "&" is not very handy.  Make it not enable by | "               (*) Indent with "&" is not very handy.  Make it not enable by | ||||||
| "               default. | "               default. | ||||||
| "               2012/03/06 by Zhou Yichao <broken.zhou AT gmail.com> | "               2012/03/06 by Yichao Zhou <broken.zhou AT gmail.com> | ||||||
| "               (*) Modify "&" behavior and make it default again.  Now "&" | "               (*) Modify "&" behavior and make it default again.  Now "&" | ||||||
| "               won't align when there are more then one "&" in the previous | "               won't align when there are more then one "&" in the previous | ||||||
| "               line. | "               line. | ||||||
| "               (*) Add indent "\left(" and "\right)" | "               (*) Add indent "\left(" and "\right)" | ||||||
| "               (*) Trust user when in "verbatim" and "lstlisting" | "               (*) Trust user when in "verbatim" and "lstlisting" | ||||||
| "               2012/03/11 by Zhou Yichao <broken.zhou AT gmail.com> | "               2012/03/11 by Yichao Zhou <broken.zhou AT gmail.com> | ||||||
| "               (*) Modify "&" so that only indent when current line start with | "               (*) Modify "&" so that only indent when current line start with | ||||||
| "                   "&". | "                   "&". | ||||||
| "               2012/03/12 by Zhou Yichao <broken.zhou AT gmail.com> | "               2012/03/12 by Yichao Zhou <broken.zhou AT gmail.com> | ||||||
| "               (*) Modify indentkeys. | "               (*) Modify indentkeys. | ||||||
| "               2012/03/18 by Zhou Yichao <broken.zhou AT gmail.com> | "               2012/03/18 by Yichao Zhou <broken.zhou AT gmail.com> | ||||||
| "               (*) Add &cpo | "               (*) Add &cpo | ||||||
| "               2013/05/02 by Zhou Yichao <broken.zhou AT gmail.com> | "               2013/05/02 by Yichao Zhou <broken.zhou AT gmail.com> | ||||||
| "               (*) Fix problem about GetTeXIndent checker. Thank Albert Netymk | "               (*) Fix problem about GetTeXIndent checker. Thank Albert Netymk | ||||||
| "                   for reporting this. | "                   for reporting this. | ||||||
| "               2014/06/23 by Zhou Yichao <broken.zhou AT gmail.com> | "               2014/06/23 by Yichao Zhou <broken.zhou AT gmail.com> | ||||||
| "               (*) Remove the feature g:tex_indent_and because it is buggy. | "               (*) Remove the feature g:tex_indent_and because it is buggy. | ||||||
| "               (*) If there is not any obvious indentation hints, we do not | "               (*) If there is not any obvious indentation hints, we do not | ||||||
| "                   alert our user's current indentation. | "                   alert our user's current indentation. | ||||||
| "               (*) g:tex_indent_brace now only works if the open brace is the | "               (*) g:tex_indent_brace now only works if the open brace is the | ||||||
| "                   last character of that line. | "                   last character of that line. | ||||||
| "               2014/08/03 by Zhou Yichao <broken.zhou AT gmail.com> | "               2014/08/03 by Yichao Zhou <broken.zhou AT gmail.com> | ||||||
| "               (*) Indent current line if last line has larger indentation | "               (*) Indent current line if last line has larger indentation | ||||||
| "               2014/08/09 by Zhou Yichao <broken.zhou AT gmail.com> | "               2016/11/08 by Yichao Zhou <broken.zhou AT gmail.com> | ||||||
| "               (*) Add missing return value for s:GetEndIndentation(...) | "               (*) Fix problems for \[ and \].  Thanks Bruno for reporting. | ||||||
|  | "               2017/04/30 by Yichao Zhou <broken.zhou AT gmail.com> | ||||||
|  | "               (*) Fix a bug between g:tex_noindent_env and g:tex_indent_items | ||||||
|  | "                   Now g:tex_noindent_env='document\|verbatim\|itemize' (Emacs | ||||||
|  | "                   style) is supported.  Thanks Miles Wheeler for reporting. | ||||||
| " | " | ||||||
| " }}} | " }}} | ||||||
|  |  | ||||||
| @@ -206,17 +210,19 @@ function! GetTeXIndent() " {{{ | |||||||
|  |  | ||||||
|     " Add a 'shiftwidth' after beginning of environments. |     " Add a 'shiftwidth' after beginning of environments. | ||||||
|     " Don't add it for \begin{document} and \begin{verbatim} |     " Don't add it for \begin{document} and \begin{verbatim} | ||||||
|     ""if line =~ '^\s*\\begin{\(.*\)}'  && line !~ 'verbatim'  |     " if line =~ '^\s*\\begin{\(.*\)}'  && line !~ 'verbatim' | ||||||
|     " LH modification : \begin does not always start a line |     " LH modification : \begin does not always start a line | ||||||
|     " ZYC modification : \end after \begin won't cause wrong indent anymore |     " ZYC modification : \end after \begin won't cause wrong indent anymore | ||||||
|     if line =~ '\\begin{.*}' && line !~ g:tex_noindent_env |     if line =~ '\\begin{.*}'  | ||||||
|         let ind = ind + &sw |         if line !~ g:tex_noindent_env | ||||||
|         let stay = 0 |             let ind = ind + shiftwidth() | ||||||
|  |             let stay = 0 | ||||||
|  |         endif | ||||||
|  |  | ||||||
|         if g:tex_indent_items |         if g:tex_indent_items | ||||||
|             " Add another sw for item-environments |             " Add another sw for item-environments | ||||||
|             if line =~ g:tex_itemize_env |             if line =~ g:tex_itemize_env | ||||||
|                 let ind = ind + &sw |                 let ind = ind + shiftwidth() | ||||||
|                 let stay = 0 |                 let stay = 0 | ||||||
|             endif |             endif | ||||||
|         endif |         endif | ||||||
| @@ -235,39 +241,37 @@ function! GetTeXIndent() " {{{ | |||||||
|         if g:tex_indent_items |         if g:tex_indent_items | ||||||
|             " Remove another sw for item-environments |             " Remove another sw for item-environments | ||||||
|             if cline =~ g:tex_itemize_env |             if cline =~ g:tex_itemize_env | ||||||
|                 let ind = ind - &sw |                 let ind = ind - shiftwidth() | ||||||
|                 let stay = 0 |                 let stay = 0 | ||||||
|             endif |             endif | ||||||
|         endif |         endif | ||||||
|  |  | ||||||
|         let ind = ind - &sw |         let ind = ind - shiftwidth() | ||||||
|         let stay = 0 |         let stay = 0 | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|     if g:tex_indent_brace |     if g:tex_indent_brace | ||||||
|         let char = line[strlen(line)-1] |         if line =~ '[[{]$' | ||||||
|         if char == '[' || char == '{' |             let ind += shiftwidth() | ||||||
|             let ind += &sw |  | ||||||
|             let stay = 0 |             let stay = 0 | ||||||
|         endif |         endif | ||||||
|  |  | ||||||
|         let cind = indent(v:lnum) |         if cline =~ '^\s*\\\?[\]}]' && s:CheckPairedIsLastCharacter(v:lnum, indent(v:lnum)) | ||||||
|         let char = cline[cind] |             let ind -= shiftwidth() | ||||||
|         if (char == ']' || char == '}') && |  | ||||||
|                     \ s:CheckPairedIsLastCharacter(v:lnum, cind) |  | ||||||
|             let ind -= &sw |  | ||||||
|             let stay = 0 |             let stay = 0 | ||||||
|         endif |         endif | ||||||
|  |  | ||||||
|         for i in range(indent(lnum)+1, strlen(line)-1) |         if line !~ '^\s*\\\?[\]}]' | ||||||
|             let char = line[i] |             for i in range(indent(lnum)+1, strlen(line)-1) | ||||||
|             if char == ']' || char == '}' |                 let char = line[i] | ||||||
|                 if s:CheckPairedIsLastCharacter(lnum, i) |                 if char == ']' || char == '}' | ||||||
|                     let ind -= &sw |                     if s:CheckPairedIsLastCharacter(lnum, i) | ||||||
|                     let stay = 0 |                         let ind -= shiftwidth() | ||||||
|  |                         let stay = 0 | ||||||
|  |                     endif | ||||||
|                 endif |                 endif | ||||||
|             endif |             endfor | ||||||
|         endfor |         endif | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|     " Special treatment for 'item' |     " Special treatment for 'item' | ||||||
| @@ -276,12 +280,12 @@ function! GetTeXIndent() " {{{ | |||||||
|     if g:tex_indent_items |     if g:tex_indent_items | ||||||
|         " '\item' or '\bibitem' itself: |         " '\item' or '\bibitem' itself: | ||||||
|         if cline =~ g:tex_items |         if cline =~ g:tex_items | ||||||
|             let ind = ind - &sw |             let ind = ind - shiftwidth() | ||||||
|             let stay = 0 |             let stay = 0 | ||||||
|         endif |         endif | ||||||
|         " lines following to '\item' are intented once again: |         " lines following to '\item' are intented once again: | ||||||
|         if line =~ g:tex_items |         if line =~ g:tex_items | ||||||
|             let ind = ind + &sw |             let ind = ind + shiftwidth() | ||||||
|             let stay = 0 |             let stay = 0 | ||||||
|         endif |         endif | ||||||
|     endif |     endif | ||||||
| @@ -309,13 +313,13 @@ function! s:GetLastBeginIndentation(lnum) " {{{ | |||||||
|             let matchend -= 1 |             let matchend -= 1 | ||||||
|         endif |         endif | ||||||
|         if matchend == 0 |         if matchend == 0 | ||||||
|             if line =~ g:tex_itemize_env |  | ||||||
|                 return indent(lnum) + 2 * &sw |  | ||||||
|             endif |  | ||||||
|             if line =~ g:tex_noindent_env |             if line =~ g:tex_noindent_env | ||||||
|                 return indent(lnum) |                 return indent(lnum) | ||||||
|             endif |             endif | ||||||
|             return indent(lnum) + &sw |             if line =~ g:tex_itemize_env | ||||||
|  |                 return indent(lnum) + 2 * shiftwidth() | ||||||
|  |             endif | ||||||
|  |             return indent(lnum) + shiftwidth() | ||||||
|         endif |         endif | ||||||
|     endfor |     endfor | ||||||
|     return -1 |     return -1 | ||||||
| @@ -343,17 +347,20 @@ function! s:GetEndIndentation(lnum) " {{{ | |||||||
|             let min_indent = min([min_indent, indent(lnum)]) |             let min_indent = min([min_indent, indent(lnum)]) | ||||||
|         endif |         endif | ||||||
|     endfor |     endfor | ||||||
|     return min_indent - &sw |     return min_indent - shiftwidth() | ||||||
| endfunction | endfunction | ||||||
|  |  | ||||||
| " Most of the code is from matchparen.vim | " Most of the code is from matchparen.vim | ||||||
| function! s:CheckPairedIsLastCharacter(lnum, col) "{{{ | function! s:CheckPairedIsLastCharacter(lnum, col) "{{{ | ||||||
|     " Get the character under the cursor and check if it's in 'matchpairs'. |  | ||||||
|     let c_lnum = a:lnum |     let c_lnum = a:lnum | ||||||
|     let c_col = a:col+1 |     let c_col = a:col+1 | ||||||
|  |  | ||||||
|  |     let line = getline(c_lnum) | ||||||
|  |     if line[c_col-1] == '\' | ||||||
|  |         let c_col = c_col + 1 | ||||||
|  |     endif | ||||||
|  |     let c = line[c_col-1] | ||||||
|  |  | ||||||
|     let c = getline(c_lnum)[c_col-1] |  | ||||||
|     let plist = split(&matchpairs, '.\zs[:,]') |     let plist = split(&matchpairs, '.\zs[:,]') | ||||||
|     let i = index(plist, c) |     let i = index(plist, c) | ||||||
|     if i < 0 |     if i < 0 | ||||||
|   | |||||||
| @@ -25,11 +25,11 @@ function GetTildeIndent(lnum) | |||||||
| 	endif | 	endif | ||||||
|  |  | ||||||
| 	if getline(v:lnum) =~ '^\s*\~\(endif\|else\|elseif\|end\)\>' | 	if getline(v:lnum) =~ '^\s*\~\(endif\|else\|elseif\|end\)\>' | ||||||
| 		return indent(v:lnum) - &sw | 		return indent(v:lnum) - shiftwidth() | ||||||
| 	endif | 	endif | ||||||
|  |  | ||||||
| 	if getline(plnum) =~ '^\s*\~\(if\|foreach\|foreach_row\|xml_loop\|file_loop\|file_write\|file_append\|imap_loopsections\|imap_index\|imap_list\|ldap_search\|post_loopall\|post_loop\|file_loop\|sql_loop_num\|sql_dbmsselect\|search\|sql_loop\|post\|for\|function_define\|silent\|while\|setvalbig\|mail_create\|systempipe\|mail_send\|dual\|elseif\|else\)\>' | 	if getline(plnum) =~ '^\s*\~\(if\|foreach\|foreach_row\|xml_loop\|file_loop\|file_write\|file_append\|imap_loopsections\|imap_index\|imap_list\|ldap_search\|post_loopall\|post_loop\|file_loop\|sql_loop_num\|sql_dbmsselect\|search\|sql_loop\|post\|for\|function_define\|silent\|while\|setvalbig\|mail_create\|systempipe\|mail_send\|dual\|elseif\|else\)\>' | ||||||
| 		return indent(plnum) + &sw | 		return indent(plnum) + shiftwidth() | ||||||
| 	else | 	else | ||||||
| 		return -1 | 		return -1 | ||||||
| 	endif | 	endif | ||||||
|   | |||||||
| @@ -49,26 +49,26 @@ fun! VbGetIndent(lnum) | |||||||
|  |  | ||||||
|     " Add |     " Add | ||||||
|     if previous_line =~? '^\s*\<\(begin\|\%(\%(private\|public\|friend\)\s\+\)\=\%(function\|sub\|property\)\|select\|case\|default\|if\|else\|elseif\|do\|for\|while\|enum\|with\)\>' |     if previous_line =~? '^\s*\<\(begin\|\%(\%(private\|public\|friend\)\s\+\)\=\%(function\|sub\|property\)\|select\|case\|default\|if\|else\|elseif\|do\|for\|while\|enum\|with\)\>' | ||||||
| 	let ind = ind + &sw | 	let ind = ind + shiftwidth() | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|     " Subtract |     " Subtract | ||||||
|     if this_line =~? '^\s*\<end\>\s\+\<select\>' |     if this_line =~? '^\s*\<end\>\s\+\<select\>' | ||||||
| 	if previous_line !~? '^\s*\<select\>' | 	if previous_line !~? '^\s*\<select\>' | ||||||
| 	    let ind = ind - 2 * &sw | 	    let ind = ind - 2 * shiftwidth() | ||||||
| 	else | 	else | ||||||
| 	    " this case is for an empty 'select' -- 'end select' | 	    " this case is for an empty 'select' -- 'end select' | ||||||
| 	    " (w/o any case statements) like: | 	    " (w/o any case statements) like: | ||||||
| 	    " | 	    " | ||||||
| 	    " select case readwrite | 	    " select case readwrite | ||||||
| 	    " end select | 	    " end select | ||||||
| 	    let ind = ind - &sw | 	    let ind = ind - shiftwidth() | ||||||
| 	endif | 	endif | ||||||
|     elseif this_line =~? '^\s*\<\(end\|else\|elseif\|until\|loop\|next\|wend\)\>' |     elseif this_line =~? '^\s*\<\(end\|else\|elseif\|until\|loop\|next\|wend\)\>' | ||||||
| 	let ind = ind - &sw | 	let ind = ind - shiftwidth() | ||||||
|     elseif this_line =~? '^\s*\<\(case\|default\)\>' |     elseif this_line =~? '^\s*\<\(case\|default\)\>' | ||||||
| 	if previous_line !~? '^\s*\<select\>' | 	if previous_line !~? '^\s*\<select\>' | ||||||
| 	    let ind = ind - &sw | 	    let ind = ind - shiftwidth() | ||||||
| 	endif | 	endif | ||||||
|     endif |     endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| " Language:    VHDL | " Language:    VHDL | ||||||
| " Maintainer:  Gerald Lai <laigera+vim?gmail.com> | " Maintainer:  Gerald Lai <laigera+vim?gmail.com> | ||||||
| " Version:     1.60 | " Version:     1.60 | ||||||
| " Last Change: 2016 Feb 26 | " Last Change: 2017 Jun 13 | ||||||
| " URL:         http://www.vim.org/scripts/script.php?script_id=1450 | " URL:         http://www.vim.org/scripts/script.php?script_id=1450 | ||||||
|  |  | ||||||
| " only load this indent file when no other was loaded | " only load this indent file when no other was loaded | ||||||
| @@ -114,9 +114,9 @@ function GetVHDLindent() | |||||||
|       return ind2 + m |       return ind2 + m | ||||||
|     else |     else | ||||||
|       if g:vhdl_indent_genportmap |       if g:vhdl_indent_genportmap | ||||||
|         return ind2 + stridx(prevs_noi, '(') + &sw |         return ind2 + stridx(prevs_noi, '(') + shiftwidth() | ||||||
|       else |       else | ||||||
|         return ind2 + &sw |         return ind2 + shiftwidth() | ||||||
|       endif |       endif | ||||||
|     endif |     endif | ||||||
|   endif |   endif | ||||||
| @@ -128,7 +128,7 @@ function GetVHDLindent() | |||||||
|     if g:vhdl_indent_rhsassign |     if g:vhdl_indent_rhsassign | ||||||
|       return ind2 + matchend(prevs_noi, '<=\s*\ze.') |       return ind2 + matchend(prevs_noi, '<=\s*\ze.') | ||||||
|     else |     else | ||||||
|       return ind2 + &sw |       return ind2 + shiftwidth() | ||||||
|     endif |     endif | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
| @@ -218,12 +218,12 @@ function GetVHDLindent() | |||||||
|       let ps = getline(pn) |       let ps = getline(pn) | ||||||
|  |  | ||||||
|       if (ps =~? s:NC.'\<begin\>') |       if (ps =~? s:NC.'\<begin\>') | ||||||
|         return indent(pn) - &sw |         return indent(pn) - shiftwidth() | ||||||
|       endif |       endif | ||||||
|     endwhile |     endwhile | ||||||
|  |  | ||||||
|     if (pn == 0) |     if (pn == 0) | ||||||
|       return ind - &sw |       return ind - shiftwidth() | ||||||
|     else |     else | ||||||
|       return indent(pn) |       return indent(pn) | ||||||
|     endif |     endif | ||||||
| @@ -237,7 +237,7 @@ function GetVHDLindent() | |||||||
|     " keyword: "type" |     " keyword: "type" | ||||||
|     let s3 = s:NC.s:NE.'\<type\>' |     let s3 = s:NC.s:NE.'\<type\>' | ||||||
|     if curs !~? s3.'.*'.s:NC.'\<\%(record\|units\)\>.*'.s:ES && prevs =~? s3 |     if curs !~? s3.'.*'.s:NC.'\<\%(record\|units\)\>.*'.s:ES && prevs =~? s3 | ||||||
|       let ind = ind + &sw |       let ind = ind + shiftwidth() | ||||||
|     endif |     endif | ||||||
|     return ind |     return ind | ||||||
|   endif |   endif | ||||||
| @@ -282,7 +282,7 @@ function GetVHDLindent() | |||||||
|   " removed:  "begin", "case", "elsif", "if", "loop", "record", "units", "while" |   " removed:  "begin", "case", "elsif", "if", "loop", "record", "units", "while" | ||||||
|   " where:    anywhere in previous line |   " where:    anywhere in previous line | ||||||
|   if prevs =~? s:NC.s:NE.'\<\%(block\|process\)\>' |   if prevs =~? s:NC.s:NE.'\<\%(block\|process\)\>' | ||||||
|     return ind + &sw |     return ind + shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " indent:   +sw |   " indent:   +sw | ||||||
| @@ -290,7 +290,7 @@ function GetVHDLindent() | |||||||
|   " removed:  "component", "for", "when", "with" |   " removed:  "component", "for", "when", "with" | ||||||
|   " where:    start of previous line |   " where:    start of previous line | ||||||
|   if prevs =~? '^\s*\%(architecture\|configuration\|entity\|package\)\>' |   if prevs =~? '^\s*\%(architecture\|configuration\|entity\|package\)\>' | ||||||
|     return ind + &sw |     return ind + shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " indent:   +sw |   " indent:   +sw | ||||||
| @@ -298,7 +298,7 @@ function GetVHDLindent() | |||||||
|   " removed:  "generate", "is", "=>" |   " removed:  "generate", "is", "=>" | ||||||
|   " where:    end of previous line |   " where:    end of previous line | ||||||
|   if prevs =~? s:NC.'\<select'.s:ES |   if prevs =~? s:NC.'\<select'.s:ES | ||||||
|     return ind + &sw |     return ind + shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " indent:   +sw |   " indent:   +sw | ||||||
| @@ -310,7 +310,7 @@ function GetVHDLindent() | |||||||
|   " where:    end of previous line |   " where:    end of previous line | ||||||
|   " _note_:   indent allowed to leave this filter |   " _note_:   indent allowed to leave this filter | ||||||
|   if prevs =~? s:NC.'\%(\<begin\>\|'.s:NE.'\<\%(loop\|record\|units\)\>\)' || prevs =~? '^\s*\%(component\|else\|for\)\>' || prevs =~? s:NC.'\%('.s:NE.'\<generate\|\<\%(is\|then\)\|=>\)'.s:ES |   if prevs =~? s:NC.'\%(\<begin\>\|'.s:NE.'\<\%(loop\|record\|units\)\>\)' || prevs =~? '^\s*\%(component\|else\|for\)\>' || prevs =~? s:NC.'\%('.s:NE.'\<generate\|\<\%(is\|then\)\|=>\)'.s:ES | ||||||
|     let ind = ind + &sw |     let ind = ind + shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " **************************************************************************************** |   " **************************************************************************************** | ||||||
| @@ -322,7 +322,7 @@ function GetVHDLindent() | |||||||
|     if prevs =~? s:NC.'\<is'.s:ES |     if prevs =~? s:NC.'\<is'.s:ES | ||||||
|       return ind |       return ind | ||||||
|     elseif prevs !~? s4 |     elseif prevs !~? s4 | ||||||
|       return ind - &sw |       return ind - shiftwidth() | ||||||
|     else |     else | ||||||
|       return ind2 |       return ind2 | ||||||
|     endif |     endif | ||||||
| @@ -336,7 +336,7 @@ function GetVHDLindent() | |||||||
|     if prevs =~? '^\s*\%(elsif\|'.s5.'\)' |     if prevs =~? '^\s*\%(elsif\|'.s5.'\)' | ||||||
|       return ind |       return ind | ||||||
|     else |     else | ||||||
|       return ind - &sw |       return ind - shiftwidth() | ||||||
|     endif |     endif | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
| @@ -367,9 +367,9 @@ function GetVHDLindent() | |||||||
|         "where:    start of previous non-comment line |         "where:    start of previous non-comment line | ||||||
|         if m == 1 |         if m == 1 | ||||||
|           if ps =~? '^\s*end\s\+case\>' |           if ps =~? '^\s*end\s\+case\>' | ||||||
|             return indent(pn) - 2 * &sw |             return indent(pn) - 2 * shiftwidth() | ||||||
|           elseif ps =~? '^\s*when\>' |           elseif ps =~? '^\s*when\>' | ||||||
|             return indent(pn) - &sw |             return indent(pn) - shiftwidth() | ||||||
|           elseif ps =~? '^\s*case\>' |           elseif ps =~? '^\s*case\>' | ||||||
|             return indent(pn) |             return indent(pn) | ||||||
|           endif |           endif | ||||||
| @@ -385,14 +385,14 @@ function GetVHDLindent() | |||||||
|       let pn = prevnonblank(pn - 1) |       let pn = prevnonblank(pn - 1) | ||||||
|       let ps = getline(pn) |       let ps = getline(pn) | ||||||
|     endwhile |     endwhile | ||||||
|     return ind - &sw |     return ind - shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " indent:   -sw |   " indent:   -sw | ||||||
|   " keyword:  ")" |   " keyword:  ")" | ||||||
|   " where:    start of current line |   " where:    start of current line | ||||||
|   if curs =~ '^\s*)' |   if curs =~ '^\s*)' | ||||||
|     return ind - &sw |     return ind - shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " indent:   0 |   " indent:   0 | ||||||
| @@ -407,7 +407,7 @@ function GetVHDLindent() | |||||||
|   " where:    start of current line |   " where:    start of current line | ||||||
|   "if curs =~? '^\s*end\s\+\w\+\>' |   "if curs =~? '^\s*end\s\+\w\+\>' | ||||||
|   if curs =~? '^\s*end\%(\s\|;'.s:ES.'\)' |   if curs =~? '^\s*end\%(\s\|;'.s:ES.'\)' | ||||||
|     return ind - &sw |     return ind - shiftwidth() | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|   " **************************************************************************************** |   " **************************************************************************************** | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| " Language:	xml | " Language:	xml | ||||||
| " Maintainer:	Johannes Zellner <johannes@zellner.org> | " Maintainer:	Johannes Zellner <johannes@zellner.org> | ||||||
| " Last Change:	2012 Jul 25 | " Last Change:	2017 Jun 13 | ||||||
| " Notes:	1) does not indent pure non-xml code (e.g. embedded scripts) | " Notes:	1) does not indent pure non-xml code (e.g. embedded scripts) | ||||||
| "		2) will be confused by unbalanced tags in comments | "		2) will be confused by unbalanced tags in comments | ||||||
| "		or CDATA sections. | "		or CDATA sections. | ||||||
| @@ -67,7 +67,7 @@ endfun | |||||||
| fun! <SID>XmlIndentSum(lnum, style, add) | fun! <SID>XmlIndentSum(lnum, style, add) | ||||||
|     let line = getline(a:lnum) |     let line = getline(a:lnum) | ||||||
|     if a:style == match(line, '^\s*</') |     if a:style == match(line, '^\s*</') | ||||||
| 	return (&sw * | 	return (shiftwidth() * | ||||||
| 	\  (<SID>XmlIndentWithPattern(line, b:xml_indent_open) | 	\  (<SID>XmlIndentWithPattern(line, b:xml_indent_open) | ||||||
| 	\ - <SID>XmlIndentWithPattern(line, b:xml_indent_close) | 	\ - <SID>XmlIndentWithPattern(line, b:xml_indent_close) | ||||||
| 	\ - <SID>XmlIndentWithPattern(line, '.\{-}/>'))) + a:add | 	\ - <SID>XmlIndentWithPattern(line, '.\{-}/>'))) + a:add | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| " Vim indent file | " Vim indent file | ||||||
| " Language:         YAML | " Language:         YAML | ||||||
| " Maintainer:       Nikolai Pavlov <zyx.vim@gmail.com> | " Maintainer:       Nikolai Pavlov <zyx.vim@gmail.com> | ||||||
| " Last Change:	    2015 Nov 01 | " Last Change:	    2017 Jun 13 | ||||||
|  |  | ||||||
| " Only load this indent file when no other was loaded. | " Only load this indent file when no other was loaded. | ||||||
| if exists('b:did_indent') | if exists('b:did_indent') | ||||||
| @@ -24,14 +24,6 @@ if exists('*GetYAMLIndent') | |||||||
|     finish |     finish | ||||||
| endif | endif | ||||||
|  |  | ||||||
| if exists('*shiftwidth') |  | ||||||
|     let s:shiftwidth = function('shiftwidth') |  | ||||||
| else |  | ||||||
|     function s:shiftwidth() |  | ||||||
|         return &shiftwidth |  | ||||||
|     endfunction |  | ||||||
| endif |  | ||||||
|  |  | ||||||
| function s:FindPrevLessIndentedLine(lnum, ...) | function s:FindPrevLessIndentedLine(lnum, ...) | ||||||
|     let prevlnum = prevnonblank(a:lnum-1) |     let prevlnum = prevnonblank(a:lnum-1) | ||||||
|     let curindent = a:0 ? a:1 : indent(a:lnum) |     let curindent = a:0 ? a:1 : indent(a:lnum) | ||||||
| @@ -119,7 +111,7 @@ function GetYAMLIndent(lnum) | |||||||
|         " |         " | ||||||
|         " - |- |         " - |- | ||||||
|         "     Block scalar without indentation indicator |         "     Block scalar without indentation indicator | ||||||
|         return previndent+s:shiftwidth() |         return previndent+shiftwidth() | ||||||
|     elseif prevline =~# '\v[:-]\ [|>]%(\d+[+\-]?|[+\-]?\d+)%(\#.*|\s*)$' |     elseif prevline =~# '\v[:-]\ [|>]%(\d+[+\-]?|[+\-]?\d+)%(\#.*|\s*)$' | ||||||
|         " - |+2 |         " - |+2 | ||||||
|         "   block scalar with indentation indicator |         "   block scalar with indentation indicator | ||||||
| @@ -155,7 +147,7 @@ function GetYAMLIndent(lnum) | |||||||
|                 \                             '\v)%(\s+|\s*%(\#.*)?$))*' |                 \                             '\v)%(\s+|\s*%(\#.*)?$))*' | ||||||
|         " Mapping with: value |         " Mapping with: value | ||||||
|         "     that is multiline scalar |         "     that is multiline scalar | ||||||
|         return previndent+s:shiftwidth() |         return previndent+shiftwidth() | ||||||
|     endif |     endif | ||||||
|     return previndent |     return previndent | ||||||
| endfunction | endfunction | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| " Vim script to work like "less" | " Vim script to work like "less" | ||||||
| " Maintainer:	Bram Moolenaar <Bram@vim.org> | " Maintainer:	Bram Moolenaar <Bram@vim.org> | ||||||
| " Last Change:	2015 Nov 15 | " Last Change:	2017 Mar 31 | ||||||
|  |  | ||||||
| " Avoid loading this file twice, allow the user to define his own script. | " Avoid loading this file twice, allow the user to define his own script. | ||||||
| if exists("loaded_less") | if exists("loaded_less") | ||||||
| @@ -81,6 +81,10 @@ fun! s:Help() | |||||||
|   echo "\n" |   echo "\n" | ||||||
|   echo "/pattern  Search for pattern        ?pattern  Search backward for pattern" |   echo "/pattern  Search for pattern        ?pattern  Search backward for pattern" | ||||||
|   echo "n         next pattern match        N         Previous pattern match" |   echo "n         next pattern match        N         Previous pattern match" | ||||||
|  |   if &foldmethod != "manual" | ||||||
|  |   echo "\n" | ||||||
|  |     echo "zR        open all folds            zm        increase fold level" | ||||||
|  |   endif | ||||||
|   echo "\n" |   echo "\n" | ||||||
|   echo ":n<Enter> Next file                 :p<Enter> Previous file" |   echo ":n<Enter> Next file                 :p<Enter> Previous file" | ||||||
|   echo "\n" |   echo "\n" | ||||||
| @@ -96,7 +100,11 @@ map <C-F> <Space> | |||||||
| map <PageDown> <Space> | map <PageDown> <Space> | ||||||
| map <kPageDown> <Space> | map <kPageDown> <Space> | ||||||
| map <S-Down> <Space> | map <S-Down> <Space> | ||||||
| map z <Space> | " If 'foldmethod' was changed keep the "z" commands, e.g. "zR" to open all | ||||||
|  | " folds. | ||||||
|  | if &foldmethod == "manual" | ||||||
|  |   map z <Space> | ||||||
|  | endif | ||||||
| map <Esc><Space> <Space> | map <Esc><Space> <Space> | ||||||
| fun! s:NextPage() | fun! s:NextPage() | ||||||
|   if line(".") == line("$") |   if line(".") == line("$") | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| " These commands create the option window. | " These commands create the option window. | ||||||
| " | " | ||||||
| " Maintainer:	Bram Moolenaar <Bram@vim.org> | " Maintainer:	Bram Moolenaar <Bram@vim.org> | ||||||
| " Last Change:	2017 Jan 28 | " Last Change:	2017 Jul 15 | ||||||
|  |  | ||||||
| " If there already is an option window, jump to that one. | " If there already is an option window, jump to that one. | ||||||
| if bufwinnr("option-window") > 0 | if bufwinnr("option-window") > 0 | ||||||
| @@ -506,6 +506,14 @@ if has("cursorbind") | |||||||
|   call append("$", "\t(local to window)") |   call append("$", "\t(local to window)") | ||||||
|   call <SID>BinOptionL("crb") |   call <SID>BinOptionL("crb") | ||||||
| endif | endif | ||||||
|  | if has("terminal") | ||||||
|  |   call append("$", "termsize\tsize of a terminal window") | ||||||
|  |   call append("$", "\t(local to window)") | ||||||
|  |   call <SID>OptionL("tms") | ||||||
|  |   call append("$", "termkey\tkey that precedes Vim commands in a terminal window") | ||||||
|  |   call append("$", "\t(local to window)") | ||||||
|  |   call <SID>OptionL("tk") | ||||||
|  | endif | ||||||
|  |  | ||||||
|  |  | ||||||
| call <SID>Header("multiple tab pages") | call <SID>Header("multiple tab pages") | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| "  matchit.vim: (global plugin) Extended "%" matching | "  matchit.vim: (global plugin) Extended "%" matching | ||||||
| "  Last Change: 2016 Aug 21 | "  Last Change: 2017 March 26 | ||||||
| "  Maintainer:  Benji Fisher PhD   <benji@member.AMS.org> | "  Maintainer:  Benji Fisher PhD   <benji@member.AMS.org> | ||||||
| "  Version:     1.13.2, for Vim 6.3+ | "  Version:     1.13.3, for Vim 6.3+ | ||||||
| "		Fix from Tommy Allen included. | "		Fix from Tommy Allen included. | ||||||
| "		Fix from Fernando Torres included. | "		Fix from Fernando Torres included. | ||||||
| "		Improvement from Ken Takata included. | "		Improvement from Ken Takata included. | ||||||
| @@ -90,12 +90,15 @@ let s:notslash = '\\\@<!\%(\\\\\)*' | |||||||
|  |  | ||||||
| function! s:Match_wrapper(word, forward, mode) range | function! s:Match_wrapper(word, forward, mode) range | ||||||
|   " In s:CleanUp(), :execute "set" restore_options . |   " In s:CleanUp(), :execute "set" restore_options . | ||||||
|   let restore_options = (&ic ? " " : " no") . "ignorecase" |   let restore_options = "" | ||||||
|   if exists("b:match_ignorecase") |   if exists("b:match_ignorecase") && b:match_ignorecase != &ic | ||||||
|  |     let restore_options .= (&ic ? " " : " no") . "ignorecase" | ||||||
|     let &ignorecase = b:match_ignorecase |     let &ignorecase = b:match_ignorecase | ||||||
|   endif |   endif | ||||||
|   let restore_options = " ve=" . &ve . restore_options |   if &ve != '' | ||||||
|   set ve= |     let restore_options = " ve=" . &ve . restore_options | ||||||
|  |     set ve= | ||||||
|  |   endif | ||||||
|   " If this function was called from Visual mode, make sure that the cursor |   " If this function was called from Visual mode, make sure that the cursor | ||||||
|   " is at the correct end of the Visual range: |   " is at the correct end of the Visual range: | ||||||
|   if a:mode == "v" |   if a:mode == "v" | ||||||
| @@ -283,7 +286,9 @@ endfun | |||||||
| " Restore options and do some special handling for Operator-pending mode. | " Restore options and do some special handling for Operator-pending mode. | ||||||
| " The optional argument is the tail of the matching group. | " The optional argument is the tail of the matching group. | ||||||
| fun! s:CleanUp(options, mode, startline, startcol, ...) | fun! s:CleanUp(options, mode, startline, startcol, ...) | ||||||
|   execute "set" a:options |   if strlen(a:options) | ||||||
|  |     execute "set" a:options | ||||||
|  |   endif | ||||||
|   " Open folds, if appropriate. |   " Open folds, if appropriate. | ||||||
|   if a:mode != "o" |   if a:mode != "o" | ||||||
|     if &foldopen =~ "percent" |     if &foldopen =~ "percent" | ||||||
| @@ -635,8 +640,9 @@ fun! s:MultiMatch(spflag, mode) | |||||||
|   if !exists("b:match_words") || b:match_words == "" |   if !exists("b:match_words") || b:match_words == "" | ||||||
|     return {} |     return {} | ||||||
|   end |   end | ||||||
|   let restore_options = (&ic ? "" : "no") . "ignorecase" |   let restore_options = "" | ||||||
|   if exists("b:match_ignorecase") |   if exists("b:match_ignorecase") && b:match_ignorecase != &ic | ||||||
|  |     let restore_options .= (&ic ? " " : " no") . "ignorecase" | ||||||
|     let &ignorecase = b:match_ignorecase |     let &ignorecase = b:match_ignorecase | ||||||
|   endif |   endif | ||||||
|   let startline = line(".") |   let startline = line(".") | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| " Language:         AutoHotkey script file | " Language:         AutoHotkey script file | ||||||
| " Maintainer:       Michael Wong | " Maintainer:       Michael Wong | ||||||
| "                   https://github.com/mmikeww/autohotkey.vim | "                   https://github.com/mmikeww/autohotkey.vim | ||||||
| " Latest Revision:  2017-01-23 | " Latest Revision:  2017-04-03 | ||||||
| " Previous Maintainers:       SungHyun Nam <goweol@gmail.com> | " Previous Maintainers:       SungHyun Nam <goweol@gmail.com> | ||||||
| "                             Nikolai Weibull <now@bitwi.se> | "                             Nikolai Weibull <now@bitwi.se> | ||||||
|  |  | ||||||
| @@ -106,6 +106,7 @@ syn keyword autohotkeyCommand | |||||||
|       \ FormatTime IfInString IfNotInString Sort StringCaseSense StringGetPos |       \ FormatTime IfInString IfNotInString Sort StringCaseSense StringGetPos | ||||||
|       \ StringLeft StringRight StringLower StringUpper StringMid StringReplace |       \ StringLeft StringRight StringLower StringUpper StringMid StringReplace | ||||||
|       \ StringSplit StringTrimLeft StringTrimRight StringLen |       \ StringSplit StringTrimLeft StringTrimRight StringLen | ||||||
|  |       \ StrSplit StrReplace Throw | ||||||
|       \ Control ControlClick ControlFocus ControlGet ControlGetFocus |       \ Control ControlClick ControlFocus ControlGet ControlGetFocus | ||||||
|       \ ControlGetPos ControlGetText ControlMove ControlSend ControlSendRaw |       \ ControlGetPos ControlGetText ControlMove ControlSend ControlSendRaw | ||||||
|       \ ControlSetText Menu PostMessage SendMessage SetControlDelay |       \ ControlSetText Menu PostMessage SendMessage SetControlDelay | ||||||
| @@ -119,17 +120,18 @@ syn keyword autohotkeyCommand | |||||||
|       \ SetCapsLockState SetNumLockState SetScrollLockState |       \ SetCapsLockState SetNumLockState SetScrollLockState | ||||||
|  |  | ||||||
| syn keyword autohotkeyFunction | syn keyword autohotkeyFunction | ||||||
|       \ InStr RegExMatch RegExReplace StrLen SubStr Asc Chr |       \ InStr RegExMatch RegExReplace StrLen SubStr Asc Chr Func | ||||||
|       \ DllCall VarSetCapacity WinActive WinExist IsLabel OnMessage  |       \ DllCall VarSetCapacity WinActive WinExist IsLabel OnMessage  | ||||||
|       \ Abs Ceil Exp Floor Log Ln Mod Round Sqrt Sin Cos Tan ASin ACos ATan |       \ Abs Ceil Exp Floor Log Ln Mod Round Sqrt Sin Cos Tan ASin ACos ATan | ||||||
|       \ FileExist GetKeyState NumGet NumPut StrGet StrPut RegisterCallback |       \ FileExist GetKeyState NumGet NumPut StrGet StrPut RegisterCallback | ||||||
|       \ IsFunc Trim LTrim RTrim IsObject Object Array FileOpen |       \ IsFunc Trim LTrim RTrim IsObject Object Array FileOpen | ||||||
|       \ ComObjActive ComObjArray ComObjConnect ComObjCreate ComObjGet |       \ ComObjActive ComObjArray ComObjConnect ComObjCreate ComObjGet | ||||||
|       \ ComObjError ComObjFlags ComObjQuery ComObjType ComObjValue ComObject |       \ ComObjError ComObjFlags ComObjQuery ComObjType ComObjValue ComObject | ||||||
|  |       \ Format Exception | ||||||
|  |  | ||||||
| syn keyword autohotkeyStatement | syn keyword autohotkeyStatement | ||||||
|       \ Break Continue Exit ExitApp Gosub Goto OnExit Pause Return |       \ Break Continue Exit ExitApp Gosub Goto OnExit Pause Return | ||||||
|       \ Suspend Reload |       \ Suspend Reload new class extends | ||||||
|  |  | ||||||
| syn keyword autohotkeyRepeat | syn keyword autohotkeyRepeat | ||||||
|       \ Loop |       \ Loop | ||||||
| @@ -138,7 +140,7 @@ syn keyword autohotkeyConditional | |||||||
|       \ IfExist IfNotExist If IfEqual IfLess IfGreater Else |       \ IfExist IfNotExist If IfEqual IfLess IfGreater Else | ||||||
|       \ IfWinExist IfWinNotExist IfWinActive IfWinNotActive |       \ IfWinExist IfWinNotExist IfWinActive IfWinNotActive | ||||||
|       \ IfNotEqual IfLessOrEqual IfGreaterOrEqual |       \ IfNotEqual IfLessOrEqual IfGreaterOrEqual | ||||||
|       \ while until for in |       \ while until for in try catch finally | ||||||
|  |  | ||||||
| syn match   autohotkeyPreProcStart | syn match   autohotkeyPreProcStart | ||||||
|       \ nextgroup= |       \ nextgroup= | ||||||
| @@ -178,7 +180,7 @@ syn keyword autohotkeyPreProc | |||||||
|       \ Warn |       \ Warn | ||||||
|  |  | ||||||
| syn keyword autohotkeyMatchClass | syn keyword autohotkeyMatchClass | ||||||
|       \ ahk_group ahk_class ahk_id ahk_pid |       \ ahk_group ahk_class ahk_id ahk_pid ahk_exe | ||||||
|  |  | ||||||
| syn match   autohotkeyNumbers | syn match   autohotkeyNumbers | ||||||
|       \ display |       \ display | ||||||
| @@ -217,7 +219,7 @@ syn match   autohotkeyHotkey | |||||||
|       \ contains=autohotkeyKey, |       \ contains=autohotkeyKey, | ||||||
|       \   autohotkeyHotkeyDelimiter |       \   autohotkeyHotkeyDelimiter | ||||||
|       \ display |       \ display | ||||||
|       \ '^.\{-}::' |       \ '^\s*\S*\%( Up\)\?::' | ||||||
|  |  | ||||||
| syn match   autohotkeyKey | syn match   autohotkeyKey | ||||||
|       \ contained |       \ contained | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| " Vim syntax file | " Vim syntax file | ||||||
| " Language:	C | " Language:	C | ||||||
| " Maintainer:	Bram Moolenaar <Bram@vim.org> | " Maintainer:	Bram Moolenaar <Bram@vim.org> | ||||||
| " Last Change:	2016 Nov 18 | " Last Change:	2017 Apr 30 | ||||||
|  |  | ||||||
| " Quit when a (custom) syntax file was already loaded | " Quit when a (custom) syntax file was already loaded | ||||||
| if exists("b:current_syntax") | if exists("b:current_syntax") | ||||||
| @@ -311,44 +311,32 @@ if !exists("c_no_ansi") || exists("c_ansi_constants") || exists("c_gnu") | |||||||
|     syn keyword cConstant PTRDIFF_MIN PTRDIFF_MAX SIG_ATOMIC_MIN SIG_ATOMIC_MAX |     syn keyword cConstant PTRDIFF_MIN PTRDIFF_MAX SIG_ATOMIC_MIN SIG_ATOMIC_MAX | ||||||
|     syn keyword cConstant SIZE_MAX WCHAR_MIN WCHAR_MAX WINT_MIN WINT_MAX |     syn keyword cConstant SIZE_MAX WCHAR_MIN WCHAR_MAX WINT_MIN WINT_MAX | ||||||
|   endif |   endif | ||||||
|   syn keyword cConstant FLT_RADIX FLT_ROUNDS |   syn keyword cConstant FLT_RADIX FLT_ROUNDS FLT_DIG FLT_MANT_DIG FLT_EPSILON DBL_DIG DBL_MANT_DIG DBL_EPSILON | ||||||
|   syn keyword cConstant FLT_DIG FLT_MANT_DIG FLT_EPSILON |   syn keyword cConstant LDBL_DIG LDBL_MANT_DIG LDBL_EPSILON FLT_MIN FLT_MAX FLT_MIN_EXP FLT_MAX_EXP FLT_MIN_10_EXP FLT_MAX_10_EXP | ||||||
|   syn keyword cConstant DBL_DIG DBL_MANT_DIG DBL_EPSILON |   syn keyword cConstant DBL_MIN DBL_MAX DBL_MIN_EXP DBL_MAX_EXP DBL_MIN_10_EXP DBL_MAX_10_EXP LDBL_MIN LDBL_MAX LDBL_MIN_EXP LDBL_MAX_EXP | ||||||
|   syn keyword cConstant LDBL_DIG LDBL_MANT_DIG LDBL_EPSILON |   syn keyword cConstant LDBL_MIN_10_EXP LDBL_MAX_10_EXP HUGE_VAL CLOCKS_PER_SEC NULL LC_ALL LC_COLLATE LC_CTYPE LC_MONETARY | ||||||
|   syn keyword cConstant FLT_MIN FLT_MAX FLT_MIN_EXP FLT_MAX_EXP |   syn keyword cConstant LC_NUMERIC LC_TIME SIG_DFL SIG_ERR SIG_IGN SIGABRT SIGFPE SIGILL SIGHUP SIGINT SIGSEGV SIGTERM | ||||||
|   syn keyword cConstant FLT_MIN_10_EXP FLT_MAX_10_EXP |  | ||||||
|   syn keyword cConstant DBL_MIN DBL_MAX DBL_MIN_EXP DBL_MAX_EXP |  | ||||||
|   syn keyword cConstant DBL_MIN_10_EXP DBL_MAX_10_EXP |  | ||||||
|   syn keyword cConstant LDBL_MIN LDBL_MAX LDBL_MIN_EXP LDBL_MAX_EXP |  | ||||||
|   syn keyword cConstant LDBL_MIN_10_EXP LDBL_MAX_10_EXP |  | ||||||
|   syn keyword cConstant HUGE_VAL CLOCKS_PER_SEC NULL |  | ||||||
|   syn keyword cConstant LC_ALL LC_COLLATE LC_CTYPE LC_MONETARY |  | ||||||
|   syn keyword cConstant LC_NUMERIC LC_TIME |  | ||||||
|   syn keyword cConstant SIG_DFL SIG_ERR SIG_IGN |  | ||||||
|   syn keyword cConstant SIGABRT SIGFPE SIGILL SIGHUP SIGINT SIGSEGV SIGTERM |  | ||||||
|   " Add POSIX signals as well... |   " Add POSIX signals as well... | ||||||
|   syn keyword cConstant SIGABRT SIGALRM SIGCHLD SIGCONT SIGFPE SIGHUP |   syn keyword cConstant SIGABRT SIGALRM SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT SIGSEGV | ||||||
|   syn keyword cConstant SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT SIGSEGV |   syn keyword cConstant SIGSTOP SIGTERM SIGTRAP SIGTSTP SIGTTIN SIGTTOU SIGUSR1 SIGUSR2 | ||||||
|   syn keyword cConstant SIGSTOP SIGTERM SIGTRAP SIGTSTP SIGTTIN SIGTTOU |   syn keyword cConstant _IOFBF _IOLBF _IONBF BUFSIZ EOF WEOF FOPEN_MAX FILENAME_MAX L_tmpnam | ||||||
|   syn keyword cConstant SIGUSR1 SIGUSR2 |   syn keyword cConstant SEEK_CUR SEEK_END SEEK_SET TMP_MAX stderr stdin stdout EXIT_FAILURE EXIT_SUCCESS RAND_MAX | ||||||
|   syn keyword cConstant _IOFBF _IOLBF _IONBF BUFSIZ EOF WEOF |  | ||||||
|   syn keyword cConstant FOPEN_MAX FILENAME_MAX L_tmpnam |  | ||||||
|   syn keyword cConstant SEEK_CUR SEEK_END SEEK_SET |  | ||||||
|   syn keyword cConstant TMP_MAX stderr stdin stdout |  | ||||||
|   syn keyword cConstant EXIT_FAILURE EXIT_SUCCESS RAND_MAX |  | ||||||
|   " POSIX 2001 |   " POSIX 2001 | ||||||
|   syn keyword cConstant SIGBUS SIGPOLL SIGPROF SIGSYS SIGURG |   syn keyword cConstant SIGBUS SIGPOLL SIGPROF SIGSYS SIGURG SIGVTALRM SIGXCPU SIGXFSZ | ||||||
|   syn keyword cConstant SIGVTALRM SIGXCPU SIGXFSZ |  | ||||||
|   " non-POSIX signals |   " non-POSIX signals | ||||||
|   syn keyword cConstant SIGWINCH SIGINFO |   syn keyword cConstant SIGWINCH SIGINFO | ||||||
|   " Add POSIX errors as well |   " Add POSIX errors as well.  List comes from: | ||||||
|   syn keyword cConstant E2BIG EACCES EAGAIN EBADF EBADMSG EBUSY |   " http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html | ||||||
|   syn keyword cConstant ECANCELED ECHILD EDEADLK EDOM EEXIST EFAULT |   syn keyword cConstant E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN EALREADY EBADF | ||||||
|   syn keyword cConstant EFBIG EILSEQ EINPROGRESS EINTR EINVAL EIO EISDIR |   syn keyword cConstant EBADMSG EBUSY ECANCELED ECHILD ECONNABORTED ECONNREFUSED ECONNRESET EDEADLK | ||||||
|   syn keyword cConstant EMFILE EMLINK EMSGSIZE ENAMETOOLONG ENFILE ENODEV |   syn keyword cConstant EDESTADDRREQ EDOM EDQUOT EEXIST EFAULT EFBIG EHOSTUNREACH EIDRM EILSEQ | ||||||
|   syn keyword cConstant ENOENT ENOEXEC ENOLCK ENOMEM ENOSPC ENOSYS |   syn keyword cConstant EINPROGRESS EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK EMSGSIZE | ||||||
|   syn keyword cConstant ENOTDIR ENOTEMPTY ENOTSUP ENOTTY ENXIO EPERM |   syn keyword cConstant EMULTIHOP ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH ENFILE ENOBUFS ENODATA | ||||||
|   syn keyword cConstant EPIPE ERANGE EROFS ESPIPE ESRCH ETIMEDOUT EXDEV |   syn keyword cConstant ENODEV ENOENT ENOEXEC ENOLCK ENOLINK ENOMEM ENOMSG ENOPROTOOPT ENOSPC ENOSR | ||||||
|  |   syn keyword cConstant ENOSTR ENOSYS ENOTCONN ENOTDIR ENOTEMPTY ENOTRECOVERABLE ENOTSOCK ENOTSUP | ||||||
|  |   syn keyword cConstant ENOTTY ENXIO EOPNOTSUPP EOVERFLOW EOWNERDEAD EPERM EPIPE EPROTO | ||||||
|  |   syn keyword cConstant EPROTONOSUPPORT EPROTOTYPE ERANGE EROFS ESPIPE ESRCH ESTALE ETIME ETIMEDOUT | ||||||
|  |   syn keyword cConstant ETXTBSY EWOULDBLOCK EXDEV | ||||||
|   " math.h |   " math.h | ||||||
|   syn keyword cConstant M_E M_LOG2E M_LOG10E M_LN2 M_LN10 M_PI M_PI_2 M_PI_4 |   syn keyword cConstant M_E M_LOG2E M_LOG10E M_LN2 M_LN10 M_PI M_PI_2 M_PI_4 | ||||||
|   syn keyword cConstant M_1_PI M_2_PI M_2_SQRTPI M_SQRT2 M_SQRT1_2 |   syn keyword cConstant M_1_PI M_2_PI M_2_SQRTPI M_SQRT2 M_SQRT1_2 | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| " Language:	C++ | " Language:	C++ | ||||||
| " Current Maintainer:	vim-jp (https://github.com/vim-jp/vim-cpp) | " Current Maintainer:	vim-jp (https://github.com/vim-jp/vim-cpp) | ||||||
| " Previous Maintainer:	Ken Shan <ccshan@post.harvard.edu> | " Previous Maintainer:	Ken Shan <ccshan@post.harvard.edu> | ||||||
| " Last Change:	2016 Oct 28 | " Last Change:	2017 Jun 05 | ||||||
|  |  | ||||||
| " quit when a syntax file was already loaded | " quit when a syntax file was already loaded | ||||||
| if exists("b:current_syntax") | if exists("b:current_syntax") | ||||||
| @@ -48,7 +48,7 @@ endif | |||||||
| if !exists("cpp_no_cpp14") | if !exists("cpp_no_cpp14") | ||||||
|   syn case ignore |   syn case ignore | ||||||
|   syn match cppNumber		display "\<0b[01]\('\=[01]\+\)*\(u\=l\{0,2}\|ll\=u\)\>" |   syn match cppNumber		display "\<0b[01]\('\=[01]\+\)*\(u\=l\{0,2}\|ll\=u\)\>" | ||||||
|   syn match cppNumber		display "\<[1-9]\('\=\d\+\)*\(u\=l\{0,2}\|ll\=u\)\>" |   syn match cppNumber		display "\<[1-9]\('\=\d\+\)*\(u\=l\{0,2}\|ll\=u\)\>" contains=cFloat | ||||||
|   syn match cppNumber		display "\<0x\x\('\=\x\+\)*\(u\=l\{0,2}\|ll\=u\)\>" |   syn match cppNumber		display "\<0x\x\('\=\x\+\)*\(u\=l\{0,2}\|ll\=u\)\>" | ||||||
|   syn case match |   syn case match | ||||||
| endif | endif | ||||||
|   | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	 Justin M. Keyes
					Justin M. Keyes