mirror of
https://github.com/zoriya/vim.git
synced 2025-12-19 13:45:18 +00:00
updated for version 7.0149
This commit is contained in:
391
runtime/autoload/csscomplete.vim
Normal file
391
runtime/autoload/csscomplete.vim
Normal file
@@ -0,0 +1,391 @@
|
|||||||
|
" Vim completion script
|
||||||
|
" Language: CSS 2.1
|
||||||
|
" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
|
||||||
|
" Last Change: 2005 Sep 19
|
||||||
|
|
||||||
|
function! csscomplete#CompleteCSS(findstart, base)
|
||||||
|
if a:findstart
|
||||||
|
" We need whole line to proper checking
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
" There are few chars important for context:
|
||||||
|
" ^ ; : { } /* */
|
||||||
|
" Where ^ is start of line and /* */ are comment borders
|
||||||
|
" Depending on their relative position to cursor we will now what should
|
||||||
|
" be completed.
|
||||||
|
" 1. if nearest are ^ or { or ; current word is property
|
||||||
|
" 2. if : it is value
|
||||||
|
" 3. if } we are outside of css definitions
|
||||||
|
" 4. for comments ignoring is be the easiest but assume they are the same
|
||||||
|
" as 1.
|
||||||
|
|
||||||
|
let line = a:base
|
||||||
|
let res = []
|
||||||
|
let res2 = []
|
||||||
|
let borders = {}
|
||||||
|
|
||||||
|
" We need the last occurrence of char so reverse line
|
||||||
|
let revline = join(reverse(split(line, '.\zs')), '')
|
||||||
|
let openbrace = stridx(revline, '{')
|
||||||
|
let closebrace = stridx(revline, '}')
|
||||||
|
let colon = stridx(revline, ':')
|
||||||
|
let semicolon = stridx(revline, ';')
|
||||||
|
let opencomm = stridx(revline, '*/') " Line was reversed
|
||||||
|
let closecomm = stridx(revline, '/*') " Line was reversed
|
||||||
|
let style = stridx(revline, '=\s*elyts') " Line was reversed
|
||||||
|
let atrule = stridx(revline, '@')
|
||||||
|
|
||||||
|
if openbrace > -1
|
||||||
|
let borders[openbrace] = "openbrace"
|
||||||
|
endif
|
||||||
|
if closebrace > -1
|
||||||
|
let borders[closebrace] = "closebrace"
|
||||||
|
endif
|
||||||
|
if colon > -1
|
||||||
|
let borders[colon] = "colon"
|
||||||
|
endif
|
||||||
|
if semicolon > -1
|
||||||
|
let borders[semicolon] = "semicolon"
|
||||||
|
endif
|
||||||
|
if opencomm > -1
|
||||||
|
let borders[opencomm] = "opencomm"
|
||||||
|
endif
|
||||||
|
if closecomm > -1
|
||||||
|
let borders[closecomm] = "closecomm"
|
||||||
|
endif
|
||||||
|
if style > -1
|
||||||
|
let borders[style] = "style"
|
||||||
|
endif
|
||||||
|
if atrule > -1
|
||||||
|
let borders[atrule] = "atrule"
|
||||||
|
endif
|
||||||
|
|
||||||
|
if len(borders) == 0 || borders[min(keys(borders))] =~ '^\(openbrace\|semicolon\|opencomm\|closecomm\|style\)$'
|
||||||
|
" Complete properties
|
||||||
|
|
||||||
|
let values = split("azimuth background-attachment background-color background-image background-position background-repeat background border-collapse border-color border-spacing border-style border-top border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width border-bottom-width border-left-width border-width border bottom caption-side clear clip color content counter-increment counter-reset cue-after cue-before cue cursor direction display elevation empty-cells float font-family font-size font-style font-variant font-weight font height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-right margin-left margin-top margin-bottom max-height max-width min-height min-width orphans outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page-break-after page-break-before page-break-inside pause-after pause-before pause pitch-range pitch play-during position quotes richness right speak-header speak-numeral speak-punctuation speak speech-rate stress table-layout text-align text-decoration text-indent text-transform top unicode-bidi vertical-align visibility voice-family volume white-space widows width word-spacing z-index")
|
||||||
|
|
||||||
|
let propbase = matchstr(line, '.\{-}\ze[a-zA-Z-]*$')
|
||||||
|
let entered_property = matchstr(line, '.\{-}\zs[a-zA-Z-]*$')
|
||||||
|
|
||||||
|
for m in values
|
||||||
|
if m =~? '^'.entered_property
|
||||||
|
call add(res, propbase . m.': ')
|
||||||
|
elseif m =~? entered_property
|
||||||
|
call add(res2, propbase . m.': ')
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return res + res2
|
||||||
|
|
||||||
|
elseif borders[min(keys(borders))] == 'colon'
|
||||||
|
" Get name of property
|
||||||
|
let prop = tolower(matchstr(line, '\zs[a-zA-Z-]*\ze\s*:[^:]\{-}$'))
|
||||||
|
|
||||||
|
if prop == 'azimuth'
|
||||||
|
let values = ["left-side", "far-left", "left", "center-left", "center", "center-right", "right", "far-right", "right-side", "behind", "leftwards", "rightwards"]
|
||||||
|
elseif prop == 'background-attachment'
|
||||||
|
let values = ["scroll", "fixed"]
|
||||||
|
elseif prop == 'background-color'
|
||||||
|
let values = ["transparent", "rgb(", "#"]
|
||||||
|
elseif prop == 'background-image'
|
||||||
|
let values = ["url(", "none"]
|
||||||
|
elseif prop == 'background-position'
|
||||||
|
let vals = matchstr(line, '.*:\s*\zs.*')
|
||||||
|
if vals =~ '^\([a-zA-Z]\+\)\?$'
|
||||||
|
let values = ["top", "center", "bottom"]
|
||||||
|
elseif vals =~ '^[a-zA-Z]\+\s\+\([a-zA-Z]\+\)\?$'
|
||||||
|
let values = ["left", "center", "right"]
|
||||||
|
else
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
elseif prop == 'background-repeat'
|
||||||
|
let values = ["repeat", "repeat-x", "repeat-y", "no-repeat"]
|
||||||
|
elseif prop == 'background'
|
||||||
|
let values = ["url(", "scroll", "fixed", "transparent", "rgb(", "#", "none", "top", "center", "bottom" , "left", "right", "repeat", "repeat-x", "repeat-y", "no-repeat"]
|
||||||
|
elseif prop == 'border-collapse'
|
||||||
|
let values = ["collapse", "separate"]
|
||||||
|
elseif prop == 'border-color'
|
||||||
|
let values = ["rgb(", "#", "transparent"]
|
||||||
|
elseif prop == 'border-spacing'
|
||||||
|
return []
|
||||||
|
elseif prop == 'border-style'
|
||||||
|
let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
|
||||||
|
elseif prop =~ 'border-\(top\|right\|bottom\|left\)$'
|
||||||
|
let vals = matchstr(line, '.*:\s*\zs.*')
|
||||||
|
if vals =~ '^\([a-zA-Z0-9.]\+\)\?$'
|
||||||
|
let values = ["thin", "thick", "medium"]
|
||||||
|
elseif vals =~ '^[a-zA-Z0-9.]\+\s\+\([a-zA-Z]\+\)\?$'
|
||||||
|
let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
|
||||||
|
elseif vals =~ '^[a-zA-Z0-9.]\+\s\+[a-zA-Z]\+\s\+\([a-zA-Z(]\+\)\?$'
|
||||||
|
let values = ["rgb(", "#", "transparent"]
|
||||||
|
else
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
elseif prop =~ 'border-\(top\|right\|bottom\|left\)-color'
|
||||||
|
let values = ["rgb(", "#", "transparent"]
|
||||||
|
elseif prop =~ 'border-\(top\|right\|bottom\|left\)-style'
|
||||||
|
let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
|
||||||
|
elseif prop =~ 'border-\(top\|right\|bottom\|left\)-width'
|
||||||
|
let values = ["thin", "thick", "medium"]
|
||||||
|
elseif prop == 'border-width'
|
||||||
|
let values = ["thin", "thick", "medium"]
|
||||||
|
elseif prop == 'border'
|
||||||
|
let vals = matchstr(line, '.*:\s*\zs.*')
|
||||||
|
if vals =~ '^\([a-zA-Z0-9.]\+\)\?$'
|
||||||
|
let values = ["thin", "thick", "medium"]
|
||||||
|
elseif vals =~ '^[a-zA-Z0-9.]\+\s\+\([a-zA-Z]\+\)\?$'
|
||||||
|
let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
|
||||||
|
elseif vals =~ '^[a-zA-Z0-9.]\+\s\+[a-zA-Z]\+\s\+\([a-zA-Z(]\+\)\?$'
|
||||||
|
let values = ["rgb(", "#", "transparent"]
|
||||||
|
else
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
elseif prop == 'bottom'
|
||||||
|
let values = ["auto"]
|
||||||
|
elseif prop == 'caption-side'
|
||||||
|
let values = ["top", "bottom"]
|
||||||
|
elseif prop == 'clear'
|
||||||
|
let values = ["none", "left", "right", "both"]
|
||||||
|
elseif prop == 'clip'
|
||||||
|
let values = ["auto", "rect("]
|
||||||
|
elseif prop == 'color'
|
||||||
|
let values = ["rgb(", "#"]
|
||||||
|
elseif prop == 'content'
|
||||||
|
let values = ["normal", "attr(", "open-quote", "close-quote", "no-open-quote", "no-close-quote"]
|
||||||
|
elseif prop =~ 'counter-\(increment\|reset\)$'
|
||||||
|
let values = ["none"]
|
||||||
|
elseif prop =~ '^\(cue-after\|cue-before\|cue\)$'
|
||||||
|
let values = ["url(", "none"]
|
||||||
|
elseif prop == 'cursor'
|
||||||
|
let values = ["url(", "auto", "crosshair", "default", "pointer", "move", "e-resize", "ne-resize", "nw-resize", "n-resize", "se-resize", "sw-resize", "s-resize", "w-resize", "text", "wait", "help", "progress"]
|
||||||
|
elseif prop == 'direction'
|
||||||
|
let values = ["ltr", "rtl"]
|
||||||
|
elseif prop == 'display'
|
||||||
|
let values = ["inline", "block", "list-item", "run-in", "inline-block", "table", "inline-table", "table-row-group", "table-header-group", "table-footer-group", "table-row", "table-column-group", "table-column", "table-cell", "table-caption", "none"]
|
||||||
|
elseif prop == 'elevation'
|
||||||
|
let values = ["below", "level", "above", "higher", "lower"]
|
||||||
|
elseif prop == 'empty-cells'
|
||||||
|
let values = ["show", "hide"]
|
||||||
|
elseif prop == 'float'
|
||||||
|
let values = ["left", "right", "none"]
|
||||||
|
elseif prop == 'font-family'
|
||||||
|
let values = ["sans-serif", "serif", "monospace", "cursive", "fantasy"]
|
||||||
|
elseif prop == 'font-size'
|
||||||
|
return []
|
||||||
|
elseif prop == 'font-style'
|
||||||
|
let values = ["normal", "italic", "oblique"]
|
||||||
|
elseif prop == 'font-variant'
|
||||||
|
let values = ["normal", "small-caps"]
|
||||||
|
elseif prop == 'font-weight'
|
||||||
|
let values = ["normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900"]
|
||||||
|
elseif prop == 'font'
|
||||||
|
let values = ["normal", "italic", "oblique", "small-caps", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900", "sans-serif", "serif", "monospace", "cursive", "fantasy", "caption", "icon", "menu", "message-box", "small-caption", "status-bar"]
|
||||||
|
elseif prop =~ '^\(height\|width\)$'
|
||||||
|
let values = ["auto"]
|
||||||
|
elseif prop =~ '^\(left\|rigth\)$'
|
||||||
|
let values = ["auto"]
|
||||||
|
elseif prop == 'letter-spacing'
|
||||||
|
let values = ["normal"]
|
||||||
|
elseif prop == 'line-height'
|
||||||
|
let values = ["normal"]
|
||||||
|
elseif prop == 'list-style-image'
|
||||||
|
let values = ["url(", "none"]
|
||||||
|
elseif prop == 'list-style-position'
|
||||||
|
let values = ["inside", "outside"]
|
||||||
|
elseif prop == 'list-style-type'
|
||||||
|
let values = ["disc", "circle", "square", "decimal", "decimal-leading-zero", "lower-roman", "upper-roman", "lower-latin", "upper-latin", "none"]
|
||||||
|
elseif prop == 'list-style'
|
||||||
|
return []
|
||||||
|
elseif prop == 'margin'
|
||||||
|
let values = ["auto"]
|
||||||
|
elseif prop =~ 'margin-\(right\|left\|top\|bottom\)$'
|
||||||
|
let values = ["auto"]
|
||||||
|
elseif prop == 'max-height'
|
||||||
|
let values = ["auto"]
|
||||||
|
elseif prop == 'max-width'
|
||||||
|
let values = ["none"]
|
||||||
|
elseif prop == 'min-height'
|
||||||
|
let values = ["none"]
|
||||||
|
elseif prop == 'min-width'
|
||||||
|
let values = ["none"]
|
||||||
|
elseif prop == 'orphans'
|
||||||
|
return []
|
||||||
|
elseif prop == 'outline-color'
|
||||||
|
let values = ["rgb(", "#"]
|
||||||
|
elseif prop == 'outline-style'
|
||||||
|
let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
|
||||||
|
elseif prop == 'outline-width'
|
||||||
|
let values = ["thin", "thick", "medium"]
|
||||||
|
elseif prop == 'outline'
|
||||||
|
let vals = matchstr(line, '.*:\s*\zs.*')
|
||||||
|
if vals =~ '^\([a-zA-Z0-9,()#]\+\)\?$'
|
||||||
|
let values = ["rgb(", "#"]
|
||||||
|
elseif vals =~ '^[a-zA-Z0-9,()#]\+\s\+\([a-zA-Z]\+\)\?$'
|
||||||
|
let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
|
||||||
|
elseif vals =~ '^[a-zA-Z0-9,()#]\+\s\+[a-zA-Z]\+\s\+\([a-zA-Z(]\+\)\?$'
|
||||||
|
let values = ["thin", "thick", "medium"]
|
||||||
|
else
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
elseif prop == 'overflow'
|
||||||
|
let values = ["visible", "hidden", "scroll", "auto"]
|
||||||
|
elseif prop == 'padding'
|
||||||
|
return []
|
||||||
|
elseif prop =~ 'padding-\(top\|right\|bottom\|left\)$'
|
||||||
|
return []
|
||||||
|
elseif prop =~ 'page-break-\(after\|before\)$'
|
||||||
|
let values = ["auto", "always", "avoid", "left", "right"]
|
||||||
|
elseif prop == 'page-break-inside'
|
||||||
|
let values = ["auto", "avoid"]
|
||||||
|
elseif prop =~ 'pause-\(after\|before\)$'
|
||||||
|
return []
|
||||||
|
elseif prop == 'pause'
|
||||||
|
return []
|
||||||
|
elseif prop == 'pitch-range'
|
||||||
|
return []
|
||||||
|
elseif prop == 'pitch'
|
||||||
|
let values = ["x-low", "low", "medium", "high", "x-high"]
|
||||||
|
elseif prop == 'play-during'
|
||||||
|
let values = ["url(", "mix", "repeat", "auto", "none"]
|
||||||
|
elseif prop == 'position'
|
||||||
|
let values = ["static", "relative", "absolute", "fixed"]
|
||||||
|
elseif prop == 'quotes'
|
||||||
|
let values = ["none"]
|
||||||
|
elseif prop == 'richness'
|
||||||
|
return []
|
||||||
|
elseif prop == 'speak-header'
|
||||||
|
let values = ["once", "always"]
|
||||||
|
elseif prop == 'speak-numeral'
|
||||||
|
let values = ["digits", "continuous"]
|
||||||
|
elseif prop == 'speak-punctuation'
|
||||||
|
let values = ["code", "none"]
|
||||||
|
elseif prop == 'speak'
|
||||||
|
let values = ["normal", "none", "spell-out"]
|
||||||
|
elseif prop == 'speech-rate'
|
||||||
|
let values = ["x-slow", "slow", "medium", "fast", "x-fast", "faster", "slower"]
|
||||||
|
elseif prop == 'stress'
|
||||||
|
return []
|
||||||
|
elseif prop == 'table-layout'
|
||||||
|
let values = ["auto", "fixed"]
|
||||||
|
elseif prop == 'text-align'
|
||||||
|
let values = ["left", "right", "center", "justify"]
|
||||||
|
elseif prop == 'text-decoration'
|
||||||
|
let values = ["none", "underline", "overline", "line-through", "blink"]
|
||||||
|
elseif prop == 'text-indent'
|
||||||
|
return []
|
||||||
|
elseif prop == 'text-transform'
|
||||||
|
let values = ["capitalize", "uppercase", "lowercase", "none"]
|
||||||
|
elseif prop == 'top'
|
||||||
|
let values = ["auto"]
|
||||||
|
elseif prop == 'unicode-bidi'
|
||||||
|
let values = ["normal", "embed", "bidi-override"]
|
||||||
|
elseif prop == 'vertical-align'
|
||||||
|
let values = ["baseline", "sub", "super", "top", "text-top", "middle", "bottom", "text-bottom"]
|
||||||
|
elseif prop == 'visibility'
|
||||||
|
let values = ["visible", "hidden", "collapse"]
|
||||||
|
elseif prop == 'voice-family'
|
||||||
|
return []
|
||||||
|
elseif prop == 'volume'
|
||||||
|
let values = ["silent", "x-soft", "soft", "medium", "loud", "x-loud"]
|
||||||
|
elseif prop == 'white-space'
|
||||||
|
let values = ["normal", "pre", "nowrap", "pre-wrap", "pre-line"]
|
||||||
|
elseif prop == 'widows'
|
||||||
|
return []
|
||||||
|
elseif prop == 'word-spacing'
|
||||||
|
let values = ["normal"]
|
||||||
|
elseif prop == 'z-index'
|
||||||
|
let values = ["auto"]
|
||||||
|
else
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Complete values
|
||||||
|
let valbase = matchstr(line, '.\{-}\ze[a-zA-Z0-9#,.(_-]*$')
|
||||||
|
let entered_value = matchstr(line, '.\{-}\zs[a-zA-Z0-9#,.(_-]*$')
|
||||||
|
|
||||||
|
for m in values
|
||||||
|
if m =~? '^'.entered_value
|
||||||
|
call add(res, valbase . m)
|
||||||
|
elseif m =~? entered_value
|
||||||
|
call add(res2, valbase . m)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return res + res2
|
||||||
|
|
||||||
|
elseif borders[min(keys(borders))] == 'closebrace'
|
||||||
|
|
||||||
|
return []
|
||||||
|
|
||||||
|
elseif borders[min(keys(borders))] == 'atrule'
|
||||||
|
|
||||||
|
let afterat = matchstr(line, '.*@\zs.*')
|
||||||
|
|
||||||
|
if afterat =~ '\s'
|
||||||
|
|
||||||
|
let atrulename = matchstr(line, '.*@\zs[a-zA-Z-]\+\ze')
|
||||||
|
|
||||||
|
if atrulename == 'media'
|
||||||
|
let values = ["screen", "tty", "tv", "projection", "handheld", "print", "braille", "aural", "all"]
|
||||||
|
|
||||||
|
let atruleafterbase = matchstr(line, '.*@media\s\+\ze.*$')
|
||||||
|
let entered_atruleafter = matchstr(line, '.*@media\s\+\zs.*$')
|
||||||
|
|
||||||
|
elseif atrulename == 'import'
|
||||||
|
let atruleafterbase = matchstr(line, '.*@import\s\+\ze.*$')
|
||||||
|
let entered_atruleafter = matchstr(line, '.*@import\s\+\zs.*$')
|
||||||
|
|
||||||
|
if entered_atruleafter =~ "^[\"']"
|
||||||
|
let filestart = matchstr(entered_atruleafter, '^.\zs.*')
|
||||||
|
let files = split(glob(filestart.'*'), '\n')
|
||||||
|
let values = map(copy(files), '"\"".v:val')
|
||||||
|
|
||||||
|
elseif entered_atruleafter =~ "^url("
|
||||||
|
let filestart = matchstr(entered_atruleafter, "^url([\"']\\?\\zs.*")
|
||||||
|
let files = split(glob(filestart.'*'), '\n')
|
||||||
|
let values = map(copy(files), '"url(".v:val')
|
||||||
|
|
||||||
|
else
|
||||||
|
let values = ['"', 'url(']
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
else
|
||||||
|
return []
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
for m in values
|
||||||
|
if m =~? '^'.entered_atruleafter
|
||||||
|
call add(res, atruleafterbase . m)
|
||||||
|
elseif m =~? entered_atruleafter
|
||||||
|
call add(res2, atruleafterbase . m)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return res + res2
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
let values = ["charset", "page", "media", "import"]
|
||||||
|
|
||||||
|
let atrulebase = matchstr(line, '.*@\ze[a-zA-Z -]*$')
|
||||||
|
let entered_atrule = matchstr(line, '.*@\zs[a-zA-Z-]*$')
|
||||||
|
|
||||||
|
for m in values
|
||||||
|
if m =~? '^'.entered_atrule
|
||||||
|
call add(res, atrulebase . m.' ')
|
||||||
|
elseif m =~? entered_atrule
|
||||||
|
call add(res2, atrulebase . m.' ')
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return res + res2
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
return []
|
||||||
|
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
" Vim completion script
|
" Vim completion script
|
||||||
" Language: XHTML 1.0 Strict
|
" Language: XHTML 1.0 Strict
|
||||||
" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
|
" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
|
||||||
" Last Change: 2005 Sep 15
|
" Last Change: 2005 Sep 19
|
||||||
|
|
||||||
function! htmlcomplete#CompleteTags(findstart, base)
|
function! htmlcomplete#CompleteTags(findstart, base)
|
||||||
if a:findstart
|
if a:findstart
|
||||||
@@ -11,26 +11,53 @@ function! htmlcomplete#CompleteTags(findstart, base)
|
|||||||
while start >= 0 && line[start - 1] !~ '<'
|
while start >= 0 && line[start - 1] !~ '<'
|
||||||
let start -= 1
|
let start -= 1
|
||||||
endwhile
|
endwhile
|
||||||
|
if start < 0
|
||||||
|
let curpos = line('.')
|
||||||
|
let stylestart = searchpair('<style\>', '', '<\/style\>', "bnW")
|
||||||
|
let styleend = searchpair('<style\>', '', '<\/style\>', "nW")
|
||||||
|
if stylestart != 0 && styleend != 0
|
||||||
|
if stylestart <= curpos && styleend >= curpos
|
||||||
|
let b:csscompl = 1
|
||||||
|
let start = 0
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
return start
|
return start
|
||||||
else
|
else
|
||||||
" Set attribute groups
|
" Check if we should do CSS completion inside of <style> tag
|
||||||
let g:coreattrs = ["id", "class", "style", "title"]
|
if exists("b:csscompl")
|
||||||
let g:i18n = ["lang", "xml:lang", "dir"]
|
unlet! b:csscompl
|
||||||
let g:events = ["onclick", "ondblclick", "onmousedown", "onmouseup", "onmousemove",
|
return csscomplete#CompleteCSS(0, a:base)
|
||||||
\ "onmouseout", "onkeypress", "onkeydown", "onkeyup"]
|
endif
|
||||||
let g:focus = ["accesskey", "tabindex", "onfocus", "onblur"]
|
|
||||||
let g:coregroup = g:coreattrs
|
|
||||||
let g:coregroup = extend(g:coregroup, g:i18n)
|
|
||||||
let g:coregroup = extend(g:coregroup, g:events)
|
|
||||||
" find tags matching with "a:base"
|
|
||||||
let res = []
|
|
||||||
" If a:base contains > it means we are already outside of tag and we
|
|
||||||
" should abandon action
|
|
||||||
if a:base =~ '>'
|
if a:base =~ '>'
|
||||||
|
" Generally if a:base contains > it means we are outside of tag and
|
||||||
|
" should abandon action - with one exception: <style> span { bo
|
||||||
|
if a:base =~ 'style[^>]\{-}>[^<]\{-}$'
|
||||||
|
return csscomplete#CompleteCSS(0, a:base)
|
||||||
|
else
|
||||||
return []
|
return []
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Set attribute groups
|
||||||
|
let coreattrs = ["id", "class", "style", "title"]
|
||||||
|
let i18n = ["lang", "xml:lang", "dir=\"ltr\" ", "dir=\"rtl\" "]
|
||||||
|
let events = ["onclick", "ondblclick", "onmousedown", "onmouseup", "onmousemove",
|
||||||
|
\ "onmouseout", "onkeypress", "onkeydown", "onkeyup"]
|
||||||
|
let focus = ["accesskey", "tabindex", "onfocus", "onblur"]
|
||||||
|
let coregroup = coreattrs + i18n + events
|
||||||
|
let res = []
|
||||||
|
let res2 = []
|
||||||
|
" find tags matching with "a:base"
|
||||||
|
" If a:base contains > it means we are already outside of tag and we
|
||||||
|
" should abandon action
|
||||||
" If a:base contains white space it is attribute.
|
" If a:base contains white space it is attribute.
|
||||||
" It could be also value of attribute...
|
" It could be also value of attribute...
|
||||||
|
" We have to get first word to offer
|
||||||
|
" proper completions
|
||||||
|
let tag = split(a:base)[0]
|
||||||
|
" Get last word, it should be attr name
|
||||||
|
let attr = matchstr(a:base, '.*\s\zs.*')
|
||||||
" Possible situations where any prediction would be difficult:
|
" Possible situations where any prediction would be difficult:
|
||||||
" 1. Events attributes
|
" 1. Events attributes
|
||||||
if a:base =~ '\s'
|
if a:base =~ '\s'
|
||||||
@@ -40,6 +67,113 @@ function! htmlcomplete#CompleteTags(findstart, base)
|
|||||||
" Also retrieving class names from current file and linked
|
" Also retrieving class names from current file and linked
|
||||||
" stylesheets.
|
" stylesheets.
|
||||||
if a:base =~ "\\(on[a-z]*\\|style\\|class\\)\\s*=\\s*[\"']"
|
if a:base =~ "\\(on[a-z]*\\|style\\|class\\)\\s*=\\s*[\"']"
|
||||||
|
if a:base =~ "class\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
|
||||||
|
" Handle class name completion
|
||||||
|
" 1. Find lines of <link stylesheet>
|
||||||
|
" 1a. Check file for @import
|
||||||
|
" 2. Extract filename(s?) of stylesheet,
|
||||||
|
call cursor(1,1)
|
||||||
|
let head = getline(search('<head\>'), search('<\/head>'))
|
||||||
|
let headjoined = join(copy(head), ' ')
|
||||||
|
if headjoined =~ '<style'
|
||||||
|
let stylehead = substitute(headjoined, '+>\*[', ' ', 'g')
|
||||||
|
let styleheadlines = split(stylehead)
|
||||||
|
let headclasslines = filter(copy(styleheadlines), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
|
||||||
|
let internal = 1
|
||||||
|
else
|
||||||
|
let internal = 0
|
||||||
|
endif
|
||||||
|
let styletable = []
|
||||||
|
let secimportfiles = []
|
||||||
|
let filestable = filter(copy(head), "v:val =~ '\\(@import\\|link.*stylesheet\\)'")
|
||||||
|
for line in filestable
|
||||||
|
if line =~ "@import"
|
||||||
|
let styletable += [matchstr(line, "import\\s\\+\\(url(\\)\\?[\"']\\?\\zs\\f\\+\\ze")]
|
||||||
|
elseif line =~ "<link"
|
||||||
|
let styletable += [matchstr(line, "href\\s*=\\s*[\"']\\zs\\f\\+\\ze")]
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
for file in filestable
|
||||||
|
if filereadable(file)
|
||||||
|
let stylesheet = readfile(file)
|
||||||
|
let secimport = filter(copy(stylesheet), "v:val =~ '@import'")
|
||||||
|
if len(secimport) > 0
|
||||||
|
for line in secimport
|
||||||
|
let secimportfiles += [matchstr(line, "import\\s\\+\\(url(\\)\\?[\"']\\?\\zs\\f\\+\\ze")]
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
let cssfiles = styletable + secimportfiles
|
||||||
|
let classes = []
|
||||||
|
for file in cssfiles
|
||||||
|
if filereadable(file)
|
||||||
|
let stylesheet = readfile(file)
|
||||||
|
let stylefile = join(stylesheet)
|
||||||
|
let stylefile = substitute(stylefile, '+>\*[', ' ', 'g')
|
||||||
|
let stylesheet = split(stylefile)
|
||||||
|
let classlines = filter(copy(stylesheet), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
|
||||||
|
endif
|
||||||
|
" We gathered classes definitions from all external files
|
||||||
|
let classes += classlines
|
||||||
|
endfor
|
||||||
|
if internal == 1
|
||||||
|
let classes += headclasslines
|
||||||
|
endif
|
||||||
|
let elements = {}
|
||||||
|
for element in classes
|
||||||
|
if element =~ '^\.'
|
||||||
|
let class = matchstr(element, '^\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
|
||||||
|
let class = substitute(class, ':.*', '', '')
|
||||||
|
if has_key(elements, "common")
|
||||||
|
let elements["common"] .= " ".class
|
||||||
|
else
|
||||||
|
let elements["common"] = class
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let class = matchstr(element, '[a-zA-Z1-6]*\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
|
||||||
|
let tagname = tolower(matchstr(element, '[a-zA-Z1-6]*\ze.'))
|
||||||
|
if tagname != ''
|
||||||
|
if has_key(elements, tagname)
|
||||||
|
let elements[tagname] .= " ".class
|
||||||
|
else
|
||||||
|
let elements[tagname] = class
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
if has_key(elements, tag) && has_key(elements, "common")
|
||||||
|
let values = split(elements[tag]." ".elements["common"])
|
||||||
|
elseif has_key(elements, tag) && !has_key(elements, "common")
|
||||||
|
let values = split(elements[tag])
|
||||||
|
elseif !has_key(elements, tag) && has_key(elements, "common")
|
||||||
|
let values = split(elements["common"])
|
||||||
|
else
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
" We need special version of sbase
|
||||||
|
let classbase = matchstr(a:base, ".*[\"']")
|
||||||
|
let classquote = matchstr(classbase, '.$')
|
||||||
|
|
||||||
|
|
||||||
|
let entered_class = matchstr(attr, ".*=\\s*[\"']\\zs.*")
|
||||||
|
|
||||||
|
for m in sort(values)
|
||||||
|
if m =~? '^'.entered_class
|
||||||
|
call add(res, classbase . m . classquote . ' ')
|
||||||
|
elseif m =~? entered_class
|
||||||
|
call add(res2, classbase . m . classquote . ' ')
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return res + res2
|
||||||
|
|
||||||
|
elseif a:base =~ "style\\s*=\\s*[\"'][^\"']*$"
|
||||||
|
return csscomplete#CompleteCSS(0, a:base)
|
||||||
|
|
||||||
|
endif
|
||||||
let stripbase = matchstr(a:base, ".*\\(on[a-z]*\\|style\\|class\\)\\s*=\\s*[\"']\\zs.*")
|
let stripbase = matchstr(a:base, ".*\\(on[a-z]*\\|style\\|class\\)\\s*=\\s*[\"']\\zs.*")
|
||||||
" Now we have a:base stripped from all chars up to style/class.
|
" Now we have a:base stripped from all chars up to style/class.
|
||||||
" It may fail with some strange style value combinations.
|
" It may fail with some strange style value combinations.
|
||||||
@@ -47,11 +181,6 @@ function! htmlcomplete#CompleteTags(findstart, base)
|
|||||||
return []
|
return []
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
" We have to get first word to offer
|
|
||||||
" proper attributes.
|
|
||||||
let tag = split(a:base)[0]
|
|
||||||
" Get last word, it should be attr name
|
|
||||||
let attr = matchstr(a:base, '.*\s\zs.*')
|
|
||||||
" If attr contains =\s*[\"'] we catched value of attribute
|
" If attr contains =\s*[\"'] we catched value of attribute
|
||||||
if attr =~ "=\s*[\"']"
|
if attr =~ "=\s*[\"']"
|
||||||
" Let do attribute specific completion
|
" Let do attribute specific completion
|
||||||
@@ -97,7 +226,7 @@ function! htmlcomplete#CompleteTags(findstart, base)
|
|||||||
endif
|
endif
|
||||||
elseif attrname == 'type'
|
elseif attrname == 'type'
|
||||||
if a:base =~ '^input'
|
if a:base =~ '^input'
|
||||||
let values = ["input-text", "password", "checkbox", "radio", "submit", "reset", "input-file", "hidden", "input-image", "input-button"]
|
let values = ["text", "password", "checkbox", "radio", "submit", "reset", "file", "hidden", "image", "button"]
|
||||||
elseif a:base =~ '^button'
|
elseif a:base =~ '^button'
|
||||||
let values = ["button", "submit", "reset"]
|
let values = ["button", "submit", "reset"]
|
||||||
endif
|
endif
|
||||||
@@ -111,128 +240,114 @@ function! htmlcomplete#CompleteTags(findstart, base)
|
|||||||
|
|
||||||
" We need special version of sbase
|
" We need special version of sbase
|
||||||
let attrbase = matchstr(a:base, ".*[\"']")
|
let attrbase = matchstr(a:base, ".*[\"']")
|
||||||
|
let attrquote = matchstr(attrbase, '.$')
|
||||||
|
|
||||||
for m in values
|
for m in values
|
||||||
if m =~ entered_value
|
" This if is needed to not offer all completions as-is
|
||||||
call add(res, attrbase . m . '" ')
|
" alphabetically but sort them. Those beginning with entered
|
||||||
|
" part will be as first choices
|
||||||
|
if m =~ '^'.entered_value
|
||||||
|
call add(res, attrbase . m . attrquote.' ')
|
||||||
|
elseif m =~ entered_value
|
||||||
|
call add(res2, attrbase . m . attrquote.' ')
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
|
return res + res2
|
||||||
|
|
||||||
endif
|
endif
|
||||||
" Shorten a:base to not include last word
|
" Shorten a:base to not include last word
|
||||||
let sbase = matchstr(a:base, '.*\ze\s.*')
|
let sbase = matchstr(a:base, '.*\ze\s.*')
|
||||||
if tag =~ '^\(abbr\|acronym\|b\|bdo\|big\|caption\|cite\|code\|dd\|dfn\|div\|dl\|dt\|em\|fieldset\|h\d\|kbd\|li\|noscript\|ol\|p\|samp\|small\|span\|strong\|sub\|sup\|tt\|ul\|var\)$'
|
if tag =~ '^\(abbr\|acronym\|b\|bdo\|big\|caption\|cite\|code\|dd\|dfn\|div\|dl\|dt\|em\|fieldset\|h\d\|kbd\|li\|noscript\|ol\|p\|samp\|small\|span\|strong\|sub\|sup\|tt\|ul\|var\)$'
|
||||||
let attrs = g:coregroup
|
let attrs = coregroup
|
||||||
elseif tag == 'a'
|
elseif tag == 'a'
|
||||||
let tagspec = ["charset", "type", "name", "href", "hreflang", "rel", "rev", "shape", "coords"]
|
let attrs = coregroup + focus + ["charset", "type", "name", "href", "hreflang", "rel", "rev", "shape", "coords"]
|
||||||
let attrs = extend(tagspec, g:coregroup)
|
|
||||||
let attrs = extend(attrs, g:focus)
|
|
||||||
elseif tag == 'area'
|
elseif tag == 'area'
|
||||||
let attrs = g:coregroup
|
let attrs = coregroup
|
||||||
elseif tag == 'base'
|
elseif tag == 'base'
|
||||||
let attrs = ["href", "id"]
|
let attrs = ["href", "id"]
|
||||||
elseif tag == 'blockquote'
|
elseif tag == 'blockquote'
|
||||||
let attrs = g:coregroup
|
let attrs = coregroup + ["cite"]
|
||||||
let attrs = extend(attrs, ["cite"])
|
|
||||||
elseif tag == 'body'
|
elseif tag == 'body'
|
||||||
let attrs = g:coregroup
|
let attrs = coregroup + ["onload", "onunload"]
|
||||||
let attrs = extend(attrs, ["onload", "onunload"])
|
|
||||||
elseif tag == 'br'
|
elseif tag == 'br'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs
|
||||||
elseif tag == 'button'
|
elseif tag == 'button'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + focus + ["name", "value", "type"]
|
||||||
let attrs = extend(attrs, g:focus)
|
|
||||||
let attrs = extend(attrs, ["name", "value", "type"])
|
|
||||||
elseif tag == '^\(col\|colgroup\)$'
|
elseif tag == '^\(col\|colgroup\)$'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + ["span", "width", "align", "char", "charoff", "valign"]
|
||||||
let attrs = extend(attrs, ["span", "width", "align", "char", "charoff", "valign"])
|
|
||||||
elseif tag =~ '^\(del\|ins\)$'
|
elseif tag =~ '^\(del\|ins\)$'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + ["cite", "datetime"]
|
||||||
let attrs = extend(attrs, ["cite", "datetime"])
|
|
||||||
elseif tag == 'form'
|
elseif tag == 'form'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + ["action", "method=\"get\" ", "method=\"post\" ", "enctype", "onsubmit", "onreset", "accept", "accept-charset"]
|
||||||
let attrs = extend(attrs, ["action", "method", "enctype", "onsubmit", "onreset", "accept", "accept-charset"])
|
|
||||||
elseif tag == 'head'
|
elseif tag == 'head'
|
||||||
let attrs = g:i18n
|
let attrs = i18n + ["id", "profile"]
|
||||||
let attrs = extend(attrs, ["id", "profile"])
|
|
||||||
elseif tag == 'html'
|
elseif tag == 'html'
|
||||||
let attrs = g:i18n
|
let attrs = i18n + ["id", "xmlns"]
|
||||||
let attrs = extend(attrs, ["id", "xmlns"])
|
|
||||||
elseif tag == 'img'
|
elseif tag == 'img'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + ["src", "alt", "longdesc", "height", "width", "usemap", "ismap"]
|
||||||
let attrs = extend(attrs, ["src", "alt", "longdesc", "height", "width", "usemap", "ismap"])
|
|
||||||
elseif tag == 'input'
|
elseif tag == 'input'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + focus + ["type", "name", "value", "checked", "disabled", "readonly", "size", "maxlength", "src", "alt", "usemap", "onselect", "onchange", "accept"]
|
||||||
let attrs = extend(attrs, g:focus)
|
|
||||||
let attrs = extend(attrs, ["type", "name", "value", "checked", "disabled", "readonly", "size", "maxlength", "src", "alt", "usemap", "onselect", "onchange", "accept"])
|
|
||||||
elseif tag == 'label'
|
elseif tag == 'label'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + ["for", "accesskey", "onfocus", "onblur"]
|
||||||
let attrs = extend(attrs, ["for", "accesskey", "onfocus", "onblur"])
|
|
||||||
elseif tag == 'legend'
|
elseif tag == 'legend'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + ["accesskey"]
|
||||||
let attrs = extend(attrs, ["accesskey"])
|
|
||||||
elseif tag == 'link'
|
elseif tag == 'link'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + ["charset", "href", "hreflang", "type", "rel", "rev", "media"]
|
||||||
let attrs = extend(attrs, ["charset", "href", "hreflang", "type", "rel", "rev", "media"])
|
|
||||||
elseif tag == 'map'
|
elseif tag == 'map'
|
||||||
let attrs = g:i18n
|
let attrs = i18n + events + ["id", "class", "style", "title", "name"]
|
||||||
let attrs = extend(attrs, g:events)
|
|
||||||
let attrs = extend(attrs, ["id", "class", "style", "title", "name"])
|
|
||||||
elseif tag == 'meta'
|
elseif tag == 'meta'
|
||||||
let attrs = g:i18n
|
let attrs = i18n + ["id", "http-equiv", "content", "scheme", "name"]
|
||||||
let attrs = extend(attrs, ["id", "http-equiv", "content", "scheme", "name"])
|
|
||||||
elseif tag == 'title'
|
elseif tag == 'title'
|
||||||
let attrs = g:i18n
|
let attrs = i18n + ["id"]
|
||||||
let attrs = extend(attrs, ["id"])
|
|
||||||
elseif tag == 'object'
|
elseif tag == 'object'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + ["declare", "classid", "codebase", "data", "type", "codetype", "archive", "standby", "height", "width", "usemap", "name", "tabindex"]
|
||||||
let attrs = extend(attrs, ["declare", "classid", "codebase", "data", "type", "codetype", "archive", "standby", "height", "width", "usemap", "name", "tabindex"])
|
|
||||||
elseif tag == 'optgroup'
|
elseif tag == 'optgroup'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + ["disbled", "label"]
|
||||||
let attrs = extend(attrs, ["disbled", "label"])
|
|
||||||
elseif tag == 'option'
|
elseif tag == 'option'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + ["disbled", "selected", "value", "label"]
|
||||||
let attrs = extend(attrs, ["disbled", "selected", "value", "label"])
|
|
||||||
elseif tag == 'param'
|
elseif tag == 'param'
|
||||||
let attrs = ["id", "name", "value", "valuetype", "type"]
|
let attrs = ["id", "name", "value", "valuetype", "type"]
|
||||||
elseif tag == 'pre'
|
elseif tag == 'pre'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + ["xml:space"]
|
||||||
let attrs = extend(attrs, ["xml:space"])
|
|
||||||
elseif tag == 'q'
|
elseif tag == 'q'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + ["cite"]
|
||||||
let attrs = extend(attrs, ["cite"])
|
|
||||||
elseif tag == 'script'
|
elseif tag == 'script'
|
||||||
let attrs = ["id", "charset", "type", "src", "defer", "xml:space"]
|
let attrs = ["id", "charset", "type", "src", "defer", "xml:space"]
|
||||||
elseif tag == 'select'
|
elseif tag == 'select'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + ["name", "size", "multiple", "disabled", "tabindex", "onfocus", "onblur", "onchange"]
|
||||||
let attrs = extend(attrs, ["name", "size", "multiple", "disabled", "tabindex", "onfocus", "onblur", "onchange"])
|
|
||||||
elseif tag == 'style'
|
elseif tag == 'style'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + ["id", "type", "media", "title", "xml:space"]
|
||||||
let attrs = extend(attrs, ["id", "type", "media", "title", "xml:space"])
|
|
||||||
elseif tag == 'table'
|
elseif tag == 'table'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + ["summary", "width", "border", "frame", "rules", "cellspacing", "cellpadding"]
|
||||||
let attrs = extend(attrs, ["summary", "width", "border", "frame", "rules" "cellspacing", "cellpadding"])
|
|
||||||
elseif tag =~ '^\(thead\|tfoot\|tbody\|tr\)$'
|
elseif tag =~ '^\(thead\|tfoot\|tbody\|tr\)$'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + ["align", "char", "charoff", "valign"]
|
||||||
let attrs = extend(attrs, ["align", "char", "charoff", "valign"])
|
|
||||||
elseif tag == 'textarea'
|
elseif tag == 'textarea'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + focus + ["name", "rows", "cols", "disabled", "readonly", "onselect", "onchange"]
|
||||||
let attrs = extend(attrs, g:focus)
|
|
||||||
let attrs = extend(attrs, ["name", "rows", "cols", "disabled", "readonly", "onselect", "onchange"])
|
|
||||||
elseif tag =~ '^\(th\|td\)$'
|
elseif tag =~ '^\(th\|td\)$'
|
||||||
let attrs = g:coreattrs
|
let attrs = coreattrs + ["abbr", "headers", "scope", "rowspan", "colspan", "align", "char", "charoff", "valign"]
|
||||||
let attrs = extend(attrs, ["abbr", "headers", "scope", "rowspan", "colspan", "align", "char", "charoff", "valign"])
|
else
|
||||||
|
return []
|
||||||
endif
|
endif
|
||||||
|
|
||||||
for m in sort(attrs)
|
for m in sort(attrs)
|
||||||
if m =~ attr
|
if m =~ '^'.attr
|
||||||
if m =~ '^\(ismap\|defer\|declare\|nohref\|checked\|disabled\|selected\|readonly\)$'
|
if m =~ '^\(ismap\|defer\|declare\|nohref\|checked\|disabled\|selected\|readonly\)$' || m =~ '='
|
||||||
call add(res, sbase.' '.m)
|
call add(res, sbase.' '.m)
|
||||||
else
|
else
|
||||||
call add(res, sbase.' '.m.'="')
|
call add(res, sbase.' '.m.'="')
|
||||||
endif
|
endif
|
||||||
|
elseif m =~ attr
|
||||||
|
if m =~ '^\(ismap\|defer\|declare\|nohref\|checked\|disabled\|selected\|readonly\)$' || m =~ '='
|
||||||
|
call add(res2, sbase.' '.m)
|
||||||
|
else
|
||||||
|
call add(res2, sbase.' '.m.'="')
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
return res
|
|
||||||
|
return res + res2
|
||||||
|
|
||||||
endif
|
endif
|
||||||
" Close tag
|
" Close tag
|
||||||
let b:unaryTagsStack = "base meta link hr br param img area input col"
|
let b:unaryTagsStack = "base meta link hr br param img area input col"
|
||||||
@@ -258,17 +373,17 @@ function! htmlcomplete#CompleteTags(findstart, base)
|
|||||||
elseif opentag == 'pre'
|
elseif opentag == 'pre'
|
||||||
let tags = split("a tt i b big small br span bdo map ".phrase." ".miscinline." ".inlineforms)
|
let tags = split("a tt i b big small br span bdo map ".phrase." ".miscinline." ".inlineforms)
|
||||||
elseif opentag == 'html'
|
elseif opentag == 'html'
|
||||||
let tags = split("head body")
|
let tags = ["head", "body"]
|
||||||
elseif opentag == 'legend'
|
elseif opentag == 'legend'
|
||||||
let tags = split(inline." ".miscinline)
|
let tags = split(inline." ".miscinline)
|
||||||
elseif opentag == 'head'
|
elseif opentag == 'head'
|
||||||
let tags = split("title base scipt style meta link object")
|
let tags = ["title", "base", "scipt", "style", "meta", "link", "object"]
|
||||||
elseif opentag =~ '^\(noscript\|body\|blockquote\)$'
|
elseif opentag =~ '^\(noscript\|body\|blockquote\)$'
|
||||||
let tags = split("form ".block." ".misc)
|
let tags = split("form ".block." ".misc)
|
||||||
elseif opentag =~ '^\(ul\|ol\)$'
|
elseif opentag =~ '^\(ul\|ol\)$'
|
||||||
let tags = ["li"]
|
let tags = ["li"]
|
||||||
elseif opentag == 'dl'
|
elseif opentag == 'dl'
|
||||||
let tags = split("dt dd")
|
let tags = ["dt", "dd"]
|
||||||
elseif opentag =~ '^\(ins\|del\|th\|td\|dd\|div\|li\)$'
|
elseif opentag =~ '^\(ins\|del\|th\|td\|dd\|div\|li\)$'
|
||||||
let tags = split("form ".block." ".inline." ".misc)
|
let tags = split("form ".block." ".inline." ".misc)
|
||||||
elseif opentag == 'object'
|
elseif opentag == 'object'
|
||||||
@@ -280,30 +395,34 @@ function! htmlcomplete#CompleteTags(findstart, base)
|
|||||||
elseif opentag == 'form'
|
elseif opentag == 'form'
|
||||||
let tags = split(block." ".misc)
|
let tags = split(block." ".misc)
|
||||||
elseif opentag == 'select'
|
elseif opentag == 'select'
|
||||||
let tags = split("optgroup option")
|
let tags = ["optgroup", "option"]
|
||||||
elseif opentag == 'optgroup'
|
elseif opentag == 'optgroup'
|
||||||
let tags = ["option"]
|
let tags = ["option"]
|
||||||
elseif opentag == 'colgroup'
|
elseif opentag == 'colgroup'
|
||||||
let tags = ["col"]
|
let tags = ["col"]
|
||||||
elseif opentag == '^\(textarea\|option\|script\|style\|title\)$'
|
elseif opentag == '^\(textarea\|option\|script\|style\|title\)$'
|
||||||
let tags = []
|
let tags = ['empty']
|
||||||
elseif opentag == 'button'
|
elseif opentag == 'button'
|
||||||
let tags = split("p h1 h2 h3 h4 h5 h6 div ul ol dl table")
|
let tags = ["p", "h1", "h2", "h3", "h4", "h5", "h6", "div", "ul", "ol", "dl", "table"]
|
||||||
elseif opentag =~ '^\(thead\|tfoot\|tbody)$'
|
elseif opentag =~ '^\(thead\|tfoot\|tbody\)$'
|
||||||
let tags = ["tr"]
|
let tags = ["tr"]
|
||||||
elseif opentag == 'tr'
|
elseif opentag == 'tr'
|
||||||
let tags = split("th td")
|
let tags = ["th", "td"]
|
||||||
elseif opentag == 'table'
|
elseif opentag == 'table'
|
||||||
let tags = split("caption col colgroup thead tfoot tbody tr")
|
let tags = ["caption", "col", "colgroup", "thead", "tfoot", "tbody", "tr"]
|
||||||
|
else
|
||||||
|
return []
|
||||||
endif
|
endif
|
||||||
|
|
||||||
for m in tags
|
for m in tags
|
||||||
if m =~ a:base
|
if m =~ '^'.a:base
|
||||||
call add(res, m)
|
call add(res, m)
|
||||||
|
elseif m =~ a:base
|
||||||
|
call add(res2, m)
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
return res
|
return res + res2
|
||||||
|
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
@@ -316,10 +435,10 @@ endfunction
|
|||||||
" Version: 0.9.1
|
" Version: 0.9.1
|
||||||
|
|
||||||
function! htmlcomplete#GetLastOpenTag(unaryTagsStack)
|
function! htmlcomplete#GetLastOpenTag(unaryTagsStack)
|
||||||
let linenum=line(".")
|
let linenum=line('.')
|
||||||
let lineend=col(".") - 1 " start: cursor position
|
let lineend=col('.') - 1 " start: cursor position
|
||||||
let first=1 " flag for first line searched
|
let first=1 " flag for first line searched
|
||||||
let b:TagStack="" " main stack of tags
|
let b:TagStack='' " main stack of tags
|
||||||
let startInComment=s:InComment()
|
let startInComment=s:InComment()
|
||||||
|
|
||||||
let tagpat='</\=\(\k\|[-:]\)\+\|/>'
|
let tagpat='</\=\(\k\|[-:]\)\+\|/>'
|
||||||
@@ -330,7 +449,7 @@ function! htmlcomplete#GetLastOpenTag(unaryTagsStack)
|
|||||||
else
|
else
|
||||||
let lineend=strlen(line)
|
let lineend=strlen(line)
|
||||||
endif
|
endif
|
||||||
let b:lineTagStack=""
|
let b:lineTagStack=''
|
||||||
let mpos=0
|
let mpos=0
|
||||||
let b:TagCol=0
|
let b:TagCol=0
|
||||||
while (mpos > -1)
|
while (mpos > -1)
|
||||||
@@ -339,46 +458,45 @@ function! htmlcomplete#GetLastOpenTag(unaryTagsStack)
|
|||||||
let b:TagCol=b:TagCol+mpos
|
let b:TagCol=b:TagCol+mpos
|
||||||
let tag=matchstr(line,tagpat)
|
let tag=matchstr(line,tagpat)
|
||||||
|
|
||||||
if exists("b:closetag_disable_synID") || startInComment==s:InCommentAt(linenum, b:TagCol)
|
if exists('b:closetag_disable_synID') || startInComment==s:InCommentAt(linenum, b:TagCol)
|
||||||
let b:TagLine=linenum
|
let b:TagLine=linenum
|
||||||
call s:Push(matchstr(tag,'[^<>]\+'),"b:lineTagStack")
|
call s:Push(matchstr(tag,'[^<>]\+'),'b:lineTagStack')
|
||||||
endif
|
endif
|
||||||
let lineend=lineend-mpos
|
let lineend=lineend-mpos
|
||||||
let line=strpart(line,mpos,lineend)
|
let line=strpart(line,mpos,lineend)
|
||||||
endif
|
endif
|
||||||
endwhile
|
endwhile
|
||||||
while (!s:EmptystackP("b:lineTagStack"))
|
while (!s:EmptystackP('b:lineTagStack'))
|
||||||
let tag=s:Pop("b:lineTagStack")
|
let tag=s:Pop('b:lineTagStack')
|
||||||
if match(tag, "^/") == 0 "found end tag
|
if match(tag, '^/') == 0 "found end tag
|
||||||
call s:Push(tag,"b:TagStack")
|
call s:Push(tag,'b:TagStack')
|
||||||
elseif s:EmptystackP("b:TagStack") && !s:Instack(tag, a:unaryTagsStack) "found unclosed tag
|
elseif s:EmptystackP('b:TagStack') && !s:Instack(tag, a:unaryTagsStack) "found unclosed tag
|
||||||
return tag
|
return tag
|
||||||
else
|
else
|
||||||
let endtag=s:Peekstack("b:TagStack")
|
let endtag=s:Peekstack('b:TagStack')
|
||||||
if endtag == "/".tag || endtag == "/"
|
if endtag == '/'.tag || endtag == '/'
|
||||||
call s:Pop("b:TagStack") "found a open/close tag pair
|
call s:Pop('b:TagStack') "found a open/close tag pair
|
||||||
elseif !s:Instack(tag, a:unaryTagsStack) "we have a mismatch error
|
elseif !s:Instack(tag, a:unaryTagsStack) "we have a mismatch error
|
||||||
return ""
|
return ''
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endwhile
|
endwhile
|
||||||
let linenum=linenum-1 | let first=0
|
let linenum=linenum-1 | let first=0
|
||||||
endwhile
|
endwhile
|
||||||
return ""
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:InComment()
|
function! s:InComment()
|
||||||
return synIDattr(synID(line("."), col("."), 0), "name") =~ 'Comment'
|
return synIDattr(synID(line('.'), col('.'), 0), 'name') =~ 'Comment'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:InCommentAt(line, col)
|
function! s:InCommentAt(line, col)
|
||||||
return synIDattr(synID(a:line, a:col, 0), "name") =~ 'Comment'
|
return synIDattr(synID(a:line, a:col, 0), 'name') =~ 'Comment'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
function! s:SetKeywords()
|
function! s:SetKeywords()
|
||||||
let g:IsKeywordBak=&iskeyword
|
let g:IsKeywordBak=&iskeyword
|
||||||
let &iskeyword="33-255"
|
let &iskeyword='33-255'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:RestoreKeywords()
|
function! s:RestoreKeywords()
|
||||||
@@ -387,15 +505,15 @@ endfunction
|
|||||||
|
|
||||||
function! s:Push(el, sname)
|
function! s:Push(el, sname)
|
||||||
if !s:EmptystackP(a:sname)
|
if !s:EmptystackP(a:sname)
|
||||||
exe "let ".a:sname."=a:el.' '.".a:sname
|
exe 'let '.a:sname."=a:el.' '.".a:sname
|
||||||
else
|
else
|
||||||
exe "let ".a:sname."=a:el"
|
exe 'let '.a:sname.'=a:el'
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:EmptystackP(sname)
|
function! s:EmptystackP(sname)
|
||||||
exe "let stack=".a:sname
|
exe 'let stack='.a:sname
|
||||||
if match(stack,"^ *$") == 0
|
if match(stack,'^ *$') == 0
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
@@ -403,9 +521,9 @@ function! s:EmptystackP(sname)
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:Instack(el, sname)
|
function! s:Instack(el, sname)
|
||||||
exe "let stack=".a:sname
|
exe 'let stack='.a:sname
|
||||||
call s:SetKeywords()
|
call s:SetKeywords()
|
||||||
let m=match(stack, "\\<".a:el."\\>")
|
let m=match(stack, '\<'.a:el.'\>')
|
||||||
call s:RestoreKeywords()
|
call s:RestoreKeywords()
|
||||||
if m < 0
|
if m < 0
|
||||||
return 0
|
return 0
|
||||||
@@ -416,25 +534,25 @@ endfunction
|
|||||||
|
|
||||||
function! s:Peekstack(sname)
|
function! s:Peekstack(sname)
|
||||||
call s:SetKeywords()
|
call s:SetKeywords()
|
||||||
exe "let stack=".a:sname
|
exe 'let stack='.a:sname
|
||||||
let top=matchstr(stack, "\\<.\\{-1,}\\>")
|
let top=matchstr(stack, '\<.\{-1,}\>')
|
||||||
call s:RestoreKeywords()
|
call s:RestoreKeywords()
|
||||||
return top
|
return top
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:Pop(sname)
|
function! s:Pop(sname)
|
||||||
if s:EmptystackP(a:sname)
|
if s:EmptystackP(a:sname)
|
||||||
return ""
|
return ''
|
||||||
endif
|
endif
|
||||||
exe "let stack=".a:sname
|
exe 'let stack='.a:sname
|
||||||
call s:SetKeywords()
|
call s:SetKeywords()
|
||||||
let loc=matchend(stack,"\\<.\\{-1,}\\>")
|
let loc=matchend(stack,'\<.\{-1,}\>')
|
||||||
exe "let ".a:sname."=strpart(stack, loc+1, strlen(stack))"
|
exe 'let '.a:sname.'=strpart(stack, loc+1, strlen(stack))'
|
||||||
let top=strpart(stack, match(stack, "\\<"), loc)
|
let top=strpart(stack, match(stack, '\<'), loc)
|
||||||
call s:RestoreKeywords()
|
call s:RestoreKeywords()
|
||||||
return top
|
return top
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:Clearstack(sname)
|
function! s:Clearstack(sname)
|
||||||
exe "let ".a:sname."=''"
|
exe 'let '.a:sname."=''"
|
||||||
endfunction
|
endfunction
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
*cmdline.txt* For Vim version 7.0aa. Last change: 2005 Jul 05
|
*cmdline.txt* For Vim version 7.0aa. Last change: 2005 Sep 17
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -153,6 +153,7 @@ CTRL-R {0-9a-z"%#:-=.} *c_CTRL-R* *c_<C-R>*
|
|||||||
*c_CTRL-R_=*
|
*c_CTRL-R_=*
|
||||||
'=' the expression register: you are prompted to
|
'=' the expression register: you are prompted to
|
||||||
enter an expression (see |expression|)
|
enter an expression (see |expression|)
|
||||||
|
(doesn't work at the expression prompt)
|
||||||
See |registers| about registers. {not in Vi}
|
See |registers| about registers. {not in Vi}
|
||||||
Implementation detail: When using the |expression| register
|
Implementation detail: When using the |expression| register
|
||||||
and invoking setcmdpos(), this sets the position before
|
and invoking setcmdpos(), this sets the position before
|
||||||
@@ -191,7 +192,8 @@ CTRL-\ e {expr} *c_CTRL-\_e*
|
|||||||
to finish it. It's most useful in mappings though. See
|
to finish it. It's most useful in mappings though. See
|
||||||
|expression|.
|
|expression|.
|
||||||
See |c_CTRL-R_=| for inserting the result of an expression.
|
See |c_CTRL-R_=| for inserting the result of an expression.
|
||||||
Useful functions are |getcmdline()| and |getcmdpos()|.
|
Useful functions are |getcmdtype()|, |getcmdline()| and
|
||||||
|
|getcmdpos()|.
|
||||||
The cursor position is unchanged, except when the cursor was
|
The cursor position is unchanged, except when the cursor was
|
||||||
at the end of the line, then it stays at the end.
|
at the end of the line, then it stays at the end.
|
||||||
|setcmdpos()| can be used to set the cursor position.
|
|setcmdpos()| can be used to set the cursor position.
|
||||||
@@ -203,7 +205,9 @@ CTRL-\ e {expr} *c_CTRL-\_e*
|
|||||||
:call setcmdpos(strlen(cmd))
|
:call setcmdpos(strlen(cmd))
|
||||||
:return cmd
|
:return cmd
|
||||||
:endfunc
|
:endfunc
|
||||||
<
|
< This doesn't work recursively, thus not when already editing
|
||||||
|
an expression.
|
||||||
|
|
||||||
*c_CTRL-Y*
|
*c_CTRL-Y*
|
||||||
CTRL-Y When there is a modeless selection, copy the selection into
|
CTRL-Y When there is a modeless selection, copy the selection into
|
||||||
the clipboard. |modeless-selection|
|
the clipboard. |modeless-selection|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
*eval.txt* For Vim version 7.0aa. Last change: 2005 Sep 15
|
*eval.txt* For Vim version 7.0aa. Last change: 2005 Sep 20
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -1520,6 +1520,7 @@ getcharmod( ) Number modifiers for the last typed character
|
|||||||
getbufvar( {expr}, {varname}) variable {varname} in buffer {expr}
|
getbufvar( {expr}, {varname}) variable {varname} in buffer {expr}
|
||||||
getcmdline() String return the current command-line
|
getcmdline() String return the current command-line
|
||||||
getcmdpos() Number return cursor position in command-line
|
getcmdpos() Number return cursor position in command-line
|
||||||
|
getcmdtype() String return the current command-line type
|
||||||
getcwd() String the current working directory
|
getcwd() String the current working directory
|
||||||
getfperm( {fname}) String file permissions of file {fname}
|
getfperm( {fname}) String file permissions of file {fname}
|
||||||
getfsize( {fname}) Number size in bytes of file {fname}
|
getfsize( {fname}) Number size in bytes of file {fname}
|
||||||
@@ -1550,7 +1551,8 @@ iconv( {expr}, {from}, {to}) String convert encoding of {expr}
|
|||||||
indent( {lnum}) Number indent of line {lnum}
|
indent( {lnum}) Number indent of line {lnum}
|
||||||
index( {list}, {expr} [, {start} [, {ic}]])
|
index( {list}, {expr} [, {start} [, {ic}]])
|
||||||
Number index in {list} where {expr} appears
|
Number index in {list} where {expr} appears
|
||||||
input( {prompt} [, {text}]) String get input from the user
|
input( {prompt} [, {text} [, {completion}]])
|
||||||
|
String get input from the user
|
||||||
inputdialog( {p} [, {t} [, {c}]]) String like input() but in a GUI dialog
|
inputdialog( {p} [, {t} [, {c}]]) String like input() but in a GUI dialog
|
||||||
inputrestore() Number restore typeahead
|
inputrestore() Number restore typeahead
|
||||||
inputsave() Number save and clear typeahead
|
inputsave() Number save and clear typeahead
|
||||||
@@ -2533,14 +2535,27 @@ getcmdline() *getcmdline()*
|
|||||||
|c_CTRL-R_=|.
|
|c_CTRL-R_=|.
|
||||||
Example: >
|
Example: >
|
||||||
:cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
|
:cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
|
||||||
< Also see |getcmdpos()| and |setcmdpos()|.
|
< Also see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|.
|
||||||
|
|
||||||
getcmdpos() *getcmdpos()*
|
getcmdpos() *getcmdpos()*
|
||||||
Return the position of the cursor in the command line as a
|
Return the position of the cursor in the command line as a
|
||||||
byte count. The first column is 1.
|
byte count. The first column is 1.
|
||||||
Only works when editing the command line, thus requires use of
|
Only works when editing the command line, thus requires use of
|
||||||
|c_CTRL-\_e| or |c_CTRL-R_=|. Returns 0 otherwise.
|
|c_CTRL-\_e| or |c_CTRL-R_=|. Returns 0 otherwise.
|
||||||
Also see |setcmdpos()| and |getcmdline()|.
|
Also see |getcmdtype()|, |setcmdpos()| and |getcmdline()|.
|
||||||
|
|
||||||
|
getcmdtype() *getcmdtype()*
|
||||||
|
Return the current command-line type. Possible return values
|
||||||
|
are:
|
||||||
|
/ Search forward command
|
||||||
|
? Search backward command
|
||||||
|
: Ex-command mode
|
||||||
|
@ Input mode
|
||||||
|
> Debug mode
|
||||||
|
Only works when editing the command line, thus requires use of
|
||||||
|
|c_CTRL-\_e| or |c_CTRL-R_=|. Returns an empty string
|
||||||
|
otherwise.
|
||||||
|
Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|.
|
||||||
|
|
||||||
*getcwd()*
|
*getcwd()*
|
||||||
getcwd() The result is a String, which is the name of the current
|
getcwd() The result is a String, which is the name of the current
|
||||||
@@ -2910,19 +2925,34 @@ index({list}, {expr} [, {start} [, {ic}]]) *index()*
|
|||||||
:if index(numbers, 123) >= 0
|
:if index(numbers, 123) >= 0
|
||||||
|
|
||||||
|
|
||||||
input({prompt} [, {text}]) *input()*
|
input({prompt} [, {text} [, {completion}]]) *input()*
|
||||||
The result is a String, which is whatever the user typed on
|
The result is a String, which is whatever the user typed on
|
||||||
the command-line. The parameter is either a prompt string, or
|
the command-line. The parameter is either a prompt string, or
|
||||||
a blank string (for no prompt). A '\n' can be used in the
|
a blank string (for no prompt). A '\n' can be used in the
|
||||||
prompt to start a new line. The highlighting set with
|
prompt to start a new line.
|
||||||
|:echohl| is used for the prompt. The input is entered just
|
The highlighting set with |:echohl| is used for the prompt.
|
||||||
like a command-line, with the same editing commands and
|
The input is entered just like a command-line, with the same
|
||||||
mappings. There is a separate history for lines typed for
|
editing commands and mappings. There is a separate history
|
||||||
input().
|
for lines typed for input().
|
||||||
|
Example: >
|
||||||
|
:if input("Coffee or beer? ") == "beer"
|
||||||
|
: echo "Cheers!"
|
||||||
|
:endif
|
||||||
|
<
|
||||||
If the optional {text} is present, this is used for the
|
If the optional {text} is present, this is used for the
|
||||||
default reply, as if the user typed this.
|
default reply, as if the user typed this. Example: >
|
||||||
NOTE: This must not be used in a startup file, for the
|
:let color = input("Color? ", "white")
|
||||||
versions that only run in GUI mode (e.g., the Win32 GUI).
|
|
||||||
|
< The optional {completion} argument specifies the type of
|
||||||
|
completion supported for the input. Without it completion is
|
||||||
|
not performed. The supported completion types are the same as
|
||||||
|
that can be supplied to a user-defined command using the
|
||||||
|
"-complete=" argument. Refer to |:command-completion| for
|
||||||
|
more information. Example: >
|
||||||
|
let fname = input("File: ", "", "file")
|
||||||
|
<
|
||||||
|
NOTE: This function must not be used in a startup file, for
|
||||||
|
the versions that only run in GUI mode (e.g., the Win32 GUI).
|
||||||
Note: When input() is called from within a mapping it will
|
Note: When input() is called from within a mapping it will
|
||||||
consume remaining characters from that mapping, because a
|
consume remaining characters from that mapping, because a
|
||||||
mapping is handled like the characters were typed.
|
mapping is handled like the characters were typed.
|
||||||
@@ -2931,13 +2961,7 @@ input({prompt} [, {text}]) *input()*
|
|||||||
that further characters follow in the mapping, e.g., by using
|
that further characters follow in the mapping, e.g., by using
|
||||||
|:execute| or |:normal|.
|
|:execute| or |:normal|.
|
||||||
|
|
||||||
Example: >
|
Example with a mapping: >
|
||||||
:if input("Coffee or beer? ") == "beer"
|
|
||||||
: echo "Cheers!"
|
|
||||||
:endif
|
|
||||||
< Example with default text: >
|
|
||||||
:let color = input("Color? ", "white")
|
|
||||||
< Example with a mapping: >
|
|
||||||
:nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR>
|
:nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR>
|
||||||
:function GetFoo()
|
:function GetFoo()
|
||||||
: call inputsave()
|
: call inputsave()
|
||||||
@@ -2957,6 +2981,7 @@ inputdialog({prompt} [, {text} [, {cancelreturn}]]) *inputdialog()*
|
|||||||
omitted an empty string is returned.
|
omitted an empty string is returned.
|
||||||
Hitting <Enter> works like pressing the OK button. Hitting
|
Hitting <Enter> works like pressing the OK button. Hitting
|
||||||
<Esc> works like pressing the Cancel button.
|
<Esc> works like pressing the Cancel button.
|
||||||
|
NOTE: Command-line completion is not supported.
|
||||||
|
|
||||||
inputlist({textlist}) *inputlist()*
|
inputlist({textlist}) *inputlist()*
|
||||||
{textlist} must be a list of strings. This list is displayed,
|
{textlist} must be a list of strings. This list is displayed,
|
||||||
@@ -2996,6 +3021,7 @@ inputsecret({prompt} [, {text}]) *inputsecret()*
|
|||||||
|history| stack.
|
|history| stack.
|
||||||
The result is a String, which is whatever the user actually
|
The result is a String, which is whatever the user actually
|
||||||
typed on the command-line in response to the issued prompt.
|
typed on the command-line in response to the issued prompt.
|
||||||
|
NOTE: Command-line completion is not supported.
|
||||||
|
|
||||||
insert({list}, {item} [, {idx}]) *insert()*
|
insert({list}, {item} [, {idx}]) *insert()*
|
||||||
Insert {item} at the start of List {list}.
|
Insert {item} at the start of List {list}.
|
||||||
@@ -4450,6 +4476,8 @@ winheight({nr}) *winheight()*
|
|||||||
winline() The result is a Number, which is the screen line of the cursor
|
winline() The result is a Number, which is the screen line of the cursor
|
||||||
in the window. This is counting screen lines from the top of
|
in the window. This is counting screen lines from the top of
|
||||||
the window. The first line is one.
|
the window. The first line is one.
|
||||||
|
If the cursor was moved the view on the file will be updated
|
||||||
|
first, this may cause a scroll.
|
||||||
|
|
||||||
*winnr()*
|
*winnr()*
|
||||||
winnr([{arg}]) The result is a Number, which is the number of the current
|
winnr([{arg}]) The result is a Number, which is the number of the current
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
*insert.txt* For Vim version 7.0aa. Last change: 2005 Sep 15
|
*insert.txt* For Vim version 7.0aa. Last change: 2005 Sep 18
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -990,16 +990,17 @@ are included.
|
|||||||
|
|
||||||
When using after CTRL-X CTRL-O after "<" it is completed with tag name
|
When using after CTRL-X CTRL-O after "<" it is completed with tag name
|
||||||
available in current context. Inside of tag completion aids to choose
|
available in current context. Inside of tag completion aids to choose
|
||||||
proper attributes, and when possible choose appropriate attribute value.
|
proper attributes, and when possible choose appropriate attribute value
|
||||||
|
including class names for CSS styles.
|
||||||
|
|
||||||
When used after "</" CTRL-X CTRL-O will close the last opened tag.
|
When used after "</" CTRL-X CTRL-O will close the last opened tag.
|
||||||
|
|
||||||
File htmlcompletion.vim provides through autoload mechanism
|
File htmlcomplete.vim provides through |autoload| mechanism
|
||||||
GetLastOpenTag function which can be used in XML files to get name of
|
GetLastOpenTag function which can be used in XML files to get name of
|
||||||
last open tag with: >
|
last open tag with: >
|
||||||
|
|
||||||
:echo htmlcompletion#GetLastOpenTag("b:unaryTagsStack")
|
:echo htmlcomplete#GetLastOpenTag("b:unaryTagsStack")
|
||||||
<
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
8. Insert mode commands *inserting*
|
8. Insert mode commands *inserting*
|
||||||
|
|||||||
@@ -4992,6 +4992,7 @@ ft-fvwm-syntax syntax.txt /*ft-fvwm-syntax*
|
|||||||
ft-groff-syntax syntax.txt /*ft-groff-syntax*
|
ft-groff-syntax syntax.txt /*ft-groff-syntax*
|
||||||
ft-gsp-syntax syntax.txt /*ft-gsp-syntax*
|
ft-gsp-syntax syntax.txt /*ft-gsp-syntax*
|
||||||
ft-haskell-syntax syntax.txt /*ft-haskell-syntax*
|
ft-haskell-syntax syntax.txt /*ft-haskell-syntax*
|
||||||
|
ft-html-omni insert.txt /*ft-html-omni*
|
||||||
ft-html-syntax syntax.txt /*ft-html-syntax*
|
ft-html-syntax syntax.txt /*ft-html-syntax*
|
||||||
ft-htmlos-syntax syntax.txt /*ft-htmlos-syntax*
|
ft-htmlos-syntax syntax.txt /*ft-htmlos-syntax*
|
||||||
ft-ia64-syntax syntax.txt /*ft-ia64-syntax*
|
ft-ia64-syntax syntax.txt /*ft-ia64-syntax*
|
||||||
@@ -5163,6 +5164,7 @@ getchar() eval.txt /*getchar()*
|
|||||||
getcharmod() eval.txt /*getcharmod()*
|
getcharmod() eval.txt /*getcharmod()*
|
||||||
getcmdline() eval.txt /*getcmdline()*
|
getcmdline() eval.txt /*getcmdline()*
|
||||||
getcmdpos() eval.txt /*getcmdpos()*
|
getcmdpos() eval.txt /*getcmdpos()*
|
||||||
|
getcmdtype() eval.txt /*getcmdtype()*
|
||||||
getcwd() eval.txt /*getcwd()*
|
getcwd() eval.txt /*getcwd()*
|
||||||
getfontname() eval.txt /*getfontname()*
|
getfontname() eval.txt /*getfontname()*
|
||||||
getfperm() eval.txt /*getfperm()*
|
getfperm() eval.txt /*getfperm()*
|
||||||
@@ -5294,6 +5296,7 @@ hebrew hebrew.txt /*hebrew*
|
|||||||
hebrew.txt hebrew.txt /*hebrew.txt*
|
hebrew.txt hebrew.txt /*hebrew.txt*
|
||||||
help various.txt /*help*
|
help various.txt /*help*
|
||||||
help-context help.txt /*help-context*
|
help-context help.txt /*help-context*
|
||||||
|
help-tags tags 1
|
||||||
help-translated various.txt /*help-translated*
|
help-translated various.txt /*help-translated*
|
||||||
help-xterm-window various.txt /*help-xterm-window*
|
help-xterm-window various.txt /*help-xterm-window*
|
||||||
help.txt help.txt /*help.txt*
|
help.txt help.txt /*help.txt*
|
||||||
@@ -7319,6 +7322,13 @@ zf fold.txt /*zf*
|
|||||||
zg spell.txt /*zg*
|
zg spell.txt /*zg*
|
||||||
zh scroll.txt /*zh*
|
zh scroll.txt /*zh*
|
||||||
zi fold.txt /*zi*
|
zi fold.txt /*zi*
|
||||||
|
zip zip.txt /*zip*
|
||||||
|
zip-contents zip.txt /*zip-contents*
|
||||||
|
zip-copyright zip.txt /*zip-copyright*
|
||||||
|
zip-history zip.txt /*zip-history*
|
||||||
|
zip-manual zip.txt /*zip-manual*
|
||||||
|
zip-usage zip.txt /*zip-usage*
|
||||||
|
zip.txt zip.txt /*zip.txt*
|
||||||
zj fold.txt /*zj*
|
zj fold.txt /*zj*
|
||||||
zk fold.txt /*zk*
|
zk fold.txt /*zk*
|
||||||
zl scroll.txt /*zl*
|
zl scroll.txt /*zl*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
*todo.txt* For Vim version 7.0aa. Last change: 2005 Sep 16
|
*todo.txt* For Vim version 7.0aa. Last change: 2005 Sep 20
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -32,6 +32,20 @@ be worked on, but only if you sponsor Vim development. See |sponsor|.
|
|||||||
|
|
||||||
Test11 fails sometimes. (athena, huge features)
|
Test11 fails sometimes. (athena, huge features)
|
||||||
|
|
||||||
|
ml_get errors: :%s/^\_s\+$//gc
|
||||||
|
And: Insert mode in one window, long file, click in other window, short file.
|
||||||
|
|
||||||
|
'scrolljump' negative used as a percentage, e.g. -50 is 50% of window height?
|
||||||
|
|
||||||
|
Spelling:
|
||||||
|
- suggestion for "a an" includes "an an", which is marked bad. Check
|
||||||
|
suggestions for not being a bad word (when split)?
|
||||||
|
- CTRL-X s doesn't consider 'spellcapcheck'.
|
||||||
|
- Have spellbadword() return a list with bad word and reason it's bad?
|
||||||
|
(rare/local/bad/caps)
|
||||||
|
- spellsuggest() needs a way to require a capital. A flag or context?
|
||||||
|
- Underscore in REP items stands for space.
|
||||||
|
|
||||||
ccomplete:
|
ccomplete:
|
||||||
- How to use a popup menu?
|
- How to use a popup menu?
|
||||||
- When a typedef or struct is local to a file only use it in that file?
|
- When a typedef or struct is local to a file only use it in that file?
|
||||||
@@ -1726,7 +1740,6 @@ Built-in script language:
|
|||||||
filecopy(from, to) Copy a file
|
filecopy(from, to) Copy a file
|
||||||
shorten(fname) shorten a file name, like home_replace()
|
shorten(fname) shorten a file name, like home_replace()
|
||||||
perl(cmd) call Perl and return string
|
perl(cmd) call Perl and return string
|
||||||
input(prompt, complete) like input() but do specified completion
|
|
||||||
inputrl() like input() but right-to-left
|
inputrl() like input() but right-to-left
|
||||||
virtualmode() add argument to obtain whether "$" was used in
|
virtualmode() add argument to obtain whether "$" was used in
|
||||||
Visual block mode.
|
Visual block mode.
|
||||||
|
|||||||
@@ -447,6 +447,8 @@ New functions: ~
|
|||||||
|get()| get an item from a List or Dictionary
|
|get()| get an item from a List or Dictionary
|
||||||
|getbufline()| get a list of lines from a specified buffer
|
|getbufline()| get a list of lines from a specified buffer
|
||||||
(Yegappan Lakshmanan)
|
(Yegappan Lakshmanan)
|
||||||
|
|getcmdtype()| return the current command-line type
|
||||||
|
(Yegappan Lakshmanan)
|
||||||
|getfontname()| get actual font name being used
|
|getfontname()| get actual font name being used
|
||||||
|getfperm()| get file permission string (Nikolai Weibull)
|
|getfperm()| get file permission string (Nikolai Weibull)
|
||||||
|getftype()| get type of file (Nikolai Weibull)
|
|getftype()| get type of file (Nikolai Weibull)
|
||||||
@@ -812,6 +814,9 @@ Also support t_SI and t_EI on Unix with normal features. (Ciaran McCreesh)
|
|||||||
When 'foldcolumn' is one then put as much info in it as possible. This allows
|
When 'foldcolumn' is one then put as much info in it as possible. This allows
|
||||||
closing a fold with the mouse by clicking on the '-'.
|
closing a fold with the mouse by clicking on the '-'.
|
||||||
|
|
||||||
|
input() takes an optional completion argument to specify the type of
|
||||||
|
completion supported for the input. (Yegappan Lakshmanan)
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
COMPILE TIME CHANGES *compile-changes-7*
|
COMPILE TIME CHANGES *compile-changes-7*
|
||||||
|
|
||||||
|
|||||||
@@ -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: 2005 Aug 29
|
" Last Change: 2005 Sep 19
|
||||||
|
|
||||||
" 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")
|
||||||
@@ -1882,6 +1882,9 @@ au StdinReadPost * if !did_filetype() | runtime! scripts.vim | endif
|
|||||||
" Most of these should call s:StarSetf() to avoid names ending in .gz and the
|
" Most of these should call s:StarSetf() to avoid names ending in .gz and the
|
||||||
" like are used.
|
" like are used.
|
||||||
|
|
||||||
|
" Asterisk config file
|
||||||
|
au BufNewFile,BufRead *asterisk/*.conf* call s:StarSetf('asterisk')
|
||||||
|
|
||||||
" BIND zone
|
" BIND zone
|
||||||
au BufNewFile,BufRead /var/named/* call s:StarSetf('bindzone')
|
au BufNewFile,BufRead /var/named/* call s:StarSetf('bindzone')
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
" Vim support file to detect file types in scripts
|
" Vim support file to detect file types in scripts
|
||||||
"
|
"
|
||||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||||
" Last change: 2005 May 20
|
" Last change: 2005 Sep 20
|
||||||
|
|
||||||
" This file is called by an autocommand for every file that has just been
|
" This file is called by an autocommand for every file that has just been
|
||||||
" loaded into a buffer. It checks if the type of file can be recognized by
|
" loaded into a buffer. It checks if the type of file can be recognized by
|
||||||
@@ -182,6 +182,7 @@ else
|
|||||||
" - "Index: <filename>" in the first line (CVS file)
|
" - "Index: <filename>" in the first line (CVS file)
|
||||||
elseif s:line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\)'
|
elseif s:line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\)'
|
||||||
\ || (s:line1 =~ '^--- ' && s:line2 =~ '^+++ ')
|
\ || (s:line1 =~ '^--- ' && s:line2 =~ '^+++ ')
|
||||||
|
\ || (s:line1 =~ '^\* looking for ' && s:line2 =~ '^\* comparing to ')
|
||||||
\ || (s:line1 =~ '^\*\*\* ' && s:line2 =~ '^--- ')
|
\ || (s:line1 =~ '^\*\*\* ' && s:line2 =~ '^--- ')
|
||||||
set ft=diff
|
set ft=diff
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,5 +1,5 @@
|
|||||||
*** en_US.orig.aff Fri Apr 15 13:20:36 2005
|
*** en_US.orig.aff Fri Apr 15 13:20:36 2005
|
||||||
--- en_US.aff Sun Jul 31 22:17:40 2005
|
--- en_US.aff Tue Sep 20 19:41:00 2005
|
||||||
***************
|
***************
|
||||||
*** 3,4 ****
|
*** 3,4 ****
|
||||||
--- 3,134 ----
|
--- 3,134 ----
|
||||||
@@ -164,6 +164,15 @@
|
|||||||
SFX G e ing e
|
SFX G e ing e
|
||||||
! SFX G 0 ing [^e]
|
! SFX G 0 ing [^e]
|
||||||
|
|
||||||
|
***************
|
||||||
|
*** 99,101 ****
|
||||||
|
|
||||||
|
! REP 88
|
||||||
|
REP a ei
|
||||||
|
--- 229,231 ----
|
||||||
|
|
||||||
|
! REP 91
|
||||||
|
REP a ei
|
||||||
***************
|
***************
|
||||||
*** 137,138 ****
|
*** 137,138 ****
|
||||||
--- 267,270 ----
|
--- 267,270 ----
|
||||||
@@ -171,6 +180,20 @@
|
|||||||
+ REP y ie
|
+ REP y ie
|
||||||
+ REP ie y
|
+ REP ie y
|
||||||
REP i ee
|
REP i ee
|
||||||
|
***************
|
||||||
|
*** 174,175 ****
|
||||||
|
--- 306,308 ----
|
||||||
|
REP ew ue
|
||||||
|
+ REP uf ough
|
||||||
|
REP uff ough
|
||||||
|
***************
|
||||||
|
*** 188 ****
|
||||||
|
--- 321,325 ----
|
||||||
|
REP shun cion
|
||||||
|
+ REP the_the the
|
||||||
|
+ REP an_an an
|
||||||
|
+ REP an_a a
|
||||||
|
+ REP a_an an
|
||||||
*** en_US.orig.dic Fri Apr 15 13:20:36 2005
|
*** en_US.orig.dic Fri Apr 15 13:20:36 2005
|
||||||
--- en_US.dic Tue Aug 16 17:03:31 2005
|
--- en_US.dic Tue Aug 16 17:03:31 2005
|
||||||
***************
|
***************
|
||||||
|
|||||||
@@ -141,7 +141,7 @@
|
|||||||
+ REP zoz z.o.z.
|
+ REP zoz z.o.z.
|
||||||
+
|
+
|
||||||
*** nl_NL.orig.dic Sun Jul 3 18:24:07 2005
|
*** nl_NL.orig.dic Sun Jul 3 18:24:07 2005
|
||||||
--- nl_NL.dic Sat Aug 13 14:10:15 2005
|
--- nl_NL.dic Mon Sep 19 20:25:09 2005
|
||||||
***************
|
***************
|
||||||
*** 1,3 ****
|
*** 1,3 ****
|
||||||
119937
|
119937
|
||||||
@@ -259,7 +259,7 @@
|
|||||||
voorjaarsmoeheid
|
voorjaarsmoeheid
|
||||||
***************
|
***************
|
||||||
*** 119938 ****
|
*** 119938 ****
|
||||||
--- 119963,120139 ----
|
--- 119963,120142 ----
|
||||||
<20>berhaupt
|
<20>berhaupt
|
||||||
+ Christiaan/X
|
+ Christiaan/X
|
||||||
+ Fred/X
|
+ Fred/X
|
||||||
@@ -436,4 +436,7 @@
|
|||||||
+ bijv.
|
+ bijv.
|
||||||
+ Gerard
|
+ Gerard
|
||||||
+ Google
|
+ Google
|
||||||
|
+ Luc
|
||||||
+ Luuk
|
+ Luuk
|
||||||
|
+ Gert
|
||||||
|
+ Marion
|
||||||
|
|||||||
73
runtime/syntax/asterisk.vim
Normal file
73
runtime/syntax/asterisk.vim
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
" Vim syntax file
|
||||||
|
" Language: Asterisk config file
|
||||||
|
" Maintainer: brc007
|
||||||
|
" Last Change: 2005 Sep 19
|
||||||
|
" version 0.2
|
||||||
|
"
|
||||||
|
" Additional changes made 2005 Mar 7 by Corydon76
|
||||||
|
" * CVS priority, including n and s, and new label definitions
|
||||||
|
" * ENV( and LEN( support
|
||||||
|
" * Class patterns in extensions now match only the class pattern (instead of to a following expression)
|
||||||
|
" * anthm's functions are matched
|
||||||
|
" * Variables now appear in their own colors inside expressions
|
||||||
|
|
||||||
|
" For version 5.x: Clear all syntax items
|
||||||
|
" For version 6.x: Quit when a syntax file was already loaded
|
||||||
|
if version < 600
|
||||||
|
syntax clear
|
||||||
|
elseif exists("b:current_syntax")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
"testing only
|
||||||
|
syn sync clear
|
||||||
|
syn sync fromstart
|
||||||
|
|
||||||
|
|
||||||
|
syn keyword asteriskTodo TODO contained
|
||||||
|
syn match asteriskComment ";.*" contains=asteriskTodo
|
||||||
|
syn match asteriskContext "\[.\{-}\]"
|
||||||
|
syn match asteriskExten "^\s*exten\s*=>"
|
||||||
|
syn match asteriskApp "\s*,\s*\zs[a-zA-Z]*\ze"
|
||||||
|
" Digits plus oldlabel (newlabel)
|
||||||
|
syn match asteriskPriority ",[[:digit:]]\+\(+[[:alpha:]][[:alnum:]_]*\)\?\(([[:alpha:]][[:alnum:]_]*)\)\?,"
|
||||||
|
" s or n plus digits (newlabel)
|
||||||
|
syn match asteriskPriority ",[sn]\(+[[:digit:]]\+\)\?\(([[:alpha:]][[:alnum:]_]*)\)\?,"
|
||||||
|
syn match asteriskIncludeBad "^\s*#\s*[[:alnum:]]*"
|
||||||
|
syn match asteriskInclude "^\s#\sinclude\s.*"
|
||||||
|
syn match asteriskVar "\${_\{0,2}[[:alpha:]][[:alnum:]_]*\(:[[:digit:]]\+\)\{0,2}}"
|
||||||
|
syn match asteriskVarLen "\${_\{0,2}[[:alpha:]][[:alnum:]_]*(.\{-})}" contains=asteriskVar,asteriskVarLen,asteriskExp
|
||||||
|
syn match asteriskExp "\$\[.\{-}\]" contains=asteriskVar,asteriskVarLen,asteriskExp
|
||||||
|
syn match asteriskFunc "\$([[:alpha:]][[:alnum:]_]*.*)" contains=asteriskVar,asteriskVarLen,asteriskExp
|
||||||
|
|
||||||
|
" Define the default highlighting.
|
||||||
|
" For version 5.7 and earlier: only when not done already
|
||||||
|
" For version 5.8 and later: only when an item doesn't have highlighting yet
|
||||||
|
:if version >= 508 || !exists("did_conf_syntax_inits")
|
||||||
|
if version < 508
|
||||||
|
let did_conf_syntax_inits = 1
|
||||||
|
command -nargs=+ HiLink hi link <args>
|
||||||
|
else
|
||||||
|
command -nargs=+ HiLink hi def link <args>
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
HiLink asteriskComment Comment
|
||||||
|
" not sure what type this should be, using String for testing.
|
||||||
|
HiLink asteriskExten String
|
||||||
|
" same here
|
||||||
|
HiLink asteriskContext Identifier
|
||||||
|
HiLink asteriskApplication Statement
|
||||||
|
HiLink asteriskInclude Preproc
|
||||||
|
HiLink asteriskIncludeBad Error
|
||||||
|
HiLink asteriskPriority Preproc
|
||||||
|
HiLink asteriskVar String
|
||||||
|
HiLink asteriskVarLen Function
|
||||||
|
HiLink asteriskExp Type
|
||||||
|
delcommand HiLink
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
let b:current_syntax = "asterisk"
|
||||||
|
|
||||||
|
" vim: ts=8 sw=2
|
||||||
@@ -668,18 +668,18 @@ ex_diffupdate(eap)
|
|||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
ok = FALSE;
|
ok = FALSE;
|
||||||
fd = fopen((char *)tmp_orig, "w");
|
fd = mch_fopen((char *)tmp_orig, "w");
|
||||||
if (fd != NULL)
|
if (fd != NULL)
|
||||||
{
|
{
|
||||||
fwrite("line1\n", (size_t)6, (size_t)1, fd);
|
fwrite("line1\n", (size_t)6, (size_t)1, fd);
|
||||||
fclose(fd);
|
fclose(fd);
|
||||||
fd = fopen((char *)tmp_new, "w");
|
fd = mch_fopen((char *)tmp_new, "w");
|
||||||
if (fd != NULL)
|
if (fd != NULL)
|
||||||
{
|
{
|
||||||
fwrite("line2\n", (size_t)6, (size_t)1, fd);
|
fwrite("line2\n", (size_t)6, (size_t)1, fd);
|
||||||
fclose(fd);
|
fclose(fd);
|
||||||
diff_file(tmp_orig, tmp_new, tmp_diff);
|
diff_file(tmp_orig, tmp_new, tmp_diff);
|
||||||
fd = fopen((char *)tmp_diff, "r");
|
fd = mch_fopen((char *)tmp_diff, "r");
|
||||||
if (fd != NULL)
|
if (fd != NULL)
|
||||||
{
|
{
|
||||||
char_u linebuf[LBUFLEN];
|
char_u linebuf[LBUFLEN];
|
||||||
@@ -1144,7 +1144,7 @@ diff_read(idx_orig, idx_new, fname)
|
|||||||
long count_orig, count_new;
|
long count_orig, count_new;
|
||||||
int notset = TRUE; /* block "*dp" not set yet */
|
int notset = TRUE; /* block "*dp" not set yet */
|
||||||
|
|
||||||
fd = fopen((char *)fname, "r");
|
fd = mch_fopen((char *)fname, "r");
|
||||||
if (fd == NULL)
|
if (fd == NULL)
|
||||||
{
|
{
|
||||||
EMSG(_("E98: Cannot read diff output"));
|
EMSG(_("E98: Cannot read diff output"));
|
||||||
|
|||||||
50
src/eval.c
50
src/eval.c
@@ -504,6 +504,7 @@ static void f_getchar __ARGS((typval_T *argvars, typval_T *rettv));
|
|||||||
static void f_getcharmod __ARGS((typval_T *argvars, typval_T *rettv));
|
static void f_getcharmod __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
static void f_getcmdline __ARGS((typval_T *argvars, typval_T *rettv));
|
static void f_getcmdline __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
static void f_getcmdpos __ARGS((typval_T *argvars, typval_T *rettv));
|
static void f_getcmdpos __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
|
static void f_getcmdtype __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
static void f_getcwd __ARGS((typval_T *argvars, typval_T *rettv));
|
static void f_getcwd __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
static void f_getfontname __ARGS((typval_T *argvars, typval_T *rettv));
|
static void f_getfontname __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
static void f_getfperm __ARGS((typval_T *argvars, typval_T *rettv));
|
static void f_getfperm __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
@@ -6769,6 +6770,7 @@ static struct fst
|
|||||||
{"getcharmod", 0, 0, f_getcharmod},
|
{"getcharmod", 0, 0, f_getcharmod},
|
||||||
{"getcmdline", 0, 0, f_getcmdline},
|
{"getcmdline", 0, 0, f_getcmdline},
|
||||||
{"getcmdpos", 0, 0, f_getcmdpos},
|
{"getcmdpos", 0, 0, f_getcmdpos},
|
||||||
|
{"getcmdtype", 0, 0, f_getcmdtype},
|
||||||
{"getcwd", 0, 0, f_getcwd},
|
{"getcwd", 0, 0, f_getcwd},
|
||||||
{"getfontname", 0, 1, f_getfontname},
|
{"getfontname", 0, 1, f_getfontname},
|
||||||
{"getfperm", 1, 1, f_getfperm},
|
{"getfperm", 1, 1, f_getfperm},
|
||||||
@@ -6799,7 +6801,7 @@ static struct fst
|
|||||||
{"iconv", 3, 3, f_iconv},
|
{"iconv", 3, 3, f_iconv},
|
||||||
{"indent", 1, 1, f_indent},
|
{"indent", 1, 1, f_indent},
|
||||||
{"index", 2, 4, f_index},
|
{"index", 2, 4, f_index},
|
||||||
{"input", 1, 2, f_input},
|
{"input", 1, 3, f_input},
|
||||||
{"inputdialog", 1, 3, f_inputdialog},
|
{"inputdialog", 1, 3, f_inputdialog},
|
||||||
{"inputlist", 1, 1, f_inputlist},
|
{"inputlist", 1, 1, f_inputlist},
|
||||||
{"inputrestore", 0, 0, f_inputrestore},
|
{"inputrestore", 0, 0, f_inputrestore},
|
||||||
@@ -9437,6 +9439,24 @@ f_getcmdpos(argvars, rettv)
|
|||||||
rettv->vval.v_number = get_cmdline_pos() + 1;
|
rettv->vval.v_number = get_cmdline_pos() + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* "getcmdtype()" function
|
||||||
|
*/
|
||||||
|
/*ARGSUSED*/
|
||||||
|
static void
|
||||||
|
f_getcmdtype(argvars, rettv)
|
||||||
|
typval_T *argvars;
|
||||||
|
typval_T *rettv;
|
||||||
|
{
|
||||||
|
rettv->v_type = VAR_STRING;
|
||||||
|
rettv->vval.v_string = alloc(2);
|
||||||
|
if (rettv->vval.v_string != NULL)
|
||||||
|
{
|
||||||
|
rettv->vval.v_string[0] = get_cmdline_type();
|
||||||
|
rettv->vval.v_string[1] = NUL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "getcwd()" function
|
* "getcwd()" function
|
||||||
*/
|
*/
|
||||||
@@ -10794,6 +10814,8 @@ f_input(argvars, rettv)
|
|||||||
char_u buf[NUMBUFLEN];
|
char_u buf[NUMBUFLEN];
|
||||||
int cmd_silent_save = cmd_silent;
|
int cmd_silent_save = cmd_silent;
|
||||||
char_u *defstr = (char_u *)"";
|
char_u *defstr = (char_u *)"";
|
||||||
|
int xp_type = EXPAND_NOTHING;
|
||||||
|
char_u *xp_arg = NULL;
|
||||||
|
|
||||||
rettv->v_type = VAR_STRING;
|
rettv->v_type = VAR_STRING;
|
||||||
|
|
||||||
@@ -10835,9 +10857,31 @@ f_input(argvars, rettv)
|
|||||||
stuffReadbuffSpec(defstr);
|
stuffReadbuffSpec(defstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (argvars[2].v_type != VAR_UNKNOWN)
|
||||||
|
{
|
||||||
|
char_u *xp_name;
|
||||||
|
int xp_namelen;
|
||||||
|
long argt;
|
||||||
|
|
||||||
|
rettv->vval.v_string = NULL;
|
||||||
|
|
||||||
|
xp_name = get_tv_string_buf_chk(&argvars[2], buf);
|
||||||
|
if (xp_name == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
xp_namelen = STRLEN(xp_name);
|
||||||
|
|
||||||
|
if (parse_compl_arg(xp_name, xp_namelen, &xp_type, &argt, &xp_arg)
|
||||||
|
== FAIL)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (defstr != NULL)
|
if (defstr != NULL)
|
||||||
rettv->vval.v_string =
|
rettv->vval.v_string =
|
||||||
getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr);
|
getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr,
|
||||||
|
xp_type, xp_arg);
|
||||||
|
|
||||||
|
vim_free(xp_arg);
|
||||||
|
|
||||||
/* since the user typed this, no need to wait for return */
|
/* since the user typed this, no need to wait for return */
|
||||||
need_wait_return = FALSE;
|
need_wait_return = FALSE;
|
||||||
@@ -17680,10 +17724,8 @@ list_func_head(fp, indent)
|
|||||||
}
|
}
|
||||||
msg_putchar(')');
|
msg_putchar(')');
|
||||||
msg_clr_eos();
|
msg_clr_eos();
|
||||||
#ifdef FEAT_EVAL
|
|
||||||
if (p_verbose > 0)
|
if (p_verbose > 0)
|
||||||
last_set_msg(fp->uf_script_ID);
|
last_set_msg(fp->uf_script_ID);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -5688,7 +5688,7 @@ fix_help_buffer()
|
|||||||
{
|
{
|
||||||
for (fi = 0; fi < fcount; ++fi)
|
for (fi = 0; fi < fcount; ++fi)
|
||||||
{
|
{
|
||||||
fd = fopen((char *)fnames[fi], "r");
|
fd = mch_fopen((char *)fnames[fi], "r");
|
||||||
if (fd != NULL)
|
if (fd != NULL)
|
||||||
{
|
{
|
||||||
vim_fgets(IObuff, IOSIZE, fd);
|
vim_fgets(IObuff, IOSIZE, fd);
|
||||||
@@ -5953,7 +5953,7 @@ helptags_one(dir, ext, tagfname)
|
|||||||
STRCPY(NameBuff, dir);
|
STRCPY(NameBuff, dir);
|
||||||
add_pathsep(NameBuff);
|
add_pathsep(NameBuff);
|
||||||
STRCAT(NameBuff, tagfname);
|
STRCAT(NameBuff, tagfname);
|
||||||
fd_tags = fopen((char *)NameBuff, "w");
|
fd_tags = mch_fopen((char *)NameBuff, "w");
|
||||||
if (fd_tags == NULL)
|
if (fd_tags == NULL)
|
||||||
{
|
{
|
||||||
EMSG2(_("E152: Cannot open %s for writing"), NameBuff);
|
EMSG2(_("E152: Cannot open %s for writing"), NameBuff);
|
||||||
@@ -5988,7 +5988,7 @@ helptags_one(dir, ext, tagfname)
|
|||||||
*/
|
*/
|
||||||
for (fi = 0; fi < filecount && !got_int; ++fi)
|
for (fi = 0; fi < filecount && !got_int; ++fi)
|
||||||
{
|
{
|
||||||
fd = fopen((char *)files[fi], "r");
|
fd = mch_fopen((char *)files[fi], "r");
|
||||||
if (fd == NULL)
|
if (fd == NULL)
|
||||||
{
|
{
|
||||||
EMSG2(_("E153: Unable to open %s for reading"), files[fi]);
|
EMSG2(_("E153: Unable to open %s for reading"), files[fi]);
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ do_debug(cmd)
|
|||||||
if (!debug_greedy)
|
if (!debug_greedy)
|
||||||
save_typeahead(&typeaheadbuf);
|
save_typeahead(&typeaheadbuf);
|
||||||
|
|
||||||
cmdline = getcmdline_prompt('>', NULL, 0);
|
cmdline = getcmdline_prompt('>', NULL, 0, EXPAND_NOTHING, NULL);
|
||||||
|
|
||||||
if (!debug_greedy)
|
if (!debug_greedy)
|
||||||
restore_typeahead(&typeaheadbuf);
|
restore_typeahead(&typeaheadbuf);
|
||||||
@@ -1031,7 +1031,7 @@ profile_dump()
|
|||||||
|
|
||||||
if (profile_fname != NULL)
|
if (profile_fname != NULL)
|
||||||
{
|
{
|
||||||
fd = fopen((char *)profile_fname, "w");
|
fd = mch_fopen((char *)profile_fname, "w");
|
||||||
if (fd == NULL)
|
if (fd == NULL)
|
||||||
EMSG2(_(e_notopen), profile_fname);
|
EMSG2(_(e_notopen), profile_fname);
|
||||||
else
|
else
|
||||||
@@ -1149,7 +1149,7 @@ script_dump_profile(fd)
|
|||||||
fprintf(fd, "\n");
|
fprintf(fd, "\n");
|
||||||
fprintf(fd, "count total (s) self (s)\n");
|
fprintf(fd, "count total (s) self (s)\n");
|
||||||
|
|
||||||
sfd = fopen((char *)si->sn_name, "r");
|
sfd = mch_fopen((char *)si->sn_name, "r");
|
||||||
if (sfd == NULL)
|
if (sfd == NULL)
|
||||||
fprintf(fd, "Cannot open file!\n");
|
fprintf(fd, "Cannot open file!\n");
|
||||||
else
|
else
|
||||||
|
|||||||
137
src/ex_docmd.c
137
src/ex_docmd.c
@@ -5267,67 +5267,16 @@ invalid_count:
|
|||||||
}
|
}
|
||||||
else if (STRNICMP(attr, "complete", attrlen) == 0)
|
else if (STRNICMP(attr, "complete", attrlen) == 0)
|
||||||
{
|
{
|
||||||
char_u *arg = NULL;
|
|
||||||
size_t arglen = 0;
|
|
||||||
|
|
||||||
if (val == NULL)
|
if (val == NULL)
|
||||||
{
|
{
|
||||||
EMSG(_("E179: argument required for complete"));
|
EMSG(_("E179: argument required for -complete"));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
/* Look for any argument part - which is the part after any ',' */
|
|
||||||
for (i = 0; i < (int)vallen; ++i)
|
|
||||||
{
|
|
||||||
if (val[i] == ',')
|
|
||||||
{
|
|
||||||
arg = &val[i + 1];
|
|
||||||
arglen = vallen - i - 1;
|
|
||||||
vallen = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; command_complete[i].expand != 0; ++i)
|
if (parse_compl_arg(val, (int)vallen, compl, argt, compl_arg)
|
||||||
{
|
== FAIL)
|
||||||
if (STRLEN(command_complete[i].name) == vallen
|
|
||||||
&& STRNCMP(val, command_complete[i].name, vallen) == 0)
|
|
||||||
{
|
|
||||||
*compl = command_complete[i].expand;
|
|
||||||
if (command_complete[i].expand == EXPAND_BUFFERS)
|
|
||||||
*argt |= BUFNAME;
|
|
||||||
else if (command_complete[i].expand == EXPAND_DIRECTORIES
|
|
||||||
|| command_complete[i].expand == EXPAND_FILES)
|
|
||||||
*argt |= XFILE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (command_complete[i].expand == 0)
|
|
||||||
{
|
|
||||||
EMSG2(_("E180: Invalid complete value: %s"), val);
|
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
#if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
|
|
||||||
if (*compl != EXPAND_USER_DEFINED && *compl != EXPAND_USER_LIST &&
|
|
||||||
arg != NULL)
|
|
||||||
#else
|
|
||||||
if (arg != NULL)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
EMSG(_("E468: Completion argument only allowed for custom completion"));
|
|
||||||
return FAIL;
|
|
||||||
}
|
|
||||||
#if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
|
|
||||||
if ((*compl == EXPAND_USER_DEFINED || *compl == EXPAND_USER_LIST) &&
|
|
||||||
arg == NULL)
|
|
||||||
{
|
|
||||||
EMSG(_("E467: Custom completion requires a function argument"));
|
|
||||||
return FAIL;
|
|
||||||
}
|
|
||||||
if (arg != NULL)
|
|
||||||
*compl_arg = vim_strnsave(arg, (int)arglen);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char_u ch = attr[len];
|
char_u ch = attr[len];
|
||||||
@@ -5914,6 +5863,86 @@ get_user_cmd_complete(xp, idx)
|
|||||||
|
|
||||||
#endif /* FEAT_USR_CMDS */
|
#endif /* FEAT_USR_CMDS */
|
||||||
|
|
||||||
|
#if defined(FEAT_USR_CMDS) || defined(FEAT_EVAL) || defined(PROTO)
|
||||||
|
/*
|
||||||
|
* Parse a completion argument "value[vallen]".
|
||||||
|
* The detected completion goes in "*complp", argument type in "*argt".
|
||||||
|
* When there is an argument, for function and user defined completion, it's
|
||||||
|
* copied to allocated memory and stored in "*compl_arg".
|
||||||
|
* Returns FAIL if something is wrong.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
parse_compl_arg(value, vallen, complp, argt, compl_arg)
|
||||||
|
char_u *value;
|
||||||
|
int vallen;
|
||||||
|
int *complp;
|
||||||
|
long *argt;
|
||||||
|
char_u **compl_arg;
|
||||||
|
{
|
||||||
|
char_u *arg = NULL;
|
||||||
|
size_t arglen = 0;
|
||||||
|
int i;
|
||||||
|
int valend = vallen;
|
||||||
|
|
||||||
|
/* Look for any argument part - which is the part after any ',' */
|
||||||
|
for (i = 0; i < vallen; ++i)
|
||||||
|
{
|
||||||
|
if (value[i] == ',')
|
||||||
|
{
|
||||||
|
arg = &value[i + 1];
|
||||||
|
arglen = vallen - i - 1;
|
||||||
|
valend = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; command_complete[i].expand != 0; ++i)
|
||||||
|
{
|
||||||
|
if (STRLEN(command_complete[i].name) == valend
|
||||||
|
&& STRNCMP(value, command_complete[i].name, valend) == 0)
|
||||||
|
{
|
||||||
|
*complp = command_complete[i].expand;
|
||||||
|
if (command_complete[i].expand == EXPAND_BUFFERS)
|
||||||
|
*argt |= BUFNAME;
|
||||||
|
else if (command_complete[i].expand == EXPAND_DIRECTORIES
|
||||||
|
|| command_complete[i].expand == EXPAND_FILES)
|
||||||
|
*argt |= XFILE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (command_complete[i].expand == 0)
|
||||||
|
{
|
||||||
|
EMSG2(_("E180: Invalid complete value: %s"), value);
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
|
||||||
|
if (*complp != EXPAND_USER_DEFINED && *complp != EXPAND_USER_LIST
|
||||||
|
&& arg != NULL)
|
||||||
|
# else
|
||||||
|
if (arg != NULL)
|
||||||
|
# endif
|
||||||
|
{
|
||||||
|
EMSG(_("E468: Completion argument only allowed for custom completion"));
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
|
||||||
|
if ((*complp == EXPAND_USER_DEFINED || *complp == EXPAND_USER_LIST)
|
||||||
|
&& arg == NULL)
|
||||||
|
{
|
||||||
|
EMSG(_("E467: Custom completion requires a function argument"));
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (arg != NULL)
|
||||||
|
*compl_arg = vim_strnsave(arg, (int)arglen);
|
||||||
|
# endif
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ex_colorscheme(eap)
|
ex_colorscheme(eap)
|
||||||
exarg_T *eap;
|
exarg_T *eap;
|
||||||
|
|||||||
@@ -31,6 +31,11 @@ struct cmdline_info
|
|||||||
int cmdattr; /* attributes for prompt */
|
int cmdattr; /* attributes for prompt */
|
||||||
int overstrike; /* Typing mode on the command line. Shared by
|
int overstrike; /* Typing mode on the command line. Shared by
|
||||||
getcmdline() and put_on_cmdline(). */
|
getcmdline() and put_on_cmdline(). */
|
||||||
|
int xp_context; /* type of expansion */
|
||||||
|
# ifdef FEAT_EVAL
|
||||||
|
char_u *xp_arg; /* user-defined expansion arg */
|
||||||
|
int input_fn; /* Invoked for input() function */
|
||||||
|
# endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct cmdline_info ccline; /* current cmdline_info */
|
static struct cmdline_info ccline; /* current cmdline_info */
|
||||||
@@ -254,6 +259,15 @@ getcmdline(firstc, count, indent)
|
|||||||
xpc.xp_context = EXPAND_NOTHING;
|
xpc.xp_context = EXPAND_NOTHING;
|
||||||
xpc.xp_backslash = XP_BS_NONE;
|
xpc.xp_backslash = XP_BS_NONE;
|
||||||
|
|
||||||
|
#if defined(FEAT_EVAL)
|
||||||
|
if (ccline.input_fn)
|
||||||
|
{
|
||||||
|
xpc.xp_context = ccline.xp_context;
|
||||||
|
xpc.xp_pattern = ccline.cmdbuff;
|
||||||
|
xpc.xp_arg = ccline.xp_arg;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Avoid scrolling when called by a recursive do_cmdline(), e.g. when
|
* Avoid scrolling when called by a recursive do_cmdline(), e.g. when
|
||||||
* doing ":@0" when register 0 doesn't contain a CR.
|
* doing ":@0" when register 0 doesn't contain a CR.
|
||||||
@@ -414,6 +428,13 @@ getcmdline(firstc, count, indent)
|
|||||||
if (p_wmnu && wild_menu_showing != 0)
|
if (p_wmnu && wild_menu_showing != 0)
|
||||||
{
|
{
|
||||||
int skt = KeyTyped;
|
int skt = KeyTyped;
|
||||||
|
int old_RedrawingDisabled;
|
||||||
|
|
||||||
|
if (ccline.input_fn)
|
||||||
|
{
|
||||||
|
old_RedrawingDisabled = RedrawingDisabled;
|
||||||
|
RedrawingDisabled = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (wild_menu_showing == WM_SCROLLED)
|
if (wild_menu_showing == WM_SCROLLED)
|
||||||
{
|
{
|
||||||
@@ -442,6 +463,8 @@ getcmdline(firstc, count, indent)
|
|||||||
# endif
|
# endif
|
||||||
redraw_statuslines();
|
redraw_statuslines();
|
||||||
}
|
}
|
||||||
|
if (ccline.input_fn)
|
||||||
|
RedrawingDisabled = old_RedrawingDisabled;
|
||||||
KeyTyped = skt;
|
KeyTyped = skt;
|
||||||
wild_menu_showing = 0;
|
wild_menu_showing = 0;
|
||||||
}
|
}
|
||||||
@@ -1791,10 +1814,12 @@ returncmd:
|
|||||||
* Returns the command line in allocated memory, or NULL.
|
* Returns the command line in allocated memory, or NULL.
|
||||||
*/
|
*/
|
||||||
char_u *
|
char_u *
|
||||||
getcmdline_prompt(firstc, prompt, attr)
|
getcmdline_prompt(firstc, prompt, attr, xp_context, xp_arg)
|
||||||
int firstc;
|
int firstc;
|
||||||
char_u *prompt; /* command line prompt */
|
char_u *prompt; /* command line prompt */
|
||||||
int attr; /* attributes for prompt */
|
int attr; /* attributes for prompt */
|
||||||
|
int xp_context; /* type of expansion */
|
||||||
|
char_u *xp_arg; /* user-defined expansion argument */
|
||||||
{
|
{
|
||||||
char_u *s;
|
char_u *s;
|
||||||
struct cmdline_info save_ccline;
|
struct cmdline_info save_ccline;
|
||||||
@@ -1803,6 +1828,11 @@ getcmdline_prompt(firstc, prompt, attr)
|
|||||||
save_cmdline(&save_ccline);
|
save_cmdline(&save_ccline);
|
||||||
ccline.cmdprompt = prompt;
|
ccline.cmdprompt = prompt;
|
||||||
ccline.cmdattr = attr;
|
ccline.cmdattr = attr;
|
||||||
|
# ifdef FEAT_EVAL
|
||||||
|
ccline.xp_context = xp_context;
|
||||||
|
ccline.xp_arg = xp_arg;
|
||||||
|
ccline.input_fn = (firstc == '@');
|
||||||
|
# endif
|
||||||
s = getcmdline(firstc, 1L, 0);
|
s = getcmdline(firstc, 1L, 0);
|
||||||
restore_cmdline(&save_ccline);
|
restore_cmdline(&save_ccline);
|
||||||
/* Restore msg_col, the prompt from input() may have changed it. */
|
/* Restore msg_col, the prompt from input() may have changed it. */
|
||||||
@@ -1830,7 +1860,7 @@ cmdline_charsize(idx)
|
|||||||
static void
|
static void
|
||||||
set_cmdspos()
|
set_cmdspos()
|
||||||
{
|
{
|
||||||
if (ccline.cmdfirstc)
|
if (ccline.cmdfirstc != NUL)
|
||||||
ccline.cmdspos = 1 + ccline.cmdindent;
|
ccline.cmdspos = 1 + ccline.cmdindent;
|
||||||
else
|
else
|
||||||
ccline.cmdspos = 0 + ccline.cmdindent;
|
ccline.cmdspos = 0 + ccline.cmdindent;
|
||||||
@@ -2222,7 +2252,7 @@ redrawcmd_preedit()
|
|||||||
|
|
||||||
old_row = msg_row;
|
old_row = msg_row;
|
||||||
old_col = msg_col;
|
old_col = msg_col;
|
||||||
cmdspos = ((ccline.cmdfirstc) ? 1 : 0) + ccline.cmdindent;
|
cmdspos = ((ccline.cmdfirstc != NUL) ? 1 : 0) + ccline.cmdindent;
|
||||||
|
|
||||||
# ifdef FEAT_MBYTE
|
# ifdef FEAT_MBYTE
|
||||||
if (has_mbyte)
|
if (has_mbyte)
|
||||||
@@ -2813,14 +2843,14 @@ redrawcmdprompt()
|
|||||||
|
|
||||||
if (cmd_silent)
|
if (cmd_silent)
|
||||||
return;
|
return;
|
||||||
if (ccline.cmdfirstc)
|
if (ccline.cmdfirstc != NUL)
|
||||||
msg_putchar(ccline.cmdfirstc);
|
msg_putchar(ccline.cmdfirstc);
|
||||||
if (ccline.cmdprompt != NULL)
|
if (ccline.cmdprompt != NULL)
|
||||||
{
|
{
|
||||||
msg_puts_attr(ccline.cmdprompt, ccline.cmdattr);
|
msg_puts_attr(ccline.cmdprompt, ccline.cmdattr);
|
||||||
ccline.cmdindent = msg_col + (msg_row - cmdline_row) * Columns;
|
ccline.cmdindent = msg_col + (msg_row - cmdline_row) * Columns;
|
||||||
/* do the reverse of set_cmdspos() */
|
/* do the reverse of set_cmdspos() */
|
||||||
if (ccline.cmdfirstc)
|
if (ccline.cmdfirstc != NUL)
|
||||||
--ccline.cmdindent;
|
--ccline.cmdindent;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -3843,6 +3873,7 @@ set_expand_context(xp)
|
|||||||
if (ccline.cmdfirstc != ':'
|
if (ccline.cmdfirstc != ':'
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
&& ccline.cmdfirstc != '>' && ccline.cmdfirstc != '='
|
&& ccline.cmdfirstc != '>' && ccline.cmdfirstc != '='
|
||||||
|
&& !ccline.input_fn
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -3875,6 +3906,12 @@ set_cmd_context(xp, str, len, col)
|
|||||||
if (ccline.cmdfirstc == '=')
|
if (ccline.cmdfirstc == '=')
|
||||||
/* pass CMD_SIZE because there is no real command */
|
/* pass CMD_SIZE because there is no real command */
|
||||||
set_context_for_expression(xp, str, CMD_SIZE);
|
set_context_for_expression(xp, str, CMD_SIZE);
|
||||||
|
else if (ccline.input_fn)
|
||||||
|
{
|
||||||
|
xp->xp_context = ccline.xp_context;
|
||||||
|
xp->xp_pattern = ccline.cmdbuff;
|
||||||
|
xp->xp_arg = ccline.xp_arg;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
while (nextcomm != NULL)
|
while (nextcomm != NULL)
|
||||||
@@ -4837,6 +4874,22 @@ set_cmdline_pos(pos)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the current command-line type.
|
||||||
|
* Returns ':' or '/' or '?' or '@' or '>'
|
||||||
|
* Only works when the command line is being edited.
|
||||||
|
* Returns NUL when something is wrong.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
get_cmdline_type()
|
||||||
|
{
|
||||||
|
struct cmdline_info *p = get_ccline_ptr();
|
||||||
|
|
||||||
|
if (p == NULL)
|
||||||
|
return NUL;
|
||||||
|
return p->cmdfirstc;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calculate history index from a number:
|
* Calculate history index from a number:
|
||||||
* num > 0: seen as identifying number of a history entry
|
* num > 0: seen as identifying number of a history entry
|
||||||
|
|||||||
@@ -3483,12 +3483,11 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
|
|||||||
}
|
}
|
||||||
if (backup != NULL)
|
if (backup != NULL)
|
||||||
{
|
{
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Delete any existing backup and move the current version to
|
* Delete any existing backup and move the current version
|
||||||
* the backup. For safety, we don't remove the backup until
|
* to the backup. For safety, we don't remove the backup
|
||||||
* the write has finished successfully. And if the 'backup'
|
* until the write has finished successfully. And if the
|
||||||
* option is set, leave it around.
|
* 'backup' option is set, leave it around.
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* If the renaming of the original file to the backup file
|
* If the renaming of the original file to the backup file
|
||||||
|
|||||||
@@ -1098,7 +1098,7 @@ cs_find_common(opt, pat, forceit, verbose)
|
|||||||
FILE *f;
|
FILE *f;
|
||||||
char_u *tmp = vim_tempname('c');
|
char_u *tmp = vim_tempname('c');
|
||||||
|
|
||||||
f = fopen((char *)tmp, "w");
|
f = mch_fopen((char *)tmp, "w");
|
||||||
cs_file_results(f, nummatches);
|
cs_file_results(f, nummatches);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
/* '-' starts a new error list */
|
/* '-' starts a new error list */
|
||||||
|
|||||||
@@ -201,7 +201,7 @@ main
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef STARTUPTIME
|
#ifdef STARTUPTIME
|
||||||
time_fd = fopen(STARTUPTIME, "a");
|
time_fd = mch_fopen(STARTUPTIME, "a");
|
||||||
TIME_MSG("--- VIM STARTING ---");
|
TIME_MSG("--- VIM STARTING ---");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ xim_log(char *s, ...)
|
|||||||
return;
|
return;
|
||||||
if (fd == NULL)
|
if (fd == NULL)
|
||||||
{
|
{
|
||||||
fd = fopen("xim.log", "w");
|
fd = mch_fopen("xim.log", "w");
|
||||||
if (fd == NULL)
|
if (fd == NULL)
|
||||||
{
|
{
|
||||||
EMSG("Cannot open xim.log");
|
EMSG("Cannot open xim.log");
|
||||||
|
|||||||
@@ -3034,7 +3034,7 @@ verbose_open()
|
|||||||
/* Only give the error message once. */
|
/* Only give the error message once. */
|
||||||
verbose_did_open = TRUE;
|
verbose_did_open = TRUE;
|
||||||
|
|
||||||
verbose_fd = fopen((char *)p_vfile, "a");
|
verbose_fd = mch_fopen((char *)p_vfile, "a");
|
||||||
if (verbose_fd == NULL)
|
if (verbose_fd == NULL)
|
||||||
{
|
{
|
||||||
EMSG2(_(e_notopen), p_vfile);
|
EMSG2(_(e_notopen), p_vfile);
|
||||||
|
|||||||
@@ -3512,7 +3512,8 @@ get_crypt_key(store, twice)
|
|||||||
cmdline_row = msg_row;
|
cmdline_row = msg_row;
|
||||||
p1 = getcmdline_prompt(NUL, round == 0
|
p1 = getcmdline_prompt(NUL, round == 0
|
||||||
? (char_u *)_("Enter encryption key: ")
|
? (char_u *)_("Enter encryption key: ")
|
||||||
: (char_u *)_("Enter same key again: "), 0);
|
: (char_u *)_("Enter same key again: "), 0, EXPAND_NOTHING,
|
||||||
|
NULL);
|
||||||
cmdline_star = FALSE;
|
cmdline_star = FALSE;
|
||||||
|
|
||||||
if (p1 == NULL)
|
if (p1 == NULL)
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ char_u *get_user_commands __ARGS((expand_T *xp, int idx));
|
|||||||
char_u *get_user_cmd_flags __ARGS((expand_T *xp, int idx));
|
char_u *get_user_cmd_flags __ARGS((expand_T *xp, int idx));
|
||||||
char_u *get_user_cmd_nargs __ARGS((expand_T *xp, int idx));
|
char_u *get_user_cmd_nargs __ARGS((expand_T *xp, int idx));
|
||||||
char_u *get_user_cmd_complete __ARGS((expand_T *xp, int idx));
|
char_u *get_user_cmd_complete __ARGS((expand_T *xp, int idx));
|
||||||
|
int parse_compl_arg __ARGS((char_u *value, int vallen, int *complp, long *argt, char_u **compl_arg));
|
||||||
void not_exiting __ARGS((void));
|
void not_exiting __ARGS((void));
|
||||||
void handle_drop __ARGS((int filec, char_u **filev, int split));
|
void handle_drop __ARGS((int filec, char_u **filev, int split));
|
||||||
void alist_clear __ARGS((alist_T *al));
|
void alist_clear __ARGS((alist_T *al));
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/* ex_getln.c */
|
/* ex_getln.c */
|
||||||
char_u *getcmdline __ARGS((int firstc, long count, int indent));
|
char_u *getcmdline __ARGS((int firstc, long count, int indent));
|
||||||
char_u *getcmdline_prompt __ARGS((int firstc, char_u *prompt, int attr));
|
char_u *getcmdline_prompt __ARGS((int firstc, char_u *prompt, int attr, int xp_context, char_u *xp_arg));
|
||||||
char_u *getexline __ARGS((int c, void *dummy, int indent));
|
char_u *getexline __ARGS((int c, void *dummy, int indent));
|
||||||
char_u *getexmodeline __ARGS((int promptc, void *dummy, int indent));
|
char_u *getexmodeline __ARGS((int promptc, void *dummy, int indent));
|
||||||
int cmdline_overstrike __ARGS((void));
|
int cmdline_overstrike __ARGS((void));
|
||||||
@@ -33,6 +33,7 @@ int get_history_idx __ARGS((int histype));
|
|||||||
char_u *get_cmdline_str __ARGS((void));
|
char_u *get_cmdline_str __ARGS((void));
|
||||||
int get_cmdline_pos __ARGS((void));
|
int get_cmdline_pos __ARGS((void));
|
||||||
int set_cmdline_pos __ARGS((int pos));
|
int set_cmdline_pos __ARGS((int pos));
|
||||||
|
int get_cmdline_type __ARGS((void));
|
||||||
char_u *get_history_entry __ARGS((int histype, int idx));
|
char_u *get_history_entry __ARGS((int histype, int idx));
|
||||||
int clr_history __ARGS((int histype));
|
int clr_history __ARGS((int histype));
|
||||||
int del_history_entry __ARGS((int histype, char_u *str));
|
int del_history_entry __ARGS((int histype, char_u *str));
|
||||||
|
|||||||
@@ -3056,7 +3056,7 @@ ex_helpgrep(eap)
|
|||||||
+ STRLEN(fnames[fi]) - 3, 3) == 0))
|
+ STRLEN(fnames[fi]) - 3, 3) == 0))
|
||||||
continue;
|
continue;
|
||||||
#endif
|
#endif
|
||||||
fd = fopen((char *)fnames[fi], "r");
|
fd = mch_fopen((char *)fnames[fi], "r");
|
||||||
if (fd != NULL)
|
if (fd != NULL)
|
||||||
{
|
{
|
||||||
lnum = 1;
|
lnum = 1;
|
||||||
|
|||||||
@@ -36,5 +36,5 @@
|
|||||||
#define VIM_VERSION_NODOT "vim70aa"
|
#define VIM_VERSION_NODOT "vim70aa"
|
||||||
#define VIM_VERSION_SHORT "7.0aa"
|
#define VIM_VERSION_SHORT "7.0aa"
|
||||||
#define VIM_VERSION_MEDIUM "7.0aa ALPHA"
|
#define VIM_VERSION_MEDIUM "7.0aa ALPHA"
|
||||||
#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 16)"
|
#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 20)"
|
||||||
#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 16, compiled "
|
#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 20, compiled "
|
||||||
|
|||||||
Reference in New Issue
Block a user