0
0
mirror of https://github.com/vim/vim.git synced 2025-07-04 23:07:33 -04:00

updated for version 7.0149

This commit is contained in:
Bram Moolenaar 2005-09-20 23:22:24 +00:00
parent 60a795aad6
commit bfd8fc0529
32 changed files with 1057 additions and 258 deletions

View 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

View File

@ -1,7 +1,7 @@
" Vim completion script
" Language: XHTML 1.0 Strict
" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
" Last Change: 2005 Sep 15
" Last Change: 2005 Sep 19
function! htmlcomplete#CompleteTags(findstart, base)
if a:findstart
@ -11,26 +11,53 @@ function! htmlcomplete#CompleteTags(findstart, base)
while start >= 0 && line[start - 1] !~ '<'
let start -= 1
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
else
" Check if we should do CSS completion inside of <style> tag
if exists("b:csscompl")
unlet! b:csscompl
return csscomplete#CompleteCSS(0, a:base)
endif
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 []
endif
endif
" Set attribute groups
let g:coreattrs = ["id", "class", "style", "title"]
let g:i18n = ["lang", "xml:lang", "dir"]
let g:events = ["onclick", "ondblclick", "onmousedown", "onmouseup", "onmousemove",
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 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 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 =~ '>'
return []
endif
" If a:base contains white space it is 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:
" 1. Events attributes
if a:base =~ '\s'
@ -40,6 +67,113 @@ function! htmlcomplete#CompleteTags(findstart, base)
" Also retrieving class names from current file and linked
" stylesheets.
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.*")
" Now we have a:base stripped from all chars up to style/class.
" It may fail with some strange style value combinations.
@ -47,11 +181,6 @@ function! htmlcomplete#CompleteTags(findstart, base)
return []
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 =~ "=\s*[\"']"
" Let do attribute specific completion
@ -97,7 +226,7 @@ function! htmlcomplete#CompleteTags(findstart, base)
endif
elseif attrname == 'type'
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'
let values = ["button", "submit", "reset"]
endif
@ -111,128 +240,114 @@ function! htmlcomplete#CompleteTags(findstart, base)
" We need special version of sbase
let attrbase = matchstr(a:base, ".*[\"']")
let attrquote = matchstr(attrbase, '.$')
for m in values
if m =~ entered_value
call add(res, attrbase . m . '" ')
" This if is needed to not offer all completions as-is
" 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
endfor
return res + res2
endif
" Shorten a:base to not include last word
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\)$'
let attrs = g:coregroup
let attrs = coregroup
elseif tag == 'a'
let tagspec = ["charset", "type", "name", "href", "hreflang", "rel", "rev", "shape", "coords"]
let attrs = extend(tagspec, g:coregroup)
let attrs = extend(attrs, g:focus)
let attrs = coregroup + focus + ["charset", "type", "name", "href", "hreflang", "rel", "rev", "shape", "coords"]
elseif tag == 'area'
let attrs = g:coregroup
let attrs = coregroup
elseif tag == 'base'
let attrs = ["href", "id"]
elseif tag == 'blockquote'
let attrs = g:coregroup
let attrs = extend(attrs, ["cite"])
let attrs = coregroup + ["cite"]
elseif tag == 'body'
let attrs = g:coregroup
let attrs = extend(attrs, ["onload", "onunload"])
let attrs = coregroup + ["onload", "onunload"]
elseif tag == 'br'
let attrs = g:coreattrs
let attrs = coreattrs
elseif tag == 'button'
let attrs = g:coreattrs
let attrs = extend(attrs, g:focus)
let attrs = extend(attrs, ["name", "value", "type"])
let attrs = coreattrs + focus + ["name", "value", "type"]
elseif tag == '^\(col\|colgroup\)$'
let attrs = g:coreattrs
let attrs = extend(attrs, ["span", "width", "align", "char", "charoff", "valign"])
let attrs = coreattrs + ["span", "width", "align", "char", "charoff", "valign"]
elseif tag =~ '^\(del\|ins\)$'
let attrs = g:coreattrs
let attrs = extend(attrs, ["cite", "datetime"])
let attrs = coreattrs + ["cite", "datetime"]
elseif tag == 'form'
let attrs = g:coreattrs
let attrs = extend(attrs, ["action", "method", "enctype", "onsubmit", "onreset", "accept", "accept-charset"])
let attrs = coreattrs + ["action", "method=\"get\" ", "method=\"post\" ", "enctype", "onsubmit", "onreset", "accept", "accept-charset"]
elseif tag == 'head'
let attrs = g:i18n
let attrs = extend(attrs, ["id", "profile"])
let attrs = i18n + ["id", "profile"]
elseif tag == 'html'
let attrs = g:i18n
let attrs = extend(attrs, ["id", "xmlns"])
let attrs = i18n + ["id", "xmlns"]
elseif tag == 'img'
let attrs = g:coreattrs
let attrs = extend(attrs, ["src", "alt", "longdesc", "height", "width", "usemap", "ismap"])
let attrs = coreattrs + ["src", "alt", "longdesc", "height", "width", "usemap", "ismap"]
elseif tag == 'input'
let attrs = g:coreattrs
let attrs = extend(attrs, g:focus)
let attrs = extend(attrs, ["type", "name", "value", "checked", "disabled", "readonly", "size", "maxlength", "src", "alt", "usemap", "onselect", "onchange", "accept"])
let attrs = coreattrs + focus + ["type", "name", "value", "checked", "disabled", "readonly", "size", "maxlength", "src", "alt", "usemap", "onselect", "onchange", "accept"]
elseif tag == 'label'
let attrs = g:coreattrs
let attrs = extend(attrs, ["for", "accesskey", "onfocus", "onblur"])
let attrs = coreattrs + ["for", "accesskey", "onfocus", "onblur"]
elseif tag == 'legend'
let attrs = g:coreattrs
let attrs = extend(attrs, ["accesskey"])
let attrs = coreattrs + ["accesskey"]
elseif tag == 'link'
let attrs = g:coreattrs
let attrs = extend(attrs, ["charset", "href", "hreflang", "type", "rel", "rev", "media"])
let attrs = coreattrs + ["charset", "href", "hreflang", "type", "rel", "rev", "media"]
elseif tag == 'map'
let attrs = g:i18n
let attrs = extend(attrs, g:events)
let attrs = extend(attrs, ["id", "class", "style", "title", "name"])
let attrs = i18n + events + ["id", "class", "style", "title", "name"]
elseif tag == 'meta'
let attrs = g:i18n
let attrs = extend(attrs, ["id", "http-equiv", "content", "scheme", "name"])
let attrs = i18n + ["id", "http-equiv", "content", "scheme", "name"]
elseif tag == 'title'
let attrs = g:i18n
let attrs = extend(attrs, ["id"])
let attrs = i18n + ["id"]
elseif tag == 'object'
let attrs = g:coreattrs
let attrs = extend(attrs, ["declare", "classid", "codebase", "data", "type", "codetype", "archive", "standby", "height", "width", "usemap", "name", "tabindex"])
let attrs = coreattrs + ["declare", "classid", "codebase", "data", "type", "codetype", "archive", "standby", "height", "width", "usemap", "name", "tabindex"]
elseif tag == 'optgroup'
let attrs = g:coreattrs
let attrs = extend(attrs, ["disbled", "label"])
let attrs = coreattrs + ["disbled", "label"]
elseif tag == 'option'
let attrs = g:coreattrs
let attrs = extend(attrs, ["disbled", "selected", "value", "label"])
let attrs = coreattrs + ["disbled", "selected", "value", "label"]
elseif tag == 'param'
let attrs = ["id", "name", "value", "valuetype", "type"]
elseif tag == 'pre'
let attrs = g:coreattrs
let attrs = extend(attrs, ["xml:space"])
let attrs = coreattrs + ["xml:space"]
elseif tag == 'q'
let attrs = g:coreattrs
let attrs = extend(attrs, ["cite"])
let attrs = coreattrs + ["cite"]
elseif tag == 'script'
let attrs = ["id", "charset", "type", "src", "defer", "xml:space"]
elseif tag == 'select'
let attrs = g:coreattrs
let attrs = extend(attrs, ["name", "size", "multiple", "disabled", "tabindex", "onfocus", "onblur", "onchange"])
let attrs = coreattrs + ["name", "size", "multiple", "disabled", "tabindex", "onfocus", "onblur", "onchange"]
elseif tag == 'style'
let attrs = g:coreattrs
let attrs = extend(attrs, ["id", "type", "media", "title", "xml:space"])
let attrs = coreattrs + ["id", "type", "media", "title", "xml:space"]
elseif tag == 'table'
let attrs = g:coreattrs
let attrs = extend(attrs, ["summary", "width", "border", "frame", "rules" "cellspacing", "cellpadding"])
let attrs = coreattrs + ["summary", "width", "border", "frame", "rules", "cellspacing", "cellpadding"]
elseif tag =~ '^\(thead\|tfoot\|tbody\|tr\)$'
let attrs = g:coreattrs
let attrs = extend(attrs, ["align", "char", "charoff", "valign"])
let attrs = coreattrs + ["align", "char", "charoff", "valign"]
elseif tag == 'textarea'
let attrs = g:coreattrs
let attrs = extend(attrs, g:focus)
let attrs = extend(attrs, ["name", "rows", "cols", "disabled", "readonly", "onselect", "onchange"])
let attrs = coreattrs + focus + ["name", "rows", "cols", "disabled", "readonly", "onselect", "onchange"]
elseif tag =~ '^\(th\|td\)$'
let attrs = g:coreattrs
let attrs = extend(attrs, ["abbr", "headers", "scope", "rowspan", "colspan", "align", "char", "charoff", "valign"])
let attrs = coreattrs + ["abbr", "headers", "scope", "rowspan", "colspan", "align", "char", "charoff", "valign"]
else
return []
endif
for m in sort(attrs)
if m =~ attr
if m =~ '^\(ismap\|defer\|declare\|nohref\|checked\|disabled\|selected\|readonly\)$'
if m =~ '^'.attr
if m =~ '^\(ismap\|defer\|declare\|nohref\|checked\|disabled\|selected\|readonly\)$' || m =~ '='
call add(res, sbase.' '.m)
else
call add(res, sbase.' '.m.'="')
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
endfor
return res
return res + res2
endif
" Close tag
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'
let tags = split("a tt i b big small br span bdo map ".phrase." ".miscinline." ".inlineforms)
elseif opentag == 'html'
let tags = split("head body")
let tags = ["head", "body"]
elseif opentag == 'legend'
let tags = split(inline." ".miscinline)
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\)$'
let tags = split("form ".block." ".misc)
elseif opentag =~ '^\(ul\|ol\)$'
let tags = ["li"]
elseif opentag == 'dl'
let tags = split("dt dd")
let tags = ["dt", "dd"]
elseif opentag =~ '^\(ins\|del\|th\|td\|dd\|div\|li\)$'
let tags = split("form ".block." ".inline." ".misc)
elseif opentag == 'object'
@ -280,30 +395,34 @@ function! htmlcomplete#CompleteTags(findstart, base)
elseif opentag == 'form'
let tags = split(block." ".misc)
elseif opentag == 'select'
let tags = split("optgroup option")
let tags = ["optgroup", "option"]
elseif opentag == 'optgroup'
let tags = ["option"]
elseif opentag == 'colgroup'
let tags = ["col"]
elseif opentag == '^\(textarea\|option\|script\|style\|title\)$'
let tags = []
let tags = ['empty']
elseif opentag == 'button'
let tags = split("p h1 h2 h3 h4 h5 h6 div ul ol dl table")
elseif opentag =~ '^\(thead\|tfoot\|tbody)$'
let tags = ["p", "h1", "h2", "h3", "h4", "h5", "h6", "div", "ul", "ol", "dl", "table"]
elseif opentag =~ '^\(thead\|tfoot\|tbody\)$'
let tags = ["tr"]
elseif opentag == 'tr'
let tags = split("th td")
let tags = ["th", "td"]
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
for m in tags
if m =~ a:base
if m =~ '^'.a:base
call add(res, m)
elseif m =~ a:base
call add(res2, m)
endif
endfor
return res
return res + res2
endif
endfunction
@ -316,10 +435,10 @@ endfunction
" Version: 0.9.1
function! htmlcomplete#GetLastOpenTag(unaryTagsStack)
let linenum=line(".")
let lineend=col(".") - 1 " start: cursor position
let linenum=line('.')
let lineend=col('.') - 1 " start: cursor position
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 tagpat='</\=\(\k\|[-:]\)\+\|/>'
@ -330,7 +449,7 @@ function! htmlcomplete#GetLastOpenTag(unaryTagsStack)
else
let lineend=strlen(line)
endif
let b:lineTagStack=""
let b:lineTagStack=''
let mpos=0
let b:TagCol=0
while (mpos > -1)
@ -339,46 +458,45 @@ function! htmlcomplete#GetLastOpenTag(unaryTagsStack)
let b:TagCol=b:TagCol+mpos
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
call s:Push(matchstr(tag,'[^<>]\+'),"b:lineTagStack")
call s:Push(matchstr(tag,'[^<>]\+'),'b:lineTagStack')
endif
let lineend=lineend-mpos
let line=strpart(line,mpos,lineend)
endif
endwhile
while (!s:EmptystackP("b:lineTagStack"))
let tag=s:Pop("b:lineTagStack")
if match(tag, "^/") == 0 "found end tag
call s:Push(tag,"b:TagStack")
elseif s:EmptystackP("b:TagStack") && !s:Instack(tag, a:unaryTagsStack) "found unclosed tag
while (!s:EmptystackP('b:lineTagStack'))
let tag=s:Pop('b:lineTagStack')
if match(tag, '^/') == 0 "found end tag
call s:Push(tag,'b:TagStack')
elseif s:EmptystackP('b:TagStack') && !s:Instack(tag, a:unaryTagsStack) "found unclosed tag
return tag
else
let endtag=s:Peekstack("b:TagStack")
if endtag == "/".tag || endtag == "/"
call s:Pop("b:TagStack") "found a open/close tag pair
elseif !s:Instack(tag, a:unaryTagsStack) "we have a mismatch error
return ""
let endtag=s:Peekstack('b:TagStack')
if endtag == '/'.tag || endtag == '/'
call s:Pop('b:TagStack') "found a open/close tag pair
elseif !s:Instack(tag, a:unaryTagsStack) "we have a mismatch error
return ''
endif
endif
endif
endwhile
let linenum=linenum-1 | let first=0
endwhile
let linenum=linenum-1 | let first=0
endwhile
return ""
return ''
endfunction
function! s:InComment()
return synIDattr(synID(line("."), col("."), 0), "name") =~ 'Comment'
return synIDattr(synID(line('.'), col('.'), 0), 'name') =~ 'Comment'
endfunction
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
function! s:SetKeywords()
let g:IsKeywordBak=&iskeyword
let &iskeyword="33-255"
let &iskeyword='33-255'
endfunction
function! s:RestoreKeywords()
@ -387,15 +505,15 @@ endfunction
function! s:Push(el, sname)
if !s:EmptystackP(a:sname)
exe "let ".a:sname."=a:el.' '.".a:sname
exe 'let '.a:sname."=a:el.' '.".a:sname
else
exe "let ".a:sname."=a:el"
exe 'let '.a:sname.'=a:el'
endif
endfunction
function! s:EmptystackP(sname)
exe "let stack=".a:sname
if match(stack,"^ *$") == 0
exe 'let stack='.a:sname
if match(stack,'^ *$') == 0
return 1
else
return 0
@ -403,9 +521,9 @@ function! s:EmptystackP(sname)
endfunction
function! s:Instack(el, sname)
exe "let stack=".a:sname
exe 'let stack='.a:sname
call s:SetKeywords()
let m=match(stack, "\\<".a:el."\\>")
let m=match(stack, '\<'.a:el.'\>')
call s:RestoreKeywords()
if m < 0
return 0
@ -416,25 +534,25 @@ endfunction
function! s:Peekstack(sname)
call s:SetKeywords()
exe "let stack=".a:sname
let top=matchstr(stack, "\\<.\\{-1,}\\>")
exe 'let stack='.a:sname
let top=matchstr(stack, '\<.\{-1,}\>')
call s:RestoreKeywords()
return top
endfunction
function! s:Pop(sname)
if s:EmptystackP(a:sname)
return ""
return ''
endif
exe "let stack=".a:sname
exe 'let stack='.a:sname
call s:SetKeywords()
let loc=matchend(stack,"\\<.\\{-1,}\\>")
exe "let ".a:sname."=strpart(stack, loc+1, strlen(stack))"
let top=strpart(stack, match(stack, "\\<"), loc)
let loc=matchend(stack,'\<.\{-1,}\>')
exe 'let '.a:sname.'=strpart(stack, loc+1, strlen(stack))'
let top=strpart(stack, match(stack, '\<'), loc)
call s:RestoreKeywords()
return top
endfunction
function! s:Clearstack(sname)
exe "let ".a:sname."=''"
exe 'let '.a:sname."=''"
endfunction

View File

@ -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
@ -153,6 +153,7 @@ CTRL-R {0-9a-z"%#:-=.} *c_CTRL-R* *c_<C-R>*
*c_CTRL-R_=*
'=' the expression register: you are prompted to
enter an expression (see |expression|)
(doesn't work at the expression prompt)
See |registers| about registers. {not in Vi}
Implementation detail: When using the |expression| register
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
|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
at the end of the line, then it stays at the end.
|setcmdpos()| can be used to set the cursor position.
@ -203,7 +205,9 @@ CTRL-\ e {expr} *c_CTRL-\_e*
:call setcmdpos(strlen(cmd))
:return cmd
:endfunc
<
< This doesn't work recursively, thus not when already editing
an expression.
*c_CTRL-Y*
CTRL-Y When there is a modeless selection, copy the selection into
the clipboard. |modeless-selection|

View File

@ -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
@ -1520,6 +1520,7 @@ getcharmod( ) Number modifiers for the last typed character
getbufvar( {expr}, {varname}) variable {varname} in buffer {expr}
getcmdline() String return the current command-line
getcmdpos() Number return cursor position in command-line
getcmdtype() String return the current command-line type
getcwd() String the current working directory
getfperm( {fname}) String file permissions 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}
index( {list}, {expr} [, {start} [, {ic}]])
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
inputrestore() Number restore typeahead
inputsave() Number save and clear typeahead
@ -2533,14 +2535,27 @@ getcmdline() *getcmdline()*
|c_CTRL-R_=|.
Example: >
:cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
< Also see |getcmdpos()| and |setcmdpos()|.
< Also see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|.
getcmdpos() *getcmdpos()*
Return the position of the cursor in the command line as a
byte count. The first column is 1.
Only works when editing the command line, thus requires use of
|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() 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
input({prompt} [, {text}]) *input()*
input({prompt} [, {text} [, {completion}]]) *input()*
The result is a String, which is whatever the user typed on
the command-line. The parameter is either a prompt string, or
a blank string (for no prompt). A '\n' can be used in the
prompt to start a new line. The highlighting set with
|:echohl| is used for the prompt. The input is entered just
like a command-line, with the same editing commands and
mappings. There is a separate history for lines typed for
input().
prompt to start a new line.
The highlighting set with |:echohl| is used for the prompt.
The input is entered just like a command-line, with the same
editing commands and mappings. There is a separate history
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
default reply, as if the user typed this.
NOTE: This must not be used in a startup file, for the
versions that only run in GUI mode (e.g., the Win32 GUI).
default reply, as if the user typed this. Example: >
:let color = input("Color? ", "white")
< 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
consume remaining characters from that mapping, because a
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
|:execute| or |:normal|.
Example: >
:if input("Coffee or beer? ") == "beer"
: echo "Cheers!"
:endif
< Example with default text: >
:let color = input("Color? ", "white")
< Example with a mapping: >
Example with a mapping: >
:nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR>
:function GetFoo()
: call inputsave()
@ -2957,6 +2981,7 @@ inputdialog({prompt} [, {text} [, {cancelreturn}]]) *inputdialog()*
omitted an empty string is returned.
Hitting <Enter> works like pressing the OK button. Hitting
<Esc> works like pressing the Cancel button.
NOTE: Command-line completion is not supported.
inputlist({textlist}) *inputlist()*
{textlist} must be a list of strings. This list is displayed,
@ -2996,6 +3021,7 @@ inputsecret({prompt} [, {text}]) *inputsecret()*
|history| stack.
The result is a String, which is whatever the user actually
typed on the command-line in response to the issued prompt.
NOTE: Command-line completion is not supported.
insert({list}, {item} [, {idx}]) *insert()*
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
in the window. This is counting screen lines from the top of
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([{arg}]) The result is a Number, which is the number of the current

View File

@ -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
@ -990,16 +990,17 @@ are included.
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
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.
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
last open tag with: >
:echo htmlcompletion#GetLastOpenTag("b:unaryTagsStack")
<
:echo htmlcomplete#GetLastOpenTag("b:unaryTagsStack")
==============================================================================
8. Insert mode commands *inserting*

View File

@ -4992,6 +4992,7 @@ ft-fvwm-syntax syntax.txt /*ft-fvwm-syntax*
ft-groff-syntax syntax.txt /*ft-groff-syntax*
ft-gsp-syntax syntax.txt /*ft-gsp-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-htmlos-syntax syntax.txt /*ft-htmlos-syntax*
ft-ia64-syntax syntax.txt /*ft-ia64-syntax*
@ -5163,6 +5164,7 @@ getchar() eval.txt /*getchar()*
getcharmod() eval.txt /*getcharmod()*
getcmdline() eval.txt /*getcmdline()*
getcmdpos() eval.txt /*getcmdpos()*
getcmdtype() eval.txt /*getcmdtype()*
getcwd() eval.txt /*getcwd()*
getfontname() eval.txt /*getfontname()*
getfperm() eval.txt /*getfperm()*
@ -5294,6 +5296,7 @@ hebrew hebrew.txt /*hebrew*
hebrew.txt hebrew.txt /*hebrew.txt*
help various.txt /*help*
help-context help.txt /*help-context*
help-tags tags 1
help-translated various.txt /*help-translated*
help-xterm-window various.txt /*help-xterm-window*
help.txt help.txt /*help.txt*
@ -7319,6 +7322,13 @@ zf fold.txt /*zf*
zg spell.txt /*zg*
zh scroll.txt /*zh*
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*
zk fold.txt /*zk*
zl scroll.txt /*zl*

View File

@ -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
@ -32,6 +32,20 @@ be worked on, but only if you sponsor Vim development. See |sponsor|.
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:
- How to use a popup menu?
- 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
shorten(fname) shorten a file name, like home_replace()
perl(cmd) call Perl and return string
input(prompt, complete) like input() but do specified completion
inputrl() like input() but right-to-left
virtualmode() add argument to obtain whether "$" was used in
Visual block mode.

View File

@ -447,6 +447,8 @@ New functions: ~
|get()| get an item from a List or Dictionary
|getbufline()| get a list of lines from a specified buffer
(Yegappan Lakshmanan)
|getcmdtype()| return the current command-line type
(Yegappan Lakshmanan)
|getfontname()| get actual font name being used
|getfperm()| get file permission string (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
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*

View File

@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" 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
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
" like are used.
" Asterisk config file
au BufNewFile,BufRead *asterisk/*.conf* call s:StarSetf('asterisk')
" BIND zone
au BufNewFile,BufRead /var/named/* call s:StarSetf('bindzone')

View File

@ -1,7 +1,7 @@
" Vim support file to detect file types in scripts
"
" 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
" 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)
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 =~ '^\* looking for ' && s:line2 =~ '^\* comparing to ')
\ || (s:line1 =~ '^\*\*\* ' && s:line2 =~ '^--- ')
set ft=diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,5 +1,5 @@
*** 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,134 ----
@ -164,6 +164,15 @@
SFX G e ing e
! SFX G 0 ing [^e]
***************
*** 99,101 ****
! REP 88
REP a ei
--- 229,231 ----
! REP 91
REP a ei
***************
*** 137,138 ****
--- 267,270 ----
@ -171,6 +180,20 @@
+ REP y ie
+ REP ie y
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.dic Tue Aug 16 17:03:31 2005
***************

View File

@ -141,7 +141,7 @@
+ REP zoz z.o.z.
+
*** 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 ****
119937
@ -259,7 +259,7 @@
voorjaarsmoeheid
***************
*** 119938 ****
--- 119963,120139 ----
--- 119963,120142 ----
überhaupt
+ Christiaan/X
+ Fred/X
@ -436,4 +436,7 @@
+ bijv.
+ Gerard
+ Google
+ Luc
+ Luuk
+ Gert
+ Marion

View 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

View File

@ -668,18 +668,18 @@ ex_diffupdate(eap)
for (;;)
{
ok = FALSE;
fd = fopen((char *)tmp_orig, "w");
fd = mch_fopen((char *)tmp_orig, "w");
if (fd != NULL)
{
fwrite("line1\n", (size_t)6, (size_t)1, fd);
fclose(fd);
fd = fopen((char *)tmp_new, "w");
fd = mch_fopen((char *)tmp_new, "w");
if (fd != NULL)
{
fwrite("line2\n", (size_t)6, (size_t)1, fd);
fclose(fd);
diff_file(tmp_orig, tmp_new, tmp_diff);
fd = fopen((char *)tmp_diff, "r");
fd = mch_fopen((char *)tmp_diff, "r");
if (fd != NULL)
{
char_u linebuf[LBUFLEN];
@ -1144,7 +1144,7 @@ diff_read(idx_orig, idx_new, fname)
long count_orig, count_new;
int notset = TRUE; /* block "*dp" not set yet */
fd = fopen((char *)fname, "r");
fd = mch_fopen((char *)fname, "r");
if (fd == NULL)
{
EMSG(_("E98: Cannot read diff output"));

View File

@ -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_getcmdline __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_getfontname __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},
{"getcmdline", 0, 0, f_getcmdline},
{"getcmdpos", 0, 0, f_getcmdpos},
{"getcmdtype", 0, 0, f_getcmdtype},
{"getcwd", 0, 0, f_getcwd},
{"getfontname", 0, 1, f_getfontname},
{"getfperm", 1, 1, f_getfperm},
@ -6799,7 +6801,7 @@ static struct fst
{"iconv", 3, 3, f_iconv},
{"indent", 1, 1, f_indent},
{"index", 2, 4, f_index},
{"input", 1, 2, f_input},
{"input", 1, 3, f_input},
{"inputdialog", 1, 3, f_inputdialog},
{"inputlist", 1, 1, f_inputlist},
{"inputrestore", 0, 0, f_inputrestore},
@ -9437,6 +9439,24 @@ f_getcmdpos(argvars, rettv)
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
*/
@ -10794,6 +10814,8 @@ f_input(argvars, rettv)
char_u buf[NUMBUFLEN];
int cmd_silent_save = cmd_silent;
char_u *defstr = (char_u *)"";
int xp_type = EXPAND_NOTHING;
char_u *xp_arg = NULL;
rettv->v_type = VAR_STRING;
@ -10835,9 +10857,31 @@ f_input(argvars, rettv)
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)
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 */
need_wait_return = FALSE;
@ -17680,10 +17724,8 @@ list_func_head(fp, indent)
}
msg_putchar(')');
msg_clr_eos();
#ifdef FEAT_EVAL
if (p_verbose > 0)
last_set_msg(fp->uf_script_ID);
#endif
}
/*

View File

@ -5688,7 +5688,7 @@ fix_help_buffer()
{
for (fi = 0; fi < fcount; ++fi)
{
fd = fopen((char *)fnames[fi], "r");
fd = mch_fopen((char *)fnames[fi], "r");
if (fd != NULL)
{
vim_fgets(IObuff, IOSIZE, fd);
@ -5953,7 +5953,7 @@ helptags_one(dir, ext, tagfname)
STRCPY(NameBuff, dir);
add_pathsep(NameBuff);
STRCAT(NameBuff, tagfname);
fd_tags = fopen((char *)NameBuff, "w");
fd_tags = mch_fopen((char *)NameBuff, "w");
if (fd_tags == NULL)
{
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)
{
fd = fopen((char *)files[fi], "r");
fd = mch_fopen((char *)files[fi], "r");
if (fd == NULL)
{
EMSG2(_("E153: Unable to open %s for reading"), files[fi]);

View File

@ -167,7 +167,7 @@ do_debug(cmd)
if (!debug_greedy)
save_typeahead(&typeaheadbuf);
cmdline = getcmdline_prompt('>', NULL, 0);
cmdline = getcmdline_prompt('>', NULL, 0, EXPAND_NOTHING, NULL);
if (!debug_greedy)
restore_typeahead(&typeaheadbuf);
@ -1031,7 +1031,7 @@ profile_dump()
if (profile_fname != NULL)
{
fd = fopen((char *)profile_fname, "w");
fd = mch_fopen((char *)profile_fname, "w");
if (fd == NULL)
EMSG2(_(e_notopen), profile_fname);
else
@ -1149,7 +1149,7 @@ script_dump_profile(fd)
fprintf(fd, "\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)
fprintf(fd, "Cannot open file!\n");
else

View File

@ -5267,66 +5267,15 @@ invalid_count:
}
else if (STRNICMP(attr, "complete", attrlen) == 0)
{
char_u *arg = NULL;
size_t arglen = 0;
if (val == NULL)
{
EMSG(_("E179: argument required for complete"));
EMSG(_("E179: argument required for -complete"));
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 (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);
if (parse_compl_arg(val, (int)vallen, compl, argt, compl_arg)
== 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
{
@ -5914,6 +5863,86 @@ get_user_cmd_complete(xp, idx)
#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
ex_colorscheme(eap)
exarg_T *eap;

View File

@ -31,6 +31,11 @@ struct cmdline_info
int cmdattr; /* attributes for prompt */
int overstrike; /* Typing mode on the command line. Shared by
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 */
@ -254,6 +259,15 @@ getcmdline(firstc, count, indent)
xpc.xp_context = EXPAND_NOTHING;
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
* 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)
{
int skt = KeyTyped;
int old_RedrawingDisabled;
if (ccline.input_fn)
{
old_RedrawingDisabled = RedrawingDisabled;
RedrawingDisabled = 0;
}
if (wild_menu_showing == WM_SCROLLED)
{
@ -442,6 +463,8 @@ getcmdline(firstc, count, indent)
# endif
redraw_statuslines();
}
if (ccline.input_fn)
RedrawingDisabled = old_RedrawingDisabled;
KeyTyped = skt;
wild_menu_showing = 0;
}
@ -1791,10 +1814,12 @@ returncmd:
* Returns the command line in allocated memory, or NULL.
*/
char_u *
getcmdline_prompt(firstc, prompt, attr)
getcmdline_prompt(firstc, prompt, attr, xp_context, xp_arg)
int firstc;
char_u *prompt; /* command line prompt */
int attr; /* attributes for prompt */
int xp_context; /* type of expansion */
char_u *xp_arg; /* user-defined expansion argument */
{
char_u *s;
struct cmdline_info save_ccline;
@ -1803,6 +1828,11 @@ getcmdline_prompt(firstc, prompt, attr)
save_cmdline(&save_ccline);
ccline.cmdprompt = prompt;
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);
restore_cmdline(&save_ccline);
/* Restore msg_col, the prompt from input() may have changed it. */
@ -1830,7 +1860,7 @@ cmdline_charsize(idx)
static void
set_cmdspos()
{
if (ccline.cmdfirstc)
if (ccline.cmdfirstc != NUL)
ccline.cmdspos = 1 + ccline.cmdindent;
else
ccline.cmdspos = 0 + ccline.cmdindent;
@ -2222,7 +2252,7 @@ redrawcmd_preedit()
old_row = msg_row;
old_col = msg_col;
cmdspos = ((ccline.cmdfirstc) ? 1 : 0) + ccline.cmdindent;
cmdspos = ((ccline.cmdfirstc != NUL) ? 1 : 0) + ccline.cmdindent;
# ifdef FEAT_MBYTE
if (has_mbyte)
@ -2813,14 +2843,14 @@ redrawcmdprompt()
if (cmd_silent)
return;
if (ccline.cmdfirstc)
if (ccline.cmdfirstc != NUL)
msg_putchar(ccline.cmdfirstc);
if (ccline.cmdprompt != NULL)
{
msg_puts_attr(ccline.cmdprompt, ccline.cmdattr);
ccline.cmdindent = msg_col + (msg_row - cmdline_row) * Columns;
/* do the reverse of set_cmdspos() */
if (ccline.cmdfirstc)
if (ccline.cmdfirstc != NUL)
--ccline.cmdindent;
}
else
@ -3843,6 +3873,7 @@ set_expand_context(xp)
if (ccline.cmdfirstc != ':'
#ifdef FEAT_EVAL
&& ccline.cmdfirstc != '>' && ccline.cmdfirstc != '='
&& !ccline.input_fn
#endif
)
{
@ -3875,6 +3906,12 @@ set_cmd_context(xp, str, len, col)
if (ccline.cmdfirstc == '=')
/* pass CMD_SIZE because there is no real command */
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
#endif
while (nextcomm != NULL)
@ -4837,6 +4874,22 @@ set_cmdline_pos(pos)
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:
* num > 0: seen as identifying number of a history entry

View File

@ -3483,12 +3483,11 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
}
if (backup != NULL)
{
/*
* Delete any existing backup and move the current version to
* the backup. For safety, we don't remove the backup until
* the write has finished successfully. And if the 'backup'
* option is set, leave it around.
* Delete any existing backup and move the current version
* to the backup. For safety, we don't remove the backup
* until the write has finished successfully. And if the
* 'backup' option is set, leave it around.
*/
/*
* If the renaming of the original file to the backup file

View File

@ -1098,7 +1098,7 @@ cs_find_common(opt, pat, forceit, verbose)
FILE *f;
char_u *tmp = vim_tempname('c');
f = fopen((char *)tmp, "w");
f = mch_fopen((char *)tmp, "w");
cs_file_results(f, nummatches);
fclose(f);
/* '-' starts a new error list */

View File

@ -201,7 +201,7 @@ main
#endif
#ifdef STARTUPTIME
time_fd = fopen(STARTUPTIME, "a");
time_fd = mch_fopen(STARTUPTIME, "a");
TIME_MSG("--- VIM STARTING ---");
#endif

View File

@ -161,7 +161,7 @@ xim_log(char *s, ...)
return;
if (fd == NULL)
{
fd = fopen("xim.log", "w");
fd = mch_fopen("xim.log", "w");
if (fd == NULL)
{
EMSG("Cannot open xim.log");

View File

@ -3034,7 +3034,7 @@ verbose_open()
/* Only give the error message once. */
verbose_did_open = TRUE;
verbose_fd = fopen((char *)p_vfile, "a");
verbose_fd = mch_fopen((char *)p_vfile, "a");
if (verbose_fd == NULL)
{
EMSG2(_(e_notopen), p_vfile);

View File

@ -3512,7 +3512,8 @@ get_crypt_key(store, twice)
cmdline_row = msg_row;
p1 = getcmdline_prompt(NUL, round == 0
? (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;
if (p1 == NULL)

View File

@ -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_nargs __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 handle_drop __ARGS((int filec, char_u **filev, int split));
void alist_clear __ARGS((alist_T *al));

View File

@ -1,6 +1,6 @@
/* ex_getln.c */
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 *getexmodeline __ARGS((int promptc, void *dummy, int indent));
int cmdline_overstrike __ARGS((void));
@ -33,6 +33,7 @@ int get_history_idx __ARGS((int histype));
char_u *get_cmdline_str __ARGS((void));
int get_cmdline_pos __ARGS((void));
int set_cmdline_pos __ARGS((int pos));
int get_cmdline_type __ARGS((void));
char_u *get_history_entry __ARGS((int histype, int idx));
int clr_history __ARGS((int histype));
int del_history_entry __ARGS((int histype, char_u *str));

View File

@ -3056,7 +3056,7 @@ ex_helpgrep(eap)
+ STRLEN(fnames[fi]) - 3, 3) == 0))
continue;
#endif
fd = fopen((char *)fnames[fi], "r");
fd = mch_fopen((char *)fnames[fi], "r");
if (fd != NULL)
{
lnum = 1;

View File

@ -36,5 +36,5 @@
#define VIM_VERSION_NODOT "vim70aa"
#define VIM_VERSION_SHORT "7.0aa"
#define VIM_VERSION_MEDIUM "7.0aa ALPHA"
#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 16)"
#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 16, compiled "
#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 20, compiled "