Merge #7499 'vim-patch: runtime'

This commit is contained in:
Justin M. Keyes 2017-11-07 02:49:08 +01:00 committed by GitHub
commit ad527392ab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
123 changed files with 3949 additions and 1826 deletions

View File

@ -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
View 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:

View 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

View 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

View File

@ -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

View 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

View File

@ -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).

View File

@ -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

View File

@ -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)

View File

@ -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.

View File

@ -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
@ -4078,12 +4080,15 @@ 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: > This can be used to save and restore the cursor position: >
let save_cursor = getcurpos() let save_cursor = getcurpos()
MoveTheCursorAround MoveTheCursorAround
call setpos('.', save_cursor) 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*

View File

@ -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

View File

@ -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

View File

@ -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
View 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:

View File

@ -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*

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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*

View File

@ -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

View File

@ -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:

View File

@ -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".

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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,7 +1421,7 @@ 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()
@ -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

View File

@ -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
View 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
View 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

View File

@ -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\>' )

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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')

View File

@ -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

View File

@ -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

View File

@ -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))

View File

@ -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

View File

@ -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

View File

@ -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('.')

View File

@ -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

View File

@ -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 =~ '\\\@<!\%(\\\\\)*\\$'

View File

@ -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*$'

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,35 +56,42 @@ 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
let idx = stridx('])};',s:looking_at())
if idx is 3 | let pat = '[{}()]' | continue | endif
if idx + 1 if idx + 1
if !s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,a:stop) if s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,a:stop) <= 0
break break
endif endif
else else
return return
endif endif
endif
endwhile endwhile
call call('cursor',pos) call call('cursor',pos)
endfunction endfunction
@ -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')
else if s:syn_at(line('.'),col('.')) !~? s:syng_com
return s:token() return s:token()
endif endif
endwhile endwhile
else
return s:token()
endif
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$'
elseif char == '>'
return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow'
elseif char == ':'
return getline('.')[col('.')-2] != ':' && s:label_col()
endif endif
return syn =~? 'regex' || char !~ '[-=~!<*+,/?^%|&([]' 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 == '>'
return getline('.')[col('.')-2] == '=' || s:syn_at(line('.'),col('.')) =~? '^jsflow'
elseif char == ':'
return !s:save_pos('s:expr_col')
elseif char == '/'
return s:syn_at(line('.'),col('.')) =~? 'regex'
endif
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

View File

@ -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

View File

@ -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\)\>')

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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*%%'

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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ël <rpl2@free.fr> " Maintainer: BERTRAND Joë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

View File

@ -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
View 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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 ind = ind + shiftwidth()
let stay = 0 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,40 +241,38 @@ 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
if line !~ '^\s*\\\?[\]}]'
for i in range(indent(lnum)+1, strlen(line)-1) for i in range(indent(lnum)+1, strlen(line)-1)
let char = line[i] let char = line[i]
if char == ']' || char == '}' if char == ']' || char == '}'
if s:CheckPairedIsLastCharacter(lnum, i) if s:CheckPairedIsLastCharacter(lnum, i)
let ind -= &sw let ind -= shiftwidth()
let stay = 0 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

View File

@ -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

View File

@ -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

View File

@ -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
" **************************************************************************************** " ****************************************************************************************

View File

@ -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

View File

@ -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

View File

@ -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("$")

View File

@ -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")

View File

@ -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
if &ve != ''
let restore_options = " ve=" . &ve . restore_options let restore_options = " ve=" . &ve . restore_options
set ve= 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, ...)
if strlen(a:options)
execute "set" 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(".")

View File

@ -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

View File

@ -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

View File

@ -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