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

updated for version 7.0150

This commit is contained in:
Bram Moolenaar 2005-09-25 22:16:38 +00:00
parent bfd8fc0529
commit 1e01546026
38 changed files with 1826 additions and 1496 deletions

View File

@ -1,7 +1,7 @@
" Vim completion script
" Language: CSS 2.1
" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
" Last Change: 2005 Sep 19
" Last Change: 2005 Sep 23
function! csscomplete#CompleteCSS(findstart, base)
if a:findstart
@ -18,6 +18,8 @@ else
" 3. if } we are outside of css definitions
" 4. for comments ignoring is be the easiest but assume they are the same
" as 1.
" 5. if @ complete at-rule
" 6. if ! complete important
let line = a:base
let res = []
@ -26,6 +28,7 @@ else
" 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, ':')
@ -34,6 +37,7 @@ else
let closecomm = stridx(revline, '/*') " Line was reversed
let style = stridx(revline, '=\s*elyts') " Line was reversed
let atrule = stridx(revline, '@')
let exclam = stridx(revline, '!')
if openbrace > -1
let borders[openbrace] = "openbrace"
@ -59,6 +63,9 @@ else
if atrule > -1
let borders[atrule] = "atrule"
endif
if exclam > -1
let borders[exclam] = "exclam"
endif
if len(borders) == 0 || borders[min(keys(borders))] =~ '^\(openbrace\|semicolon\|opencomm\|closecomm\|style\)$'
" Complete properties
@ -318,6 +325,22 @@ else
return []
elseif borders[min(keys(borders))] == 'exclam'
" Complete values
let impbase = matchstr(line, '.\{-}!\s*\ze[a-zA-Z ]*$')
let entered_imp = matchstr(line, '.\{-}!\s*\zs[a-zA-Z ]*$')
let values = ["important"]
for m in values
if m =~? '^'.entered_imp
call add(res, impbase . m)
endif
endfor
return res
elseif borders[min(keys(borders))] == 'atrule'
let afterat = matchstr(line, '.*@\zs.*')
@ -368,7 +391,7 @@ else
endif
let values = ["charset", "page", "media", "import"]
let values = ["charset", "page", "media", "import", "font-face"]
let atrulebase = matchstr(line, '.*@\ze[a-zA-Z -]*$')
let entered_atrule = matchstr(line, '.*@\zs[a-zA-Z-]*$')

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 19
" Last Change: 2005 Sep 23
function! htmlcomplete#CompleteTags(findstart, base)
if a:findstart
@ -66,8 +66,13 @@ function! htmlcomplete#CompleteTags(findstart, base)
" it possible?
" Also retrieving class names from current file and linked
" stylesheets.
if a:base =~ "\\(on[a-z]*\\|style\\|class\\)\\s*=\\s*[\"']"
if a:base =~ "\\(on[a-z]*\\|id\\|style\\|class\\)\\s*=\\s*[\"']"
if a:base =~ "\\(id\\|class\\)\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
if a:base =~ "class\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
let search_for = "class"
elseif a:base =~ "id\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
let search_for = "id"
endif
" Handle class name completion
" 1. Find lines of <link stylesheet>
" 1a. Check file for @import
@ -76,9 +81,22 @@ function! htmlcomplete#CompleteTags(findstart, base)
let head = getline(search('<head\>'), search('<\/head>'))
let headjoined = join(copy(head), ' ')
if headjoined =~ '<style'
let stylehead = substitute(headjoined, '+>\*[', ' ', 'g')
let stylehead = substitute(headjoined, '+>\*[,', ' ', 'g')
if search_for == 'class'
let styleheadlines = split(stylehead)
let headclasslines = filter(copy(styleheadlines), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
else
let stylesheet = split(headjoined, '[{}]')
" Get all lines which fit id syntax
let classlines = filter(copy(stylesheet), "v:val =~ '#[a-zA-Z0-9_-]\\+'")
" Filter out possible color definitions
call filter(classlines, "v:val !~ ':\\s*#[a-zA-Z0-9_-]\\+'")
" Filter out complex border definitions
call filter(classlines, "v:val !~ '\\(none\\|hidden\\|dotted\\|dashed\\|solid\\|double\\|groove\\|ridge\\|inset\\|outset\\)\\s*#[a-zA-Z0-9_-]\\+'")
let templines = join(classlines, ' ')
let headclasslines = split(templines)
call filter(headclasslines, "v:val =~ '#[a-zA-Z0-9_-]\\+'")
endif
let internal = 1
else
let internal = 0
@ -93,13 +111,15 @@ function! htmlcomplete#CompleteTags(findstart, base)
let styletable += [matchstr(line, "href\\s*=\\s*[\"']\\zs\\f\\+\\ze")]
endif
endfor
for file in filestable
for file in styletable
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")]
let secfile = matchstr(line, "import\\s\\+\\(url(\\)\\?[\"']\\?\\zs\\f\\+\\ze")
let secfile = fnamemodify(file, ":p:h").'/'.secfile
let secimportfiles += [secfile]
endfor
endif
endif
@ -109,10 +129,24 @@ function! htmlcomplete#CompleteTags(findstart, base)
for file in cssfiles
if filereadable(file)
let stylesheet = readfile(file)
let stylefile = join(stylesheet)
let stylefile = substitute(stylefile, '+>\*[', ' ', 'g')
let stylefile = join(stylesheet, ' ')
let stylefile = substitute(stylefile, '+>\*[,', ' ', 'g')
if search_for == 'class'
let stylesheet = split(stylefile)
let classlines = filter(copy(stylesheet), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
else
let stylesheet = split(stylefile, '[{}]')
" Get all lines which fit id syntax
let classlines = filter(copy(stylesheet), "v:val =~ '#[a-zA-Z0-9_-]\\+'")
" Filter out possible color definitions
call filter(classlines, "v:val !~ ':\\s*#[a-zA-Z0-9_-]\\+'")
" Filter out complex border definitions
call filter(classlines, "v:val !~ '\\(none\\|hidden\\|dotted\\|dashed\\|solid\\|double\\|groove\\|ridge\\|inset\\|outset\\)\\s*#[a-zA-Z0-9_-]\\+'")
let templines = join(classlines, ' ')
let stylelines = split(templines)
let classlines = filter(stylelines, "v:val =~ '#[a-zA-Z0-9_-]\\+'")
endif
endif
" We gathered classes definitions from all external files
let classes += classlines
@ -120,22 +154,24 @@ function! htmlcomplete#CompleteTags(findstart, base)
if internal == 1
let classes += headclasslines
endif
if search_for == 'class'
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
if has_key(elements, 'common')
let elements['common'] .= ' '.class
else
let elements["common"] = class
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
let elements[tagname] .= ' '.class
else
let elements[tagname] = class
endif
@ -143,21 +179,47 @@ function! htmlcomplete#CompleteTags(findstart, base)
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")
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"])
elseif !has_key(elements, tag) && has_key(elements, 'common')
let values = split(elements['common'])
else
return []
endif
elseif search_for == 'id'
" Find used IDs
" 1. Catch whole file
let filelines = getline(1, line('$'))
" 2. Find lines with possible id
let used_id_lines = filter(filelines, 'v:val =~ "id\\s*=\\s*[\"''][a-zA-Z0-9_-]\\+"')
" 3a. Join all filtered lines
let id_string = join(used_id_lines, ' ')
" 3b. And split them to be sure each id is in separate item
let id_list = split(id_string, 'id\s*=\s*')
" 4. Extract id values
let used_id = map(id_list, 'matchstr(v:val, "[\"'']\\zs[a-zA-Z0-9_-]\\+\\ze")')
let joined_used_id = ','.join(used_id, ',').','
let allvalues = map(classes, 'matchstr(v:val, ".*#\\zs[a-zA-Z0-9_-]\\+")')
let values = []
for element in classes
if joined_used_id !~ ','.element.','
let values += [element]
endif
endfor
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)
@ -229,6 +291,10 @@ function! htmlcomplete#CompleteTags(findstart, base)
let values = ["text", "password", "checkbox", "radio", "submit", "reset", "file", "hidden", "image", "button"]
elseif a:base =~ '^button'
let values = ["button", "submit", "reset"]
elseif a:base =~ '^style'
let values = ["text/css"]
elseif a:base =~ '^script'
let values = ["text/javascript"]
endif
else
return []
@ -313,11 +379,11 @@ function! htmlcomplete#CompleteTags(findstart, base)
elseif tag == 'q'
let attrs = coreattrs + ["cite"]
elseif tag == 'script'
let attrs = ["id", "charset", "type", "src", "defer", "xml:space"]
let attrs = ["id", "charset", "type=\"text/javascript\"", "type", "src", "defer", "xml:space"]
elseif tag == 'select'
let attrs = coreattrs + ["name", "size", "multiple", "disabled", "tabindex", "onfocus", "onblur", "onchange"]
elseif tag == 'style'
let attrs = coreattrs + ["id", "type", "media", "title", "xml:space"]
let attrs = coreattrs + ["id", "type=\"text/css\"", "type", "media", "title", "xml:space"]
elseif tag == 'table'
let attrs = coreattrs + ["summary", "width", "border", "frame", "rules", "cellspacing", "cellpadding"]
elseif tag =~ '^\(thead\|tfoot\|tbody\|tr\)$'

View File

@ -1,7 +1,6 @@
" netrw.vim: Handles file transfer and remote directory listing across a network
" AUTOLOAD PORTION
" Date: Sep 12, 2005
" Version: 70
" Last Change: Aug 29, 2005
" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
@ -17,19 +16,13 @@
" But be doers of the Word, and not only hearers, deluding your own selves {{{1
" (James 1:22 RSV)
" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
" Exception for &cp: {{{1
if &cp
finish
endif
let s:keepcpo= &cpo
set cpo&vim
" call Decho("doing autoload/netrw.vim")
if v:version < 700
echohl WarningMsg | echo "***netrw*** you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw" | echohl None
finish
endif
let g:loaded_netrw = "v70"
let s:keepcpo = &cpo
set cpo&vim
" call Decho("doing autoload/netrw.vim")
" ---------------------------------------------------------------------
" Default values for global netrw variables {{{1
@ -1133,7 +1126,7 @@ fun! s:NetBrowse(dirname)
" call Decho("new path<".path.">")
" remote-read the requested file into current buffer
keepjumps keepalt enew!
enew!
set ma
" call Decho("exe file .method."://".user.machine."/".escape(path,s:netrw_cd_escape))
exe "file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape)
@ -1143,7 +1136,7 @@ fun! s:NetBrowse(dirname)
keepjumps 1d
" save certain window-oriented variables into buffer-oriented variables
call s:SetBufWinVars()
call s:BufWinVars()
call s:NetOptionRestore()
setlocal nomod
@ -1169,7 +1162,7 @@ fun! s:NetBrowse(dirname)
endif
else
" call Decho("generate a new buffer")
keepjumps keepalt enew!
enew!
endif
" rename file to reflect where its from
@ -1267,7 +1260,6 @@ fun! s:NetBrowse(dirname)
if g:netrw_ftp_browse_reject != ""
exe "silent! g/".g:netrw_ftp_browse_reject."/keepjumps d"
endif
silent! keepjumps %s/\r$//e
" if there's no ../ listed, then put ./ and ../ in
let line1= line(".")
@ -1282,9 +1274,9 @@ fun! s:NetBrowse(dirname)
keepjumps norm! 0
" more cleanup
exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
exe 'keepjumps silent! '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
exe "keepjumps silent! ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
exe "keepjumps silent! ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
endif
else
@ -1341,33 +1333,33 @@ fun! s:NetBrowse(dirname)
keepjumps norm! 0
endif
exe 'silent keepjumps '.w:netrw_bannercnt.',$s/ -> .*$//e'
exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
exe 'silent keepjumps '.w:netrw_bannercnt
exe 'keepjumps silent '.w:netrw_bannercnt.',$s/ -> .*$//e'
exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
exe w:netrw_bannercnt
endif
if line("$") >= w:netrw_bannercnt
if g:netrw_sort_by =~ "^n"
call s:SetSort()
if g:netrw_sort_direction =~ 'n'
exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
else
exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
endif
exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
endif
if w:netrw_longlist == 1
" shorten the list to keep its width <= winwidth characters
exe "silent keepjumps ".w:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
exe "keepjumps silent ".w:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
endif
endif
endif
" cleanup any windows mess at end-of-line
keepjumps silent! %s/\r$//e
call s:NetrwWideListing()
if line("$") >= w:netrw_bannercnt
" place cursor on the top-left corner of the file listing
exe "keepjumps ".w:netrw_bannercnt
norm! 0
endif
call s:NetOptionRestore()
@ -1457,7 +1449,7 @@ fun! s:NetGetWord()
let s:netrw_skipbrowse= 1
echo 'Pressing "a" also works'
elseif line("$") > w:netrw_bannercnt
exe 'silent keepjumps '.w:netrw_bannercnt
exe w:netrw_bannercnt
endif
elseif w:netrw_longlist == 0
@ -1698,7 +1690,7 @@ fun! s:NetBrowseX(fname,remote)
" create a local copy
let fname= tempname().".".exten
" call Decho("create a local copy of <".a:fname."> as <".fname.">")
exe "silent keepjumps bot 1new ".a:fname
exe "keepjumps silent bot 1new ".a:fname
set bh=delete
exe "w! ".fname
q
@ -1823,14 +1815,14 @@ fun! s:NetBrowseFtpCmd(path,cmd)
" cleanup for Windows
if has("win32") || has("win95") || has("win64") || has("win16")
silent! keepjumps! %s/\r$//e
keepjumps silent!! %s/\r$//e
endif
if a:cmd == "dir"
" infer directory/link based on the file permission string
silent! keepjumps g/d\%([-r][-w][-x]\)\{3}/s@$@/@
silent! keepjumps g/l\%([-r][-w][-x]\)\{3}/s/$/@/
keepjumps silent! g/d\%([-r][-w][-x]\)\{3}/s@$@/@
keepjumps silent! g/l\%([-r][-w][-x]\)\{3}/s/$/@/
if w:netrw_longlist == 0 || w:netrw_longlist == 2
exe "silent! keepjumps ".curline.',$s/^\%(\S\+\s\+\)\{8}//e'
exe "keepjumps silent! ".curline.',$s/^\%(\S\+\s\+\)\{8}//e'
endif
endif
@ -1868,9 +1860,9 @@ fun! s:NetrwListHide()
" Prune the list by hiding any files which match
" call Decho("pruning <".hide."> listhide<".listhide.">")
if g:netrw_hide == 1
exe 'silent keepjumps '.w:netrw_bannercnt.',$g~'.hide.'~d'
exe 'keepjumps silent '.w:netrw_bannercnt.',$g~'.hide.'~d'
elseif g:netrw_hide == 2
exe 'silent keepjumps '.w:netrw_bannercnt.',$v~'.hide.'~d'
exe 'keepjumps silent '.w:netrw_bannercnt.',$v~'.hide.'~d'
endif
endwhile
@ -2004,7 +1996,7 @@ fun! s:NetrwWideListing()
exe "silent keepjumps norm! 0\<c-v>".newcolqty.'j$hx'.w:netrw_bannercnt.'G$p'
endif
exe "silent keepjumps ".newcolstart.','.newcolend.'d'
exe 'silent keepjumps '.w:netrw_bannercnt
exe w:netrw_bannercnt
endwhile
exe "silent keepjumps ".w:netrw_bannercnt.',$s/\s\+$//e'
set noma nomod
@ -2138,7 +2130,7 @@ fun! s:NetBookmarkDir(chg,curdir)
if exists("w:netrw_bannercnt") && line(".") <= w:netrw_bannercnt
" looks like a "b" was pressed while in the banner region
if line("$") > w:netrw_bannercnt
exe 'silent keepjumps '.w:netrw_bannercnt
exe w:netrw_bannercnt
endif
echo ""
" call Dret("NetBookmarkDir - ignoring")
@ -2237,10 +2229,12 @@ endfun
" ---------------------------------------------------------------------
" NetObtain: obtain file under cursor (for remote browsing support) {{{2
fun! s:NetObtain()
if !exists("s:netrw_users_stl")
let s:netrw_users_stl= &stl
endif
let fname= expand("<cWORD>")
" NetrwStatusLine support - for obtaining support
call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.fname)
exe 'set stl=%f\ %h%m%r%=Obtaining\ '.escape(fname,' ')
redraw!
" call Dfunc("NetObtain() method=".w:netrw_method)
if exists("w:netrw_method") && w:netrw_method =~ '[235]'
@ -2318,8 +2312,6 @@ fun! s:NetObtain()
echohl Error | echo "***netrw*** this system doesn't support ftp" | echohl None
call inputsave()|call input("Press <cr> to continue")|call inputrestore()
endif
let &stl = s:netrw_users_stl
let &laststatus = s:netrw_users_ls
" call Dret("NetObtain")
return
endif
@ -2343,8 +2335,7 @@ fun! s:NetObtain()
endif
" restore status line
let &stl = s:netrw_users_stl
let &laststatus = s:netrw_users_ls
let &stl= s:netrw_users_stl
redraw!
" call Dret("NetObtain")
@ -2413,7 +2404,7 @@ fun! netrw#DirBrowse(dirname)
" get cleared buffer
if bufnum < 0 || !bufexists(bufnum)
keepjumps keepalt enew!
keepalt enew!
" call Decho("enew buffer")
else
exe "keepalt b ".bufnum
@ -2505,7 +2496,7 @@ fun! netrw#DirBrowse(dirname)
nnoremap <buffer> <silent> U :<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
nnoremap <buffer> <silent> v :call <SID>NetSplit(3)<cr>
nnoremap <buffer> <silent> x :call <SID>NetBrowseX(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),0),0)"<cr>
nnoremap <buffer> <silent> <2-leftmouse> :call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
nnoremap <buffer> <silent> <2-leftmouse> :exe "call <SID>LocalRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))"<cr>
nnoremap <buffer> <silent> <s-up> :Pexplore<cr>
nnoremap <buffer> <silent> <s-down> :Nexplore<cr>
exe 'nnoremap <buffer> <silent> <del> :call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
@ -2583,19 +2574,19 @@ fun! netrw#DirBrowse(dirname)
call s:SetSort()
if g:netrw_sort_direction =~ 'n'
exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
else
exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
endif
exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
else
if g:netrw_sort_direction =~ 'n'
exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
else
exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
endif
exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
endif
endif
@ -2603,16 +2594,14 @@ fun! netrw#DirBrowse(dirname)
call s:NetrwWideListing()
if exists("w:netrw_bannercnt") && line("$") > w:netrw_bannercnt
" place cursor on the top-left corner of the file listing
exe 'silent '.w:netrw_bannercnt
norm! 0
exe w:netrw_bannercnt
endif
" record previous current directory
let w:netrw_prvdir= b:netrw_curdir
" save certain window-oriented variables into buffer-oriented variables
call s:SetBufWinVars()
call s:BufWinVars()
call s:NetOptionRestore()
setlocal noma nomod nonu bh=hide nobl
@ -2712,7 +2701,7 @@ fun! s:LocalBrowseList()
endwhile
" cleanup any windows mess at end-of-line
silent! keepjumps %s/\r$//e
keepjumps silent! %s/\r$//e
setlocal ts=32
" call Dret("LocalBrowseList")
@ -3043,8 +3032,12 @@ fun! netrw#Explore(indx,dosplit,style,...)
endif
endif
" NetrwStatusLine support - for exploring support
" NetrwStatusLine support
let w:netrw_explore_indx= indx
if !exists("s:netrw_users_stl")
let s:netrw_users_stl= &stl
endif
set stl=%f\ %h%m%r%=%{NetrwStatusLine()}
" call Decho("explorelist<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
" sanity check
@ -3057,21 +3050,15 @@ fun! netrw#Explore(indx,dosplit,style,...)
endif
exe "let dirfile= w:netrw_explore_list[".indx."]"
" call Decho("dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">")
" call Decho("dirfile<".dirfile."> indx=".indx)
let newdir= substitute(dirfile,'/[^/]*$','','e')
" call Decho("newdir<".newdir.">")
" call Decho("calling LocalBrowse(newdir<".newdir.">)")
call s:LocalBrowse(newdir)
if w:netrw_longlist == 0 || w:netrw_longlist == 1
call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
else
call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
endif
call search(substitute(dirfile,"^.*/","",""),"W")
let w:netrw_explore_mtchcnt = indx + 1
let w:netrw_explore_bufnr = bufnr(".")
let w:netrw_explore_line = line(".")
call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}')
" call Decho("explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
else
@ -3090,74 +3077,13 @@ fun! netrw#Explore(indx,dosplit,style,...)
" call Dret("Explore")
endfun
" ---------------------------------------------------------------------
" SetupNetrwStatusLine: {{{2
fun! s:SetupNetrwStatusLine(statline)
" call Dfunc("SetupNetrwStatusLine(statline<".a:statline.">)")
if !exists("s:netrw_setup_statline")
let s:netrw_setup_statline= 1
" call Decho("do first-time status line setup")
if !exists("s:netrw_users_stl")
let s:netrw_users_stl= &stl
endif
if !exists("s:netrw_users_ls")
let s:netrw_users_ls= &laststatus
endif
" set up User9 highlighting as needed
let keepa= @a
redir @a
try
hi User9
catch /^Vim\%((\a\+)\)\=:E411/
if &bg == "dark"
hi User9 ctermfg=yellow ctermbg=blue guifg=yellow guibg=blue
else
hi User9 ctermbg=yellow ctermfg=blue guibg=yellow guifg=blue
endif
endtry
redir END
let @a= keepa
endif
" set up status line (may use User9 highlighting)
" insure that windows have a statusline
" make sure statusline is displayed
let &stl=a:statline
set laststatus=2
" call Decho("stl=".&stl)
redraw!
" call Dret("SetupNetrwStatusLine : stl=".&stl)
endfun
" ---------------------------------------------------------------------
" NetrwStatusLine: {{{2
fun! NetrwStatusLine()
" vvv NetrwStatusLine() debugging vvv
" let g:stlmsg=""
" if !exists("w:netrw_explore_bufnr")
" let g:stlmsg="!X<explore_bufnr>"
" elseif w:netrw_explore_bufnr != bufnr(".")
" let g:stlmsg="explore_bufnr!=".bufnr(".")
" endif
" if !exists("w:netrw_explore_line")
" let g:stlmsg=" !X<explore_line>"
" elseif w:netrw_explore_line != line(".")
" let g:stlmsg=" explore_line!={line(.)<".line(".").">"
" endif
" if !exists("w:netrw_explore_list")
" let g:stlmsg=" !X<explore_list>"
" endif
" ^^^ NetrwStatusLine() debugging ^^^
" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr(".")." Xline#".w:netrw_explore_line." line#".line(".")
if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr(".") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
" restore user's status line
let &stl = s:netrw_users_stl
let &laststatus = s:netrw_users_ls
let &stl= s:netrw_users_stl
if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
return ""
@ -3410,12 +3336,6 @@ fun! NetUserPass(...)
" call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
let g:netrw_passwd=a:2
endif
" surround password with double-quotes if it contains embedded blanks
if g:netrw_passwd !~ '^"' && g:netrw_passwd =~ ' '
let g:netrw_passwd= '"'.g:netrw_passwd.'"'
endif
" call Dret("NetUserPass")
endfun
@ -3472,21 +3392,22 @@ fun! s:NetOptionRestore()
endif
unlet w:netoptionsave
if exists("w:aikeep")| let &ai= w:aikeep|endif
if (has("netbeans_intg") || has("sun_workshop")) && exists("w:acdkeep")
let &acd= w:acdkeep
unlet w:acdkeep
let &ai = w:aikeep
if has("netbeans_intg") || has("sun_workshop")
let &acd = w:acdkeep
endif
if exists("w:cinkeep") |let &cin = w:cinkeep |unlet w:cinkeep |endif
if exists("w:cinokeep")|let &cino = w:cinokeep|unlet w:cinokeep|endif
if exists("w:comkeep") |let &com = w:comkeep |unlet w:comkeep |endif
if exists("w:cpokeep") |let &cpo = w:cpokeep |unlet w:cpokeep |endif
if exists("w:dirkeep") |exe "lcd ".w:dirkeep |unlet w:dirkeep |endif
if exists("w:gdkeep") |let &gd = w:gdkeep |unlet w:gdkeep |endif
if exists("w:repkeep") |let &report = w:repkeep |unlet w:repkeep |endif
if exists("w:twkeep") |let &tw = w:twkeep |unlet w:twkeep |endif
let &cin = w:cinkeep
let &cino = w:cinokeep
let &com = w:comkeep
let &cpo = w:cpokeep
if exists("w:dirkeep")
exe "lcd ".w:dirkeep
endif
let &gd = w:gdkeep
let &report = w:repkeep
let &tw = w:twkeep
if exists("w:swfkeep")
if &directory == "" && exists("w:swfkeep")
if &directory == ""
" user hasn't specified a swapfile directory;
" netrw will temporarily make the swapfile
" directory the current local one.
@ -3498,6 +3419,17 @@ fun! s:NetOptionRestore()
endif
unlet w:swfkeep
endif
unlet w:aikeep
unlet w:cinkeep
unlet w:cinokeep
unlet w:comkeep
unlet w:cpokeep
unlet w:gdkeep
unlet w:repkeep
unlet w:twkeep
if exists("w:dirkeep")
unlet w:dirkeep
endif
" call Dret("NetOptionRestore")
endfun
@ -3509,7 +3441,7 @@ endfun
" example and as a fix for a Windows 95 problem: in my
" experience, win95's ftp always dumped four blank lines
" at the end of the transfer.
if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
if has("win95") && g:netrw_win95ftp
fun! NetReadFixup(method, line1, line2)
" call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
if method == 3 " ftp (no <.netrc>)
@ -3610,14 +3542,14 @@ fun! s:SetSort()
return
endif
if seq == '*'
exe 'silent keepjumps '.w:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
exe 'keepjumps silent '.w:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
else
exe 'silent keepjumps '.w:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
exe 'keepjumps silent '.w:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
endif
let priority = priority + 1
endwhile
exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{3}\/\)\%(\d\{3}\/\)\+/\1/e'
exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\(\d\{3}\/\)\%(\d\{3}\/\)\+/\1/e'
" call Dret("SetSort")
endfun
@ -3655,14 +3587,14 @@ fun! s:CopyWinVars()
endfun
" ---------------------------------------------------------------------
" SetBufWinVars: (used by NetBrowse() and LocalBrowse()) {{{1
" BufWinVars: (used by NetBrowse() and LocalBrowse()) {{{1
" To allow separate windows to have their own activities, such as
" Explore **/pattern, several variables have been made window-oriented.
" However, when the user splits a browser window (ex: ctrl-w s), these
" variables are not inherited by the new window. SetBufWinVars() and
" variables are not inherited by the new window. BufWinVars() and
" UseBufWinVars() get around that.
fun! s:SetBufWinVars()
" call Dfunc("SetBufWinVars()")
fun! s:BufWinVars()
" call Dfunc("BufWinVars()")
if exists("w:netrw_longlist") |let b:netrw_longlist = w:netrw_longlist |endif
if exists("w:netrw_bannercnt") |let b:netrw_bannercnt = w:netrw_bannercnt |endif
if exists("w:netrw_method") |let b:netrw_method = w:netrw_method |endif
@ -3673,7 +3605,7 @@ fun! s:SetBufWinVars()
if exists("w:netrw_explore_bufnr") |let b:netrw_explore_bufnr = w:netrw_explore_bufnr |endif
if exists("w:netrw_explore_line") |let b:netrw_explore_line = w:netrw_explore_line |endif
if exists("w:netrw_explore_list") |let b:netrw_explore_list = w:netrw_explore_list |endif
" call Dret("SetBufWinVars")
" call Dret("BufWinVars")
endfun
" ---------------------------------------------------------------------

View File

@ -24,12 +24,21 @@ endif
let s:cpo_save = &cpo
set cpo-=C
CompilerSet makeprg=eruby
if exists("eruby_compiler") && eruby_compiler == "eruby"
CompilerSet makeprg=eruby
else
CompilerSet makeprg=erb
endif
CompilerSet errorformat=eruby:\ %f:%l:%m,
CompilerSet errorformat=
\eruby:\ %f:%l:%m,
\%+E%f:%l:\ parse\ error,
\%W%f:%l:\ warning:\ %m,
\%E%f:%l:in\ %*[^:]:\ %m,
\%E%f:%l:\ %m,
\%-C%\tfrom\ %f:%l:in\ %.%#,
\%-Z%\tfrom\ %f:%l,
\%-Z%p^,
\%C%m,
\%-G%.%#
let &cpo = s:cpo_save

View File

@ -1,4 +1,4 @@
*diff.txt* For Vim version 7.0aa. Last change: 2005 Apr 26
*diff.txt* For Vim version 7.0aa. Last change: 2005 Sep 21
VIM REFERENCE MANUAL by Bram Moolenaar
@ -218,7 +218,7 @@ It is an error if there is no change for the cursor to move to.
==============================================================================
4. Diff copying *copy-diffs* *E99* *E100* *E101* *E102* *E103*
*merge*
There are two commands to copy text from one buffer to another. The result is
that the buffers will be equal within the specified range.
@ -235,6 +235,8 @@ that the buffers will be equal within the specified range.
Modify another buffer to undo difference with the current
buffer. Just like ":diffget" but the other buffer is modified
instead of the current one.
When [bufspec] is omitted and there is more than one other
buffer in diff mode where 'modifiable' is set this fails.
See below for [range].
*do*

View File

@ -1,4 +1,4 @@
*eval.txt* For Vim version 7.0aa. Last change: 2005 Sep 20
*eval.txt* For Vim version 7.0aa. Last change: 2005 Sep 25
VIM REFERENCE MANUAL by Bram Moolenaar
@ -2547,11 +2547,12 @@ getcmdpos() *getcmdpos()*
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
: normal Ex command
> debug mode command |debug-mode|
/ forward search command
? backward search command
@ |input()| command
- |:insert| or |:append| command
Only works when editing the command line, thus requires use of
|c_CTRL-\_e| or |c_CTRL-R_=|. Returns an empty string
otherwise.
@ -2939,8 +2940,8 @@ input({prompt} [, {text} [, {completion}]]) *input()*
: echo "Cheers!"
:endif
<
If the optional {text} is present, this is used for the
default reply, as if the user typed this. Example: >
If the optional {text} is present and not empty, this is used
for the default reply, as if the user typed this. Example: >
:let color = input("Color? ", "white")
< The optional {completion} argument specifies the type of
@ -4049,10 +4050,30 @@ soundfold({word})
the method can be quite slow.
*spellbadword()*
spellbadword() Return the badly spelled word under or after the cursor.
The cursor is moved to the start of the bad word.
When no bad word is found in the cursor line an empty String
is returned and the cursor doesn't move.
spellbadword([{sentence}])
Without argument: The result is the badly spelled word under
or after the cursor. The cursor is moved to the start of the
bad word. When no bad word is found in the cursor line the
result is an empty string and the cursor doesn't move.
With argument: The result is the first word in {sentence} that
is badly spelled. If there are no spelling mistakes the
result is an empty string.
The return value is a list with two items:
- The badly spelled word or an empty string.
- The type of the spelling error:
"bad" spelling mistake
"rare" rare word
"local" word only valid in another region
"caps" word should start with Capital
Example: >
echo spellbadword("the quik brown fox")
< ['quik', 'bad'] ~
The spelling information for the current window is used. The
'spell' option must be set and the value of 'spelllang' is
used.
*spellsuggest()*
spellsuggest({word} [, {max}])

View File

@ -1,4 +1,4 @@
*insert.txt* For Vim version 7.0aa. Last change: 2005 Sep 18
*insert.txt* For Vim version 7.0aa. Last change: 2005 Sep 23
VIM REFERENCE MANUAL by Bram Moolenaar
@ -988,20 +988,35 @@ are included.
(X)HTML *ft-html-omni*
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
including class names for CSS styles.
CTRL-X CTRL-O provides completion of various elements of (X)HTML files.
It is designed to support writing of XHTML 1.0 Strict files but will
also works for other versions of HTML. Features:
When used after "</" CTRL-X CTRL-O will close the last opened tag.
- after "<" complete tag name depending on context (no div suggest
inside of an a tag)
- inside of tag complete proper attributes (no width attribute for an
a tag)
- when attribute has limited number of possible values help to complete
them
- complete values of "class" and "id" attributes with data obtained from
style tag and included CSS files
- when completing "style" attribute or working inside of "style" tag
switch to |ft-css-omni| completion
- when used after "</" CTRL-X CTRL-O will close the last opened tag
File htmlcomplete.vim provides through |autoload| mechanism
GetLastOpenTag function which can be used in XML files to get name of
last open tag with: >
last open tag with (b:unaryTagsStack has to be defined): >
:echo htmlcomplete#GetLastOpenTag("b:unaryTagsStack")
CSS *ft-css-omni*
Complete properties and their appropriate values according to CSS 2.1
specification.
==============================================================================
8. Insert mode commands *inserting*

View File

@ -1,4 +1,4 @@
*map.txt* For Vim version 7.0aa. Last change: 2005 Aug 16
*map.txt* For Vim version 7.0aa. Last change: 2005 Sep 22
VIM REFERENCE MANUAL by Bram Moolenaar
@ -306,11 +306,12 @@ If you type a space, then "foo" will get inserted, plus the space. If you
type "a", then "bar" will get inserted.
{Vi does not allow ambiguous mappings}
*map_CTRL_C*
It's not possible to use a CTRL-C in the {lhs}. You just can't map CTRL-C.
The reason is that CTRL-C must always be available to break a running command.
Exception: When using the GUI version on MS-Windows CTRL-C can be mapped to
allow a Copy command to the clipboard. Use CTRL-Break to interrupt Vim.
*map_CTRL-C*
Using CTRL-C in the {lhs} is possible, but it will only work when Vim is
waiting for a key, not when Vim is busy with something. When Vim is busy
CTRL-C interrupts/breaks the command.
When using the GUI version on MS-Windows CTRL-C can be mapped to allow a Copy
command to the clipboard. Use CTRL-Break to interrupt Vim.
*map_space_in_lhs*
To include a space in {lhs} precede it with a CTRL-V (type two CTRL-Vs for

View File

@ -1,4 +1,4 @@
*message.txt* For Vim version 7.0aa. Last change: 2005 Aug 01
*message.txt* For Vim version 7.0aa. Last change: 2005 Sep 25
VIM REFERENCE MANUAL by Bram Moolenaar
@ -23,7 +23,7 @@ The number of remembered messages is fixed at 20.
*g<*
The "g<" command can be used to see the last page of previous command output.
This is especially useful if you accidentally typed <Space> at the hit-return
This is especially useful if you accidentally typed <Space> at the hit-enter
prompt.
Note: when you stopped the output with "q" at the more prompt only up to that
point will be displayed.
@ -813,4 +813,8 @@ Any other key causes the meaning of the keys to be displayed.
Note: The typed key is directly obtained from the terminal, it is not mapped
and typeahead is ignored.
The |g<| command can be used to see the last page of previous command output.
This is especially useful if you accidentally typed <Space> at the hit-enter
prompt.
vim:tw=78:ts=8:ft=help:norl:

View File

@ -1,4 +1,4 @@
*options.txt* For Vim version 7.0aa. Last change: 2005 Sep 13
*options.txt* For Vim version 7.0aa. Last change: 2005 Sep 25
VIM REFERENCE MANUAL by Bram Moolenaar
@ -3647,9 +3647,11 @@ A jump table for the options with a short description can be found at |Q_op|.
Pattern to be used to find an include command. It is a search
pattern, just like for the "/" command (See |pattern|). The default
value is for C programs. This option is used for the commands "[i",
"]I", "[d", etc. The 'isfname' option is used to recognize the file
name that comes after the matched pattern. See |option-backslash|
about including spaces and backslashes.
"]I", "[d", etc.
Normally the 'isfname' option is used to recognize the file name that
comes after the matched pattern. But if both "\zs" and "\ze" appear
in the pattern then the text spanned by them is used as the file name.
See |option-backslash| about including spaces and backslashes.
*'includeexpr'* *'inex'*
'includeexpr' 'inex' string (default "")
@ -5160,6 +5162,9 @@ A jump table for the options with a short description can be found at |Q_op|.
Minimal number of lines to scroll when the cursor gets off the
screen (e.g., with "j"). Not used for scroll commands (e.g., CTRL-E,
CTRL-D). Useful if your terminal scrolls very slowly.
When set to a negative number from -1 to -100 this is used as the
percentage of the window height. Thus -50 scrolls half the window
height.
NOTE: This option is set to 1 when 'compatible' is set.
*'scrolloff'* *'so'*

View File

@ -1,4 +1,4 @@
*pi_netrw.txt* For Vim version 7.0. Last change: Sep 12, 2005
*pi_netrw.txt* For Vim version 7.0. Last change: Aug 25, 2005
VIM REFERENCE MANUAL by Charles E. Campbell, Jr.
@ -25,7 +25,7 @@
4. Transparent File Transfer............................|netrw-transparent|
5. Ex Commands..........................................|netrw-ex|
6. Variables and Options................................|netrw-var|
7. Directory Browsing...................................|netrw-browse| {{{1
7. Directory Browser....................................|netrw-browse| {{{1
Maps...............................................|netrw-maps|
Exploring..........................................|netrw-explore-cmds|
Quick Reference Commands Table.....................|netrw-browse-cmds|
@ -40,7 +40,7 @@
Making A New Directory.............................|netrw-d|
Deleting Files Or Directories......................|netrw-delete|
Renaming Files Or Directories......................|netrw-move|
Hiding Files Or Directories........................|netrw-a|
Hiding Files Or Directories........................|g:netrw-a|
Edit File Or Directory Hiding List.................|netrw-h|
Browsing With A Horizontally Split Window..........|netrw-o|
Preview Window.....................................|netrw-p|
@ -194,8 +194,8 @@ file using root-relative paths, use the full path:
2. Network-Oriented File Transfer *netrw-xfer*
Network-oriented file transfer under Vim is implemented by a VimL-based script
(<netrw.vim>) using plugin techniques. It currently supports both reading and
writing across networks using rcp, scp, ftp or ftp+<.netrc>, scp, fetch,
(<netrw.vim>) using plugin techniques. It currently supports both reading
and writing across networks using rcp, scp, ftp or ftp+<.netrc>, scp, fetch,
dav/cadaver, rsync, or sftp.
http is currently supported read-only via use of wget or fetch.
@ -206,23 +206,24 @@ FileReadCmd, BufWriteCmd) to intercept reads/writes with url-like filenames. >
ex. vim ftp://hostname/path/to/file
<
The characters preceding the colon specify the protocol to use; in the
example, its ftp. The <netrw.vim> script then formulates a command or a
series of commands (typically ftp) which it issues to an external program
(ftp, scp, etc) which does the actual file transfer/protocol. Files are read
from/written to a temporary file (under Unix/Linux, /tmp/...) which the
<netrw.vim> script will clean up.
The characters preceding the colon specify the protocol to use;
in the example, its ftp. The <netrw.vim> script then formulates
a command or a series of commands (typically ftp) which it issues
to an external program (ftp, scp, etc) which does the actual file
transfer/protocol. Files are read from/written to a temporary file
(under Unix/Linux, /tmp/...) which the <netrw.vim> script will
clean up.
One may modify any protocol's implementing external application by setting a
variable (ex. scp uses the variable g:netrw_scp_cmd, which is defaulted to
"scp -q").
One may modify any protocol's implementing external application
by setting a variable (ex. scp uses the variable g:netrw_scp_cmd,
which is defaulted to "scp -q").
Ftp, an old protocol, seems to be blessed by numerous implementations.
Unfortunately, some implementations are noisy (ie., add junk to the end of the
file). Thus, concerned users may decide to write a NetReadFixup() function
that will clean up after reading with their ftp. Some Unix systems (ie.,
FreeBSD) provide a utility called "fetch" which uses the ftp protocol but is
not noisy and more convenient, actually, for <netrw.vim> to use.
Unfortunately, some implementations are noisy (ie., add junk to the end
of the file). Thus, concerned users may decide to write a NetReadFixup()
function that will clean up after reading with their ftp. Some Unix systems
(ie., FreeBSD) provide a utility called "fetch" which uses the ftp protocol
but is not noisy and more convenient, actually, for <netrw.vim> to use.
Consequently, if "fetch" is executable, it will be used to do reads for
ftp://... (and http://...) . See |netrw-var| for more about this.
@ -331,9 +332,8 @@ The script attempts to get passwords for ftp invisibly using |inputsecret()|,
a built-in Vim function. See |netrw-uidpass| for how to change the password
after one has set it.
Unfortunately there doesn't appear to be a way for netrw to feed a password to
scp. Thus every transfer via scp will require re-entry of the password.
However, |netrw-listhack| can help with this problem.
Unfortunately there doesn't appear to be a way for netrw to feed a password
to scp. Thus every transfer via scp will require re-entry of the password.
==============================================================================
@ -341,28 +341,21 @@ However, |netrw-listhack| can help with this problem.
Network-oriented file transfers are available by default whenever
|'nocompatible'| mode is enabled. The <netrw.vim> file resides in your
system's vim-plugin directory and is sourced automatically whenever you bring
up vim. I suggest that, at a minimum, you have at least the following in your
<.vimrc> customization file: >
set nocp
if version >= 600
filetype plugin indent on
endif
<
system's vim-plugin directory and is sourced automatically whenever you
bring up vim.
==============================================================================
4. Transparent File Transfer *netrw-transparent*
Transparent file transfers occur whenever a regular file read or write
(invoked via an |:autocmd| for |BufReadCmd| or |BufWriteCmd| events) is made.
Thus one may use files across networks just as simply as if they were local. >
Thus one may use files across networks as if they were local. >
vim ftp://[user@]machine/path
...
:wq
See |netrw-activate| for more on how to encourage your vim to use plugins
such as netrw.
==============================================================================
5. Ex Commands *netrw-ex*
@ -376,7 +369,8 @@ additional commands available.
:[range]Nw {netfile} [{netfile}]...
Write the specified lines to the {netfile}.
:Nread Read the specified lines into the current
:Nread
Read the specified lines into the current
buffer from the file specified in
b:netrw_lastfile.
@ -407,8 +401,7 @@ additional commands available.
The script <netrw.vim> uses several variables which can affect <netrw.vim>'s
behavior. These variables typically may be set in the user's <.vimrc> file:
(also see |netrw-settings|) >
>
-------------
Netrw Options
-------------
@ -488,12 +481,12 @@ variables listed below, and may be modified by the user.
-------------------------------------------------------------------------
<
*netrw-ftp*
The first two options both help with certain ftp's that give trouble
otherwise. In order to best understand how to use these options if ftp is
giving you troubles, a bit of discussion follows on how netrw does ftp reads.
The first two options both help with certain ftp's that give trouble otherwise.
In order to best understand how to use these options if ftp is giving you
troubles, a bit of discussion follows on how netrw does ftp reads.
The g:netrw_..._cmd variables specify the external program to use handle the
associated protocol (rcp, ftp, etc), plus any options.
The g:netrw_..._cmd variables specify the external program to use handle
the associated protocol (rcp, ftp, etc), plus any options.
The g:netrw_list_cmd's HOSTNAME entry will be changed via substitution with
whatever the current request is for a hostname.
@ -526,8 +519,8 @@ userid and password. The transferred file is put into a temporary file.
The temporary file is then read into the main editing session window that
requested it and the temporary file deleted.
If your ftp doesn't accept the "user" command and immediately just demands a
userid, then try putting "let netrw_ftp=1" in your <.vimrc>.
If your ftp doesn't accept the "user" command and immediately just demands
a userid, then try putting "let netrw_ftp=1" in your <.vimrc>.
*netrw-cadaver*
To handle the SSL certificate dialog for untrusted servers, one may pull
@ -554,12 +547,12 @@ messages) you may write a NetReadFixup(tmpfile) function:
endif
endfunction
>
The NetReadFixup() function will be called if it exists and thus allows you to
customize your reading process. As a further example, <netrw.vim> contains
just such a function to handle Windows 95 ftp. For whatever reason, Windows
95's ftp dumps four blank lines at the end of a transfer, and so it is
desirable to automate their removal. Here's some code taken from <netrw.vim>
itself:
The NetReadFixup() function will be called if it exists and thus allows
you to customize your reading process. As a further example, <netrw.vim>
contains just such a function to handle Windows 95 ftp. For whatever
reason, Windows 95's ftp dumps four blank lines at the end of a transfer,
and so it is desirable to automate their removal. Here's some code taken
from <netrw.vim> itself:
>
if has("win95") && g:netrw_win95ftp
fun! NetReadFixup(method, line1, line2)
@ -572,7 +565,7 @@ itself:
>
==============================================================================
7. Directory Browsing *netrw-browse* *netrw-dir* *netrw-list* *netrw-help*
7. Directory Browser *netrw-browse* *netrw-dir* *netrw-list* *netrw-help*
MAPS *netrw-maps*
?................Help.......................................|netrw-help|
@ -739,7 +732,7 @@ NETRW BROWSER VARIABLES *netrw-browse-var*
INTRODUCTION TO DIRECTORY BROWSING *netrw-browse-intro*
Netrw supports the browsing of directories on the local system and on remote
hosts, including listing files and directories, entering directories, editing
hosts, including generating listing directories, entering directories, editing
files therein, deleting files/directories, making new directories, and moving
(renaming) files and directories. The Netrw browser generally implements the
previous explorer maps and commands for remote directories, although details
@ -750,15 +743,13 @@ ftp. The protocol in the url, if it is ftp, will cause netrw to use ftp
in its remote browsing. Any other protocol will be used for file transfers,
but otherwise the ssh protocol will be used to do remote directory browsing.
To use Netrw's remote directory browser, simply attempt to read a "file" with a
To enter the netrw directory browser, simply attempt to read a "file" with a
trailing slash and it will be interpreted as a request to list a directory:
vim [protocol]://[user@]hostname/path/
For local directories, the trailing slash is not required.
If you'd like to avoid entering the password in for remote directory listings
with ssh or scp, see |netrw-listhack|.
If you'd like to avoid entering the password in for directory listings, scp,
ssh interaction, etc, see |netrw-listhack|.
*netrw-explore* *netrw-pexplore*
*netrw-hexplore* *netrw-sexplore*
@ -792,8 +783,7 @@ By default, these commands use the current file's directory. However, one
may explicitly provide a directory (path) to use.
(Following needs v7.0 or later) *netrw-starstar*
When Explore, Sexplore, Hexplore, or Vexplore are used with a **,
such as:
When Explore, Sexplore, Hexplore, or Vexplore are used like
>
:Explore **/filename_pattern
<
@ -807,8 +797,7 @@ The directory display is updated to show the subdirectory containing a
matching file. One may then proceed to the next (or previous) matching files'
directories by using Nexplore or Pexplore, respectively. If your console or
gui produces recognizable shift-up or shift-down sequences, then you'll likely
find using shift-downarrow and shift-uparrow convenient. They're mapped by
netrw:
find the following mappings convenient:
<s-down> == Nexplore, and
<s-up> == Pexplore.
@ -833,12 +822,11 @@ refresh a local directory by using ":e .".
GOING UP *netrw--*
To go up a directory, press - or press the <cr> when atop the ../ directory
To go up a directory, press - or his the <cr> when atop the ../ directory
entry in the listing.
Netrw will use the command in |g:netrw_list_cmd| to perform the directory
listing operation after changing HOSTNAME to the host specified by the
user-provided url. By default netrw provides the command as:
Netrw will modify the command in |g:netrw_list_cmd| to perform the directory
listing operation. By default the command is:
ssh HOSTNAME ls -FLa
@ -855,33 +843,13 @@ Hitting the <cr> (the return key) will select the file or directory.
Directories will themselves be listed, and files will be opened using the
protocol given in the original read request.
CAVEAT: There are three forms of listing (see |netrw-i|). Netrw assumes
that two or more spaces delimit filenames and directory names for the long
and wide listing formats. Thus, if your filename or directory name has two
or more spaces embedded in it, or any trailing spaces, then you'll need to
use the "thin" format to select it.
OBTAINING A FILE *netrw-O*
When browsing a remote directory, one may obtain a file under the cursor (ie.
get a copy on your local machine, but not edit it) by pressing the O key.
Only ftp and scp are supported for this operation (but since these two are
available for browsing, that shouldn't be a problem). The status bar
will then show, on its right hand side, a message like "Obtaining filename".
The statusline will be restored after the transfer is complete.
Netrw can also "obtain" a file using the local browser. Netrw's display
of a directory is not necessarily the same as Vim's "current directory",
unless |g:netrw_keepdir| is set to 0 in the user's <.vimrc>. One may select
a file using the local browser (by putting the cursor on it) and pressing
"O" will then "obtain" the file; ie. copy it to Vim's current directory.
Related topics:
* To see what the current directory is, use |:pwd|
* To make the currently browsed directory the current directory, see |netrw-c|
* To automatically make the currently browsed directory the current
directory, see |g:netrw_keepdir|.
available for browsing, that shouldn't be a problem).
THIN, LONG, AND WIDE LISTINGS *netrw-i*
@ -891,27 +859,21 @@ The "i" map cycles between the thin, long, and wide listing formats.
The short listing format gives just the files' and directories' names.
The long listing is either based on the "ls" command via ssh for remote
directories or displays the filename, file size (in bytes), and the time and
date of last modification for local directories. With the long listing
format, netrw is not able to recognize filenames which have trailing spaces.
Use the thin listing format for such files.
directories or displays the filename, file size (in bytes), and the
time and date of last modification for local directories.
The wide listing format has a multi-column display of the various files in the
netrw current directory, rather like the Unix "ls" presents. In this mode the
"b" and "B" maps are not available; instead, use Nb (|netrw-Nb|) and NB
(|netrw-NB|). The wide listing format uses two or more contiguous spaces to
delineate filenames; when using that format, netrw won't be able to recognize
or use filenames which have two or more contiguous spaces embedded in the name
or any trailing spaces. The thin listing format will, however, work with such
files.
The wide listing format has a multi-column display of the various
files in the netrw current directory, rather like the Unix "ls" presents.
In this mode the "b" and "B" maps are not available; instead, use
Nb (|netrw-Nb|) and NB (|netrw-NB|).
MAKING A NEW DIRECTORY *netrw-d*
With the "d" map one may make a new directory either remotely (which depends
on the global variable g:netrw_mkdir_cmd) or locally (which depends on the
global variable g:netrw_local_mkdir). Netrw will issue a request for the new
directory's name. A bare <CR> at that point will abort the making of the
With the "d" map one may make a new directory either remotely (which
depends on the global variable g:netrw_mkdir_cmd) or locally (which depends on
the global variable g:netrw_local_mkdir). Netrw will issue a request for the
new directory's name. A bare <CR> at that point will abort the making of the
directory. Attempts to make a local directory that already exists (as either
a file or a directory) will be detected, reported on, and ignored.
@ -919,12 +881,12 @@ a file or a directory) will be detected, reported on, and ignored.
DELETING FILES OR DIRECTORIES *netrw-delete* *netrw-D*
Deleting/removing files and directories involves moving the cursor to the
file/directory to be deleted and pressing "D". Directories must be empty
first before they can be successfully removed. If the directory is a softlink
to a directory, then netrw will make two requests to remove the directory
before succeeding. Netrw will ask for confirmation before doing the
removal(s). You may select a range of lines with the "V" command (visual
selection), and then pressing "D".
file/directory to be deleted and pressing "D". Directories must be empty first
before they can be successfully removed. If the directory is a softlink to a
directory, then netrw will make two requests to remove the directory before
succeeding. Netrw will ask for confirmation before doing the removal(s).
You may select a range of lines with the "V" command (visual selection),
and then pressing "D".
The g:netrw_rm_cmd, g:netrw_rmf_cmd, and g:netrw_rmdir_cmd variables are used
to control the attempts to remove files and directories. The g:netrw_rm_cmd
@ -959,19 +921,19 @@ One may rename a block of files and directories by selecting them with
the V (|linewise-visual|).
HIDING FILES OR DIRECTORIES *netrw-a*
HIDING FILES OR DIRECTORIES *g:netrw-a*
Netrw's browsing facility allows one to use the hiding list in one of three
ways: ignore it, hide files which match, and show only those files which
match. The "a" map allows the user to cycle about these three ways.
Netrw's browsing facility allows one to use the hiding list in one of
three ways: ignore it, hide files which match, and show only those files
which match. The "a" map allows the user to cycle about these three ways.
The g:netrw_list_hide variable holds a comma delimited list of patterns (ex.
\.obj) which specify the hiding list. (also see |netrw-h|) To set the hiding
list, use the <c-h> map. As an example, to hide files which begin with a ".",
one may use the <c-h> map to set the hiding list to '^\..*' (or one may put
let g:netrw_list_hide= '^\..*' in one's <.vimrc>). One may then use the "a"
key to show all files, hide matching files, or to show only the matching
files.
The g:netrw_list_hide variable holds a comma delimited list of patterns
(ex. \.obj) which specify the hiding list. (also see |netrw-h|) To
set the hiding list, use the <c-h> map. As an example, to hide files
which begin with a ".", one may use the <c-h> map to set the hiding
list to '^\..*' (or one may put let g:netrw_list_hide= '^\..*' in
one's <.vimrc>). One may then use the "a" key to show all files,
hide matching files, or to show only the matching files.
EDIT FILE OR DIRECTORY HIDING LIST *netrw-h* *netrw-edithide*
@ -979,8 +941,7 @@ EDIT FILE OR DIRECTORY HIDING LIST *netrw-h* *netrw-edithide*
The "<ctrl-h>" map brings up a requestor allowing the user to change the
file/directory hiding list. The hiding list consists of one or more patterns
delimited by commas. Files and/or directories satisfying these patterns will
either be hidden (ie. not shown) or be the only ones displayed (see
|netrw-a|).
either be hidden (ie. not shown) or be the only ones displayed (see |netrw-a|).
BROWSING WITH A HORIZONTALLY SPLIT WINDOW *netrw-o* *netrw-horiz*
@ -989,9 +950,9 @@ Normally one enters a file or directory using the <cr>. However, the "o" map
allows one to open a new window to hold the new directory listing or file. A
horizontal split is used. (for vertical splitting, see |netrw-v|)
Normally, the o key splits the window horizontally with the new window and
cursor at the top. To change to splitting the window horizontally with the
new window and cursor at the bottom, have
Normally, the o key splits the window horizontally with the new window
and cursor at the top. To change to splitting the window horizontally
with the new window and cursor at the bottom, have
let g:netrw_alto = 1
@ -1000,30 +961,30 @@ in your <.vimrc>.
PREVIEW WINDOW *netrw-p* *netrw-preview*
One may use a preview window (currently only for local browsing) by using the
"p" key when the cursor is atop the desired filename to be previewed.
One may use a preview window (currently only for local browsing) by using
the "p" key when the cursor is atop the desired filename to be previewed.
SELECTING SORTING STYLE *netrw-s* *netrw-sort*
One may select the sorting style by name, time, or (file) size. The "s" map
allows one to circulate amongst the three choices; the directory listing will
automatically be refreshed to reflect the selected style.
One may select the sorting style by name, time, or (file) size. The
"s" map allows one to circulate amongst the three choices; the directory
listing will automatically be refreshed to reflect the selected style.
EDITING THE SORTING SEQUENCE *netrw-S* *netrw-sortsequence*
When "Sorted by" is name, one may specify priority via the sorting sequence
(g:netrw_sort_sequence). The sorting sequence typically prioritizes the
name-listing by suffix, although any pattern will do. Patterns are delimited
by commas. The default sorting sequence is:
When "Sorted by" is name, one may specify priority via the sorting
sequence (g:netrw_sort_sequence). The sorting sequence typically
prioritizes the name-listing by suffix, although any pattern will do.
Patterns are delimited by commas. The default sorting sequence is:
>
[\/]$,*,\.bak$,\.o$,\.h$,\.info$,\.swp$,\.obj$
<
The lone * is where all filenames not covered by one of the other patterns
will end up. One may change the sorting sequence by modifying the
g:netrw_sort_sequence variable (either manually or in your <.vimrc>) or by
using the "S" map.
The lone * is where all filenames not covered by one of the other
patterns will end up. One may change the sorting sequence by modifying
the g:netrw_sort_sequence variable (either manually or in your <.vimrc>)
or by using the "S" map.
REVERSING SORTING ORDER *netrw-r* *netrw-reverse*
@ -1050,13 +1011,13 @@ q map to list both the bookmarks and history. (see |netrw-q|)
BROWSING WITH A VERTICALLY SPLIT WINDOW *netrw-v*
Normally one enters a file or directory using the <cr>. However, the "v" map
allows one to open a new window to hold the new directory listing or file. A
vertical split is used. (for horizontal splitting, see |netrw-o|)
Normally one enters a file or directory using the <cr>. However, the "v"
map allows one to open a new window to hold the new directory listing or
file. A vertical split is used. (for horizontal splitting, see |netrw-o|)
Normally, the v key splits the window vertically with the new window and
cursor at the left. To change to splitting the window vertically with the new
window and cursor at the right, have
Normally, the v key splits the window vertically with the new window
and cursor at the left. To change to splitting the window vertically
with the new window and cursor at the right, have
let g:netrw_altv = 1
@ -1075,9 +1036,9 @@ handler varies:
* otherwise the NetrwFileHandler plugin is used.
The file's suffix is used by these various approaches to determine an
appropriate application to use to "handle" these files. Such things as
OpenOffice (*.sfx), visualization (*.jpg, *.gif, etc), and PostScript (*.ps,
*.eps) can be handled.
appropriate application to use to "handle" these files. Such things
as OpenOffice (*.sfx), visualization (*.jpg, *.gif, etc), and PostScript
(*.ps, *.eps) can be handled.
The NetrwFileHandler applies a user-defined function to a file, based on its
extension. Of course, the handler function must exist for it to be called!
@ -1102,8 +1063,8 @@ g:netrw_keepdir to 0 (say, in your <.vimrc>) will tell netrw to have the
currently browsed directory be the current directory.
With the default setting for g:netrw_keepdir, in order to make the two
directories the same, use the "c" map (just type c). That map will set the
current directory to the current browsing directory.
directories the same, use the "c" map (just type c). That map will set
the current directory to the current browsing directory.
BOOKMARKING A DIRECTORY *netrw-b* *netrw-bookmark* *netrw-bookmarks*
@ -1126,8 +1087,8 @@ To change directory back to a bookmarked directory, use
{cnt}B
Any count may be used to reference any of the bookmarks. See |netrw-b| on
how to bookmark a directory and |netrw-q| on how to list bookmarks.
Any count may be used to reference any of the bookmarks. See |netrw-b|
for how to bookmark a directory and |netrw-q| for how to list them.
When wide listing is in use (see |netrw-i|), then the B map is not available;
instead, use {cnt}NB.
@ -1157,9 +1118,9 @@ NETRW SETTINGS *netrw-settings*
With the NetrwSettings.vim plugin, >
:NetrwSettings
will bring up a window with the many variables that netrw uses for its
settings. You may change any of their values; when you save the file, the
settings therein will be used. One may also press "?" on any of the lines for
help on what each of the variables do.
settings. You may change any of their values; when you save the file,
the settings therein will be used. One may also press "?" on any of
the lines for help on what each of the variables do.
==============================================================================
@ -1279,14 +1240,6 @@ which is loaded automatically at startup (assuming :set nocp).
==============================================================================
10. History *netrw-history*
v70: * when using |netrw-O|, the "Obtaining filename" message is now
shown using |hl-User9|. If User9 has not been defined, netrw
will define it.
v69: * Bugfix: win95/98 machines were experiencing a
"E121: Undefined variable: g:netrw_win95ftp" message
v68: * double-click-leftmouse selects word under mouse
v67: * Passwords which contain blanks will now be surrounded by
double-quotes automatically (Yongwei)
v66: * Netrw now seems to work with a few more Windows situations
* O now obtains a file: remote browsing file -> local copy,
locally browsing file -> current directory (see :pwd)
@ -1443,7 +1396,7 @@ which is loaded automatically at startup (assuming :set nocp).
Vim editor by Bram Moolenaar (Thanks, Bram!)
dav support by C Campbell
fetch support by Bram Moolenaar and C Campbell
ftp support by C Campbell <NdrOchip@ScampbellPfamily.AbizM>
ftp support by C Campbell <NdrOchip@ScampbellPfamily.AbizM> - NOSPAM
http support by Bram Moolenaar <bram@moolenaar.net>
rcp
rsync support by C Campbell (suggested by Erik Warendorph)
@ -1453,13 +1406,11 @@ which is loaded automatically at startup (assuming :set nocp).
inputsecret(), BufReadCmd, BufWriteCmd contributed by C Campbell
Jérôme Augé -- also using new buffer method with ftp+.netrc
Bram Moolenaar -- obviously vim itself, :e and v:cmdarg use,
fetch,...
Bram Moolenaar -- obviously vim itself, :e and v:cmdarg use, fetch,...
Yasuhiro Matsumoto -- pointing out undo+0r problem and a solution
Erik Warendorph -- for several suggestions (g:netrw_..._cmd
variables, rsync etc)
Doug Claar -- modifications to test for success with ftp
operation
Doug Claar -- modifications to test for success with ftp operation
==============================================================================
vim:tw=78:ts=8:ft=help:norl:fdm=marker

View File

@ -1,4 +1,4 @@
*spell.txt* For Vim version 7.0aa. Last change: 2005 Sep 12
*spell.txt* For Vim version 7.0aa. Last change: 2005 Sep 25
VIM REFERENCE MANUAL by Bram Moolenaar
@ -1124,6 +1124,10 @@ Don't include simple one-character replacements or swaps. Vim will try these
anyway. You can include whole words if you want to, but you might want to use
the "file:" item in 'spellsuggest' instead.
You can include a space by using an underscore:
REP the_the the ~
SIMILAR CHARACTERS *spell-MAP*

View File

@ -4973,6 +4973,7 @@ ft-chill-syntax syntax.txt /*ft-chill-syntax*
ft-cobol-syntax syntax.txt /*ft-cobol-syntax*
ft-coldfusion-syntax syntax.txt /*ft-coldfusion-syntax*
ft-csh-syntax syntax.txt /*ft-csh-syntax*
ft-css-omni insert.txt /*ft-css-omni*
ft-cweb-syntax syntax.txt /*ft-cweb-syntax*
ft-cynlib-syntax syntax.txt /*ft-cynlib-syntax*
ft-desktop-syntax syntax.txt /*ft-desktop-syntax*
@ -5082,6 +5083,7 @@ g'a motion.txt /*g'a*
g, motion.txt /*g,*
g0 motion.txt /*g0*
g8 various.txt /*g8*
g:netrw-a pi_netrw.txt /*g:netrw-a*
g:netrw_alto pi_netrw.txt /*g:netrw_alto*
g:netrw_altv pi_netrw.txt /*g:netrw_altv*
g:netrw_cygwin pi_netrw.txt /*g:netrw_cygwin*
@ -5705,7 +5707,7 @@ map-self-destroy tips.txt /*map-self-destroy*
map-typing map.txt /*map-typing*
map-which-keys map.txt /*map-which-keys*
map.txt map.txt /*map.txt*
map_CTRL_C map.txt /*map_CTRL_C*
map_CTRL-C map.txt /*map_CTRL-C*
map_backslash map.txt /*map_backslash*
map_bar map.txt /*map_bar*
map_empty_rhs map.txt /*map_empty_rhs*
@ -5747,6 +5749,7 @@ menu-priority gui.txt /*menu-priority*
menu-separator gui.txt /*menu-separator*
menu.vim gui.txt /*menu.vim*
menus gui.txt /*menus*
merge diff.txt /*merge*
message-history message.txt /*message-history*
message.txt message.txt /*message.txt*
messages message.txt /*messages*
@ -5853,7 +5856,6 @@ netrw-O pi_netrw.txt /*netrw-O*
netrw-R pi_netrw.txt /*netrw-R*
netrw-S pi_netrw.txt /*netrw-S*
netrw-U pi_netrw.txt /*netrw-U*
netrw-a pi_netrw.txt /*netrw-a*
netrw-activate pi_netrw.txt /*netrw-activate*
netrw-b pi_netrw.txt /*netrw-b*
netrw-bookmark pi_netrw.txt /*netrw-bookmark*
@ -7322,13 +7324,6 @@ 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,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2005 Sep 19
" Last Change: 2005 Sep 25
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
@ -16,7 +16,7 @@ set cpo&vim
augroup filetypedetect
" Ignored extensions
au BufNewFile,BufRead *.orig,*.bak,*.old,*.new,*.rpmsave,*.rpmnew
au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.rpmsave,?\+.rpmnew
\ exe "doau filetypedetect BufRead " . expand("<afile>:r")
au BufNewFile,BufRead *~
\ let s:name = expand("<afile>") |
@ -26,7 +26,7 @@ au BufNewFile,BufRead *~
\ endif |
\ unlet s:name |
\ unlet s:short
au BufNewFile,BufRead *.in
au BufNewFile,BufRead ?\+.in
\ if expand("<afile>:t") != "configure.in" |
\ exe "doau filetypedetect BufRead " . expand("<afile>:r") |
\ endif

20
runtime/indent/eruby.vim Normal file
View File

@ -0,0 +1,20 @@
" Vim indent file
" Language: Ruby
" Maintainer: Doug Kearns <djkea2 at gus.gscit.monash.edu.au>
" Info: $Id$
" URL: http://vim-ruby.rubyforge.org/
" Anon CVS: See above site
" Licence: GPL (http://www.gnu.org)
" Disclaimer:
" This program is distributed in the hope that it will be useful,
" but WITHOUT ANY WARRANTY; without even the implied warranty of
" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
" GNU General Public License for more details.
" ----------------------------------------------------------------------------
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
finish
endif
runtime! indent/html.vim

View File

@ -2,19 +2,17 @@
" Language: PHP
" Author: John Wellesz <John.wellesz (AT) teaser (DOT) fr>
" URL: http://www.2072productions.com/vim/indent/php.vim
" Last Change: 2005 Aug 15
" Version: 1.17
" Last Change: 2005 September 22th
" Version: 1.181
"
" For a complete change log and lots of comments in the code, download the script on
" The change log and all the comments have been removed from this file.
"
" For a complete change log and fully commented code, download the script on
" 2072productions.com at the URI provided above.
"
"
"
" If you find a bug, please e-mail me at John.wellesz (AT) teaser (DOT) fr
" with an example of code that break the algorithm.
"
"
" Thanks a lot for using this script.
" with an example of code that breaks the algorithm.
"
"
" NOTE: This script must be used with PHP syntax ON and with the php syntax
@ -25,7 +23,6 @@
" tags not at col 1 you'll have to indent your file 2 times (This script
" will automatically put HereDoc end tags at col 1).
"
"
" NOTE: If you are editing file in Unix file format and that (by accident)
" there are '\r' before new lines, this script won't be able to proceed
" correctly and will make many mistakes because it won't be able to match
@ -69,11 +66,6 @@ if exists("b:did_indent")
endif
let b:did_indent = 1
" This script set the option php_sync_method of PHP syntax script to 0
" (fromstart indenting method) in order to have an accurate syntax.
" If you are using very big PHP files (which is a bad idea) you will
" experience slowings down while editing, if your code contains only PHP
" code you can comment the line below.
let php_sync_method = 0
@ -108,17 +100,14 @@ let b:optionsset = 0
setlocal nosmartindent
setlocal noautoindent
setlocal nocindent
setlocal nolisp " autoindent must be on, so this line is also useless...
setlocal nolisp
setlocal indentexpr=GetPhpIndent()
setlocal indentkeys=0{,0},0),:,!^F,o,O,e,*<Return>,=?>,=<?,=*/
if version <= 603 && &encoding == 'utf-8'
let s:searchpairflags = 'bW'
else
let s:searchpairflags = 'bWr'
endif
let s:searchpairflags = 'bWr'
if &fileformat == "unix" && exists("PHP_removeCRwhenUnix") && PHP_removeCRwhenUnix
silent! %s/\r$//g
@ -134,7 +123,6 @@ let s:PHP_startindenttag = '<?\%(.*?>\)\@!\|<script[^>]*>\%(.*<\/script>\)\@!'
function! GetLastRealCodeLNum(startline) " {{{
"Inspired from the function SkipJavaBlanksAndComments by Toby Allsopp for indent/java.vim
let lnum = a:startline
let old_lnum = lnum
@ -146,41 +134,43 @@ function! GetLastRealCodeLNum(startline) " {{{
let lnum = lnum - 1
elseif lastline =~ '^\s*?>.*<?\%(php\)\=\s*$'
let lnum = lnum - 1
elseif lastline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)' " if line is under comment
elseif lastline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)'
let lnum = lnum - 1
elseif lastline =~ '\*/\s*$' " skip multiline comments
elseif lastline =~ '\*/\s*$'
call cursor(lnum, 1)
call search('\*/\zs', 'W') " positition the cursor after the first */
let lnum = searchpair('/\*', '', '\*/\zs', s:searchpairflags) " find the most outside /*
if lastline !~ '^\*/'
call search('\*/', 'W')
endif
let lnum = searchpair('/\*', '', '\*/', s:searchpairflags)
let lastline = getline(lnum)
if lastline =~ '^\s*/\*' " if line contains nothing but comment
let lnum = lnum - 1 " do the job again on the line before (a comment can hide another...)
if lastline =~ '^\s*/\*'
let lnum = lnum - 1
else
break
endif
elseif lastline =~? '\%(//\s*\|?>.*\)\@<!<?\%(php\)\=\s*$\|^\s*<script\>' " skip non php code
elseif lastline =~? '\%(//\s*\|?>.*\)\@<!<?\%(php\)\=\s*$\|^\s*<script\>'
while lastline !~ '\(<?.*\)\@<!?>' && lnum > 1
let lnum = lnum - 1
let lastline = getline(lnum)
endwhile
if lastline =~ '^\s*?>' " if line contains nothing but end tag
if lastline =~ '^\s*?>'
let lnum = lnum - 1
else
break " else there is something important before the ?>
break
endif
elseif lastline =~? '^\a\w*;$' && lastline !~? s:notPhpHereDoc " match the end of a heredoc
elseif lastline =~? '^\a\w*;$' && lastline !~? s:notPhpHereDoc
let tofind=substitute( lastline, '\([^;]\+\);', '<<<\1$', '')
while getline(lnum) !~? tofind && lnum > 1
let lnum = lnum - 1
endwhile
else
break " if none of these were true then we are done
break
endif
endwhile
@ -192,8 +182,7 @@ function! GetLastRealCodeLNum(startline) " {{{
let b:InPHPcode_and_script = 0
endif
return lnum
endfunction
" }}}
endfunction " }}}
function! Skippmatch() " {{{
let synname = synIDattr(synID(line("."), col("."), 0), "name")
@ -202,21 +191,17 @@ function! Skippmatch() " {{{
else
return 1
endif
endfun
" }}}
endfun " }}}
function! FindOpenBracket(lnum) " {{{
call cursor(a:lnum, 1) " set the cursor to the start of the lnum line
call cursor(a:lnum, 1)
return searchpair('{', '', '}', 'bW', 'Skippmatch()')
endfun
" }}}
endfun " }}}
function! FindTheIfOfAnElse (lnum, StopAfterFirstPrevElse) " {{{
" A very clever recoursive function created by me (John Wellesz) that find the "if" corresponding to an
" "else". This function can easily be adapted for other languages :)
if getline(a:lnum) =~# '^\s*}\s*else\%(if\)\=\>'
let beforeelse = a:lnum " we do this so we can find the opened bracket to speed up the process
let beforeelse = a:lnum
else
let beforeelse = GetLastRealCodeLNum(a:lnum - 1)
endif
@ -254,35 +239,32 @@ function! FindTheIfOfAnElse (lnum, StopAfterFirstPrevElse) " {{{
return beforeelse
endfunction
" }}}
endfunction " }}}
function! IslinePHP (lnum, tofind) " {{{
let cline = getline(a:lnum)
if a:tofind==""
let tofind = "^\\s*[\"']*\s*\\zs\\S" " This correct the issue where lines beginning by a
" single or double quote were not indented in some cases.
let tofind = "^\\s*[\"']*\s*\\zs\\S"
else
let tofind = a:tofind
endif
let tofind = tofind . '\c' " ignorecase
let tofind = tofind . '\c'
let coltotest = match (cline, tofind) + 1 "find the first non blank char in the current line
let coltotest = match (cline, tofind) + 1
let synname = synIDattr(synID(a:lnum, coltotest, 0), "name") " ask to syntax what is its name
let synname = synIDattr(synID(a:lnum, coltotest, 0), "name")
if synname =~ '^php' || synname=="Delimiter" || synname =~? '^javaScript'
return synname
else
return ""
endif
endfunction
" }}}
endfunction " }}}
let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\);'
let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|while\>\|switch\>\|for\%(each\)\=\>\|declare\>\|[|&]\)'
let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|else\>\|while\>\|switch\>\|for\%(each\)\=\>\|declare\>\|class\>\|[|&]\)'
let s:autorestoptions = 0
if ! s:autorestoptions
@ -298,9 +280,6 @@ function! ResetOptions()
endfunc
function! GetPhpIndent()
"##############################################
"########### MAIN INDENT FUNCTION #############
"##############################################
let UserIsEditing=0
if b:PHP_oldchangetick != b:changedtick
@ -312,7 +291,7 @@ function! GetPhpIndent()
let b:PHP_default_indenting = g:PHP_default_indenting * &sw
endif
let cline = getline(v:lnum) " current line
let cline = getline(v:lnum)
if !b:PHP_indentinghuge && b:PHP_lastindented > b:PHP_indentbeforelast
if b:PHP_indentbeforelast
@ -338,7 +317,7 @@ function! GetPhpIndent()
let b:InPHPcode_and_script = 0
let b:InPHPcode_tofind = ""
elseif v:lnum > b:PHP_lastindented " we are indenting line in > order (we can rely on the line before)
elseif v:lnum > b:PHP_lastindented
let real_PHP_lastindented = b:PHP_lastindented
let b:PHP_lastindented = v:lnum
endif
@ -347,7 +326,7 @@ function! GetPhpIndent()
if !b:InPHPcode_checked " {{{ One time check
let b:InPHPcode_checked = 1
let synname = IslinePHP (prevnonblank(v:lnum), "") " the line could be blank (if the user presses 'return')
let synname = IslinePHP (prevnonblank(v:lnum), "")
if synname!=""
if synname != "phpHereDoc"
@ -375,15 +354,15 @@ function! GetPhpIndent()
let b:InPHPcode_tofind = substitute( getline(lnum), '^.*<<<\(\a\w*\)\c', '^\\s*\1;$', '')
endif
else " IslinePHP returned "" => we are not in PHP or Javascript
else
let b:InPHPcode = 0
let b:UserIsTypingComment = 0
" Then we have to find a php start tag...
let b:InPHPcode_tofind = '<?\%(.*?>\)\@!\|<script.*>'
endif
endif "!b:InPHPcode_checked }}}
" Test if we are indenting PHP code {{{
let lnum = prevnonblank(v:lnum - 1)
let last_line = getline(lnum)
@ -392,14 +371,16 @@ function! GetPhpIndent()
let b:InPHPcode = 1
let b:InPHPcode_tofind = ""
let b:UserIsTypingComment = 0
if cline =~ '\*/' " End comment tags must be indented like start comment tags
if cline =~ '\*/'
call cursor(v:lnum, 1)
call search('\*/\zs', 'W')
let lnum = searchpair('/\*', '', '\*/\zs', s:searchpairflags) " find the most outside /*
if cline !~ '^\*/'
call search('\*/', 'W')
endif
let lnum = searchpair('/\*', '', '\*/', s:searchpairflags)
let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
let b:PHP_LastIndentedWasComment = 0 " prevent a problem if multiline /**/ comment are surounded by
" other types of comments
let b:PHP_LastIndentedWasComment = 0
if cline =~ '^\s*\*/'
return indent(lnum) + 1
@ -407,13 +388,12 @@ function! GetPhpIndent()
return indent(lnum)
endif
elseif cline =~? '<script\>' " a more accurate test is useless since there isn't any other possibility
elseif cline =~? '<script\>'
let b:InPHPcode_and_script = 1
endif
endif
endif
if b:InPHPcode
if !b:InPHPcode_and_script && last_line =~ '\%(<?.*\)\@<!?>\%(.*<?\)\@!' && IslinePHP(lnum, '?>')=="Delimiter"
@ -428,7 +408,7 @@ function! GetPhpIndent()
let b:InPHPcode = 0
let b:InPHPcode_tofind = substitute( last_line, '^.*<<<\(\a\w*\)\c', '^\\s*\1;$', '')
elseif !UserIsEditing && cline =~ '^\s*/\*\%(.*\*/\)\@!' && getline(v:lnum + 1) !~ '^\s*\*' " XXX indent comments
elseif !UserIsEditing && cline =~ '^\s*/\*\%(.*\*/\)\@!' && getline(v:lnum + 1) !~ '^\s*\*'
let b:InPHPcode = 0
let b:InPHPcode_tofind = '\*/'
@ -446,20 +426,18 @@ function! GetPhpIndent()
" Indent successive // or # comment the same way the first is {{{
if cline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)'
if b:PHP_LastIndentedWasComment == 1
return indent(real_PHP_lastindented) " line replaced in 1.02
return indent(real_PHP_lastindented)
endif
let b:PHP_LastIndentedWasComment = 1
else
let b:PHP_LastIndentedWasComment = 0
endif
" }}}
endif " }}}
" Indent multiline /* comments correctly {{{
if b:PHP_InsideMultilineComment || b:UserIsTypingComment
if cline =~ '^\s*\*\%(\/\)\@!' " if cline == '*'
if last_line =~ '^\s*/\*' " if last_line == '/*'
if cline =~ '^\s*\*\%(\/\)\@!'
if last_line =~ '^\s*/\*'
return indent(lnum) + 1
else
return indent(lnum)
@ -469,13 +447,14 @@ function! GetPhpIndent()
endif
endif
if !b:PHP_InsideMultilineComment && cline =~ '^\s*/\*' " if cline == '/*'
if !b:PHP_InsideMultilineComment && cline =~ '^\s*/\*'
let b:PHP_InsideMultilineComment = 1
return -1
endif
" }}}
endif " }}}
if cline =~# '^\s*<?' && cline !~ '?>' " Added the ^\s* part in version 1.03
" Things always indented at col 1 (PHP delimiter: <?, ?>, Heredoc end) {{{
if cline =~# '^\s*<?' && cline !~ '?>'
return 0
endif
@ -485,14 +464,13 @@ function! GetPhpIndent()
if cline =~? '^\s*\a\w*;$' && cline !~? s:notPhpHereDoc
return 0
endif
" }}}
endif " }}}
let s:level = 0
let lnum = GetLastRealCodeLNum(v:lnum - 1)
let last_line = getline(lnum) " last line
let ind = indent(lnum) " by default
let last_line = getline(lnum)
let ind = indent(lnum)
let endline= s:endline
if ind==0 && b:PHP_default_indenting
@ -510,10 +488,12 @@ function! GetPhpIndent()
return ind
endif
if cline =~ '^\s*\*/' " End comment tags must be indented like start comment tags
if cline =~ '^\s*\*/'
call cursor(v:lnum, 1)
call search('\*/\zs', 'W')
let lnum = searchpair('/\*', '', '\*/\zs', s:searchpairflags) " find the most outside /*
if cline !~ '^\*/'
call search('\*/', 'W')
endif
let lnum = searchpair('/\*', '', '\*/', s:searchpairflags)
let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
@ -527,33 +507,52 @@ function! GetPhpIndent()
let defaultORcase = '^\s*\%(default\|case\).*:'
if last_line =~ '[;}]'.endline && last_line !~# defaultORcase
if ind==b:PHP_default_indenting " if no indentation for the previous line
if ind==b:PHP_default_indenting
return b:PHP_default_indenting
elseif b:PHP_indentinghuge && ind==b:PHP_CurrentIndentLevel && cline !~# '^\s*\%(else\|\%(case\|default\).*:\|[})];\=\)' && last_line !~# '^\s*\%(\%(}\s*\)\=else\)' && getline(GetLastRealCodeLNum(lnum - 1))=~';'.endline
return b:PHP_CurrentIndentLevel
endif
endif
let LastLineClosed = 0 " used to prevent redundant tests in the last part of the script
let LastLineClosed = 0
let terminated = '\%(;\%(\s*?>\)\=\|<<<\a\w*\|}\)'.endline
let unstated = '\%(^\s*'.s:blockstart.'.*)\|\%(//.*\)\@<!\<e'.'lse\>\)'.endline
if ind != b:PHP_default_indenting && cline =~# '^\s*else\%(if\)\=\>'
let b:PHP_CurrentIndentLevel = b:PHP_default_indenting " prevent optimized to work at next call
let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
return indent(FindTheIfOfAnElse(v:lnum, 1))
elseif cline =~ '^\s*{'
let previous_line = last_line
let last_line_num = lnum
while last_line_num > 1
if previous_line =~ '^\s*\%(' . s:blockstart . '\|\%([a-zA-Z]\s*\)*function\)' && previous_line !~ '^\s*[|&]'
let ind = indent(last_line_num)
if b:PHP_BracesAtCodeLevel
let ind = ind + &sw
endif
return ind
endif
let last_line_num = last_line_num - 1
let previous_line = getline(last_line_num)
endwhile
elseif last_line =~# unstated && cline !~ '^\s*{\|^\s*);\='.endline
let ind = ind + &sw
return ind
elseif ind != b:PHP_default_indenting && last_line =~ terminated
let previous_line = last_line
let last_line_num = lnum
let LastLineClosed = 1
while 1
if previous_line =~ '^\s*}'
let last_line_num = FindOpenBracket(last_line_num)
@ -566,13 +565,14 @@ function! GetPhpIndent()
continue
else
if getline(last_line_num) =~# '^\s*else\%(if\)\=\>'
let last_line_num = FindTheIfOfAnElse(last_line_num, 0)
continue " re-run the loop (we could find a '}' again)
continue
endif
let last_match = last_line_num " remember the 'topest' line we found so far
let last_match = last_line_num
let one_ahead_indent = indent(last_line_num)
let last_line_num = GetLastRealCodeLNum(last_line_num - 1)
@ -597,10 +597,9 @@ function! GetPhpIndent()
endif
endwhile
if indent(last_match) != ind " if nothing was done lets the old script continue
let ind = indent(last_match) " let's use the indent of the last line matched by the alhorithm above
let b:PHP_CurrentIndentLevel = b:PHP_default_indenting " line added in version 1.02 to prevent optimized mode
" from acting in some special cases
if indent(last_match) != ind
let ind = indent(last_match)
let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
if cline =~# defaultORcase
let ind = ind - &sw
@ -610,7 +609,7 @@ function! GetPhpIndent()
endif
let plinnum = GetLastRealCodeLNum(lnum - 1)
let pline = getline(plinnum) " previous to last line
let pline = getline(plinnum)
let last_line = substitute(last_line,"\\(//\\|#\\)\\(\\(\\([^\"']*\\([\"']\\)[^\"']*\\5\\)\\+[^\"']*$\\)\\|\\([^\"']*$\\)\\)",'','')
@ -621,15 +620,15 @@ function! GetPhpIndent()
endif
endif
if !LastLineClosed " the last line isn't a .*; or a }$ line
if !LastLineClosed
if last_line =~# '[{(]'.endline || last_line =~? '\h\w*\s*(.*,$' && pline !~ '[,(]'.endline
if !b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{' " XXX mod {
if !b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{'
let ind = ind + &sw
endif
if b:PHP_BracesAtCodeLevel || cline !~# defaultORcase " XXX mod (2) {
" case and default are not indented inside blocks
if b:PHP_BracesAtCodeLevel || cline !~# defaultORcase
let b:PHP_CurrentIndentLevel = ind
return ind
endif
@ -642,14 +641,12 @@ function! GetPhpIndent()
let ind = indent(openedparent)
endif
elseif cline !~ '^\s*{' && pline =~ '\%(;\%(\s*?>\)\=\|<<<\a\w*\|{\|^\s*'.s:blockstart.'\s*(.*)\)'.endline.'\|^\s*}\|'.defaultORcase
let ind = ind + &sw
endif
if b:PHP_BracesAtCodeLevel && cline =~# '^\s*{' " XXX mod {
let ind = ind + &sw
endif
elseif last_line =~# defaultORcase
let ind = ind + &sw
@ -666,5 +663,4 @@ function! GetPhpIndent()
return ind
endfunction
" vim: set ts=4 sw=4:
" vim: set ff=unix:
" vim: set ts=8 sw=4 sts=4:

View File

@ -82,7 +82,7 @@ let s:end_start_regex = '^\s*\zs\<\%(module\|class\|def\|if\|for' .
let s:end_middle_regex = '\<\%(ensure\|else\|\%(\%(^\|;\)\s*\)\@<=\<rescue\>\|when\|elsif\)\>'
" Regex that defines the end-match for the 'end' keyword.
let s:end_end_regex = '\%(^\|[^.]\)\@<=\<end\>'
let s:end_end_regex = '\%(^\|[^.:]\)\@<=\<end\>'
" Expression used for searchpair() call for finding match for 'end' keyword.
let s:end_skip_expr = s:skip_expr .
@ -244,17 +244,12 @@ function GetRubyIndent()
" If we have a deindenting keyword, find its match and indent to its level.
" TODO: this is messy
if s:Match(v:lnum, s:ruby_deindent_keywords)
" let lnum = s:PrevNonBlankNonString(v:lnum - 1)
"
" if lnum == 0
" return 0
" endif
"
" return indent(v:lnum) - &sw
call cursor(v:lnum, 1)
if searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW',
\ s:end_skip_expr) > 0
if strpart(getline('.'), 0, col('.') - 1) =~ '=\s*'
let line = getline('.')
if strpart(line, 0, col('.') - 1) =~ '=\s*$' &&
\ strpart(line, col('.') - 1, 2) !~ 'do'
let ind = virtcol('.') - 1
else
let ind = indent('.')
@ -380,5 +375,3 @@ endfunction
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: nowrap sw=2 sts=2 ts=8 ff=unix:

215
runtime/indent/sml.vim Normal file
View File

@ -0,0 +1,215 @@
" Vim indent file
" Language: SML
" Maintainer: Saikat Guha <sg266@cornell.edu>
" Hubert Chao <hc85@cornell.edu>
" Original OCaml Version:
" Jean-Francois Yuen <jfyuen@ifrance.com>
" Mike Leary <leary@nwlink.com>
" Markus Mottl <markus@oefai.at>
" OCaml URL: http://www.oefai.at/~markus/vim/indent/ocaml.vim
" Last Change: 2003 Jan 04 - Adapted to SML
" 2002 Nov 06 - Some fixes (JY)
" 2002 Oct 28 - Fixed bug with indentation of ']' (MM)
" 2002 Oct 22 - Major rewrite (JY)
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
setlocal expandtab
setlocal indentexpr=GetSMLIndent()
setlocal indentkeys+=0=and,0=else,0=end,0=handle,0=if,0=in,0=let,0=then,0=val,0=fun,0=\|,0=*),0)
setlocal nolisp
setlocal nosmartindent
setlocal textwidth=80
setlocal shiftwidth=2
" Comment formatting
if (has("comments"))
set comments=sr:(*,mb:*,ex:*)
set fo=cqort
endif
" Only define the function once.
"if exists("*GetSMLIndent")
"finish
"endif
" Define some patterns:
let s:beflet = '^\s*\(initializer\|method\|try\)\|\(\<\(begin\|do\|else\|in\|then\|try\)\|->\|;\)\s*$'
let s:letpat = '^\s*\(let\|type\|module\|class\|open\|exception\|val\|include\|external\)\>'
let s:letlim = '\(\<\(sig\|struct\)\|;;\)\s*$'
let s:lim = '^\s*\(exception\|external\|include\|let\|module\|open\|type\|val\)\>'
let s:module = '\<\%(let\|sig\|struct\)\>'
let s:obj = '^\s*\(constraint\|inherit\|initializer\|method\|val\)\>\|\<\(object\|object\s*(.*)\)\s*$'
let s:type = '^\s*\%(let\|type\)\>.*='
let s:val = '^\s*\(val\|external\)\>.*:'
" Skipping pattern, for comments
function! s:SkipPattern(lnum, pat)
let def = prevnonblank(a:lnum - 1)
while def > 0 && getline(def) =~ a:pat
let def = prevnonblank(def - 1)
endwhile
return def
endfunction
" Indent for ';;' to match multiple 'let'
function! s:GetInd(lnum, pat, lim)
let llet = search(a:pat, 'bW')
let old = indent(a:lnum)
while llet > 0
let old = indent(llet)
let nb = s:SkipPattern(llet, '^\s*(\*.*\*)\s*$')
if getline(nb) =~ a:lim
return old
endif
let llet = search(a:pat, 'bW')
endwhile
return old
endfunction
" Indent pairs
function! s:FindPair(pstart, pmid, pend)
call search(a:pend, 'bW')
" return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))
let lno = searchpair(a:pstart, a:pmid, a:pend, 'bW', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"')
if lno == -1
return indent(lno)
else
return col(".") - 1
endif
endfunction
function! s:FindLet(pstart, pmid, pend)
call search(a:pend, 'bW')
" return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))
let lno = searchpair(a:pstart, a:pmid, a:pend, 'bW', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"')
let moduleLine = getline(lno)
if lno == -1 || moduleLine =~ '^\s*\(fun\|structure\|signature\)\>'
return indent(lno)
else
return col(".") - 1
endif
endfunction
" Indent 'let'
"function! s:FindLet(pstart, pmid, pend)
" call search(a:pend, 'bW')
" return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "^\\s*let\\>.*=.*\\<in\\s*$" || getline(prevnonblank(".") - 1) =~ "^\\s*let\\>.*=\\s*$\\|" . s:beflet'))
"endfunction
function! GetSMLIndent()
" Find a non-blank line above the current line.
let lnum = prevnonblank(v:lnum - 1)
" At the start of the file use zero indent.
if lnum == 0
return 0
endif
let ind = indent(lnum)
let lline = getline(lnum)
" Return double 'shiftwidth' after lines matching:
if lline =~ '^\s*|.*=>\s*$'
return ind + &sw + &sw
elseif lline =~ '^\s*val\>.*=\s*$'
return ind + &sw
endif
let line = getline(v:lnum)
" Indent lines starting with 'end' to matching module
if line =~ '^\s*end\>'
return s:FindLet(s:module, '', '\<end\>')
" Match 'else' with 'if'
elseif line =~ '^\s*else\>'
if lline !~ '^\s*\(if\|else\|then\)\>'
return s:FindPair('\<if\>', '', '\<then\>')
else return ind
endif
" Match 'then' with 'if'
elseif line =~ '^\s*then\>'
if lline !~ '^\s*\(if\|else\|then\)\>'
return s:FindPair('\<if\>', '', '\<then\>')
else return ind
endif
" Indent if current line begins with ']'
elseif line =~ '^\s*\]'
return s:FindPair('\[','','\]')
" Indent current line starting with 'in' to last matching 'let'
elseif line =~ '^\s*in\>'
let ind = s:FindLet('\<let\>','','\<in\>')
" Indent from last matching module if line matches:
elseif line =~ '^\s*\(fun\|val\|open\|structure\|and\|datatype\|type\|exception\)\>'
cursor(lnum,1)
let lastModule = indent(searchpair(s:module, '', '\<end\>', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))
if lastModule == -1
return 0
else
return lastModule + &sw
endif
" Indent lines starting with '|' from matching 'case', 'handle'
elseif line =~ '^\s*|'
" cursor(lnum,1)
let lastSwitch = search('\<\(case\|handle\|fun\|datatype\)\>','bW')
let switchLine = getline(lastSwitch)
let switchLineIndent = indent(lastSwitch)
if lline =~ '^\s*|'
return ind
endif
if switchLine =~ '\<case\>'
return col(".") + 2
elseif switchLine =~ '\<handle\>'
return switchLineIndent + &sw
elseif switchLine =~ '\<datatype\>'
call search('=')
return col(".") - 1
else
return switchLineIndent + 2
endif
" Indent if last line ends with 'sig', 'struct', 'let', 'then', 'else',
" 'in'
elseif lline =~ '\<\(sig\|struct\|let\|in\|then\|else\)\s*$'
let ind = ind + &sw
" Indent if last line ends with 'of', align from 'case'
elseif lline =~ '\<\(of\)\s*$'
call search('\<case\>',"bW")
let ind = col(".")+4
" Indent if current line starts with 'of'
elseif line =~ '^\s*of\>'
call search('\<case\>',"bW")
let ind = col(".")+1
" Indent if last line starts with 'fun', 'case', 'fn'
elseif lline =~ '^\s*\(fun\|fn\|case\)\>'
let ind = ind + &sw
endif
" Don't indent 'let' if last line started with 'fun', 'fn'
if line =~ '^\s*let\>'
if lline =~ '^\s*\(fun\|fn\)'
let ind = ind - &sw
endif
endif
return ind
endfunction
" vim:sw=2

View File

@ -1,7 +1,8 @@
" netrw.vim: Handles file transfer and remote directory listing across a network
" PLUGIN PORTION
" Date: Sep 08, 2005
" Last Change: Aug 29, 2005
" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
" Version: 66
" License: Vim License (see vim's :help license)
" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
@ -20,6 +21,17 @@
" ---------------------------------------------------------------------
" Load Once: {{{1
if exists("g:loaded_netrw") || &cp
finish
endif
if v:version < 600
echoerr "***netrw*** doesn't support Vim version ".v:version
finish
endif
let g:loaded_netrw = "v66"
if v:version < 700
let loaded_explorer = 1
endif
let s:keepcpo= &cpo
set cpo&vim
@ -126,7 +138,7 @@ endfun
" example and as a fix for a Windows 95 problem: in my
" experience, win95's ftp always dumped four blank lines
" at the end of the transfer.
if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
if has("win95") && g:netrw_win95ftp
fun! NetReadFixup(method, line1, line2)
" call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
if method == 3 " ftp (no <.netrc>)

View File

@ -1,5 +1,5 @@
" NetrwSettings.vim: makes netrw settings simpler
" Date: Aug 16, 2005
" Last Change: Aug 16, 2005
" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
" Version: 3
" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -82,7 +82,7 @@ syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]#
syn match rubyPredefinedVariable "$_\>" display
syn match rubyPredefinedVariable "$-[0FIKadilpvw]\>" display
syn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>" display
syn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOAD_PATH\|SAFE\|VERBOSE\)\>" display
syn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!"
syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>\%(\s*(\)\@!"
syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
@ -166,8 +166,8 @@ if !exists("ruby_no_expensive")
syn region rubyNoDoBlock matchgroup=rubyControl start="\<\%(case\|begin\)\>" start="\%(^\|\.\.\.\=\|[,;=([<>~\*/%!&^|+-]\)\s*\zs\%(if\|unless\)\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
" statement with optional *do*
syn region rubyOptDoLine matchgroup=rubyControl start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[,;=([<>~\*/%!&^|+-]\)\s*\)\@<=\<\%(until\|while\)\>" end="\%(\<do\>\|:\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo
syn region rubyOptDoBlock start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[,;=([<>~\*/%!&^|+-]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyControl end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyOptDoLine fold
syn region rubyOptDoLine matchgroup=rubyControl start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[?:,;=([<>~\*/%!&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" end="\%(\<do\>\|:\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo
syn region rubyOptDoBlock start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyControl end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyOptDoLine fold
if !exists("ruby_minlines")
let ruby_minlines = 50
@ -196,7 +196,7 @@ syn keyword rubyBeginEnd BEGIN END
if !exists("ruby_no_special_methods")
syn keyword rubyAccess public protected private
syn keyword rubyAttribute attr attr_accessor attr_reader attr_writer
syn keyword rubyControl abort at_exit exit fork loop trap
syn match rubyControl "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>\)"
syn keyword rubyEval eval class_eval instance_eval module_eval
syn keyword rubyException raise fail catch throw
syn keyword rubyInclude autoload extend include load require

View File

@ -1905,7 +1905,10 @@ ex_diffgetput(eap)
{
/* No argument: Find the other buffer in the list of diff buffers. */
for (idx_other = 0; idx_other < DB_COUNT; ++idx_other)
if (diffbuf[idx_other] != curbuf && diffbuf[idx_other] != NULL)
if (diffbuf[idx_other] != curbuf
&& diffbuf[idx_other] != NULL
&& (eap->cmdidx != CMD_diffput
|| diffbuf[idx_other]->b_p_ma))
break;
if (idx_other == DB_COUNT)
{
@ -1915,7 +1918,9 @@ ex_diffgetput(eap)
/* Check that there isn't a third buffer in the list */
for (i = idx_other + 1; i < DB_COUNT; ++i)
if (diffbuf[i] != curbuf && diffbuf[i] != NULL)
if (diffbuf[i] != curbuf
&& diffbuf[i] != NULL
&& (eap->cmdidx != CMD_diffput || diffbuf[i]->b_p_ma))
{
EMSG(_("E101: More than two buffers in diff mode, don't know which one to use"));
return;

View File

@ -295,6 +295,7 @@ edit(cmdchar, startln, count)
*/
if (cmdchar != 'r' && cmdchar != 'v')
{
# ifdef FEAT_EVAL
if (cmdchar == 'R')
ptr = (char_u *)"r";
else if (cmdchar == 'V')
@ -302,6 +303,7 @@ edit(cmdchar, startln, count)
else
ptr = (char_u *)"i";
set_vim_var_string(VV_INSERTMODE, ptr, 1);
# endif
apply_autocmds(EVENT_INSERTENTER, NULL, NULL, FALSE, curbuf);
}
#endif
@ -6580,9 +6582,11 @@ ins_insert(replaceState)
#endif
#ifdef FEAT_AUTOCMD
# ifdef FEAT_EVAL
set_vim_var_string(VV_INSERTMODE,
(char_u *)((State & REPLACE_FLAG) ? "i" :
replaceState == VREPLACE ? "v" : "r"), 1);
# endif
apply_autocmds(EVENT_INSERTCHANGE, NULL, NULL, FALSE, curbuf);
#endif
if (State & REPLACE_FLAG)

View File

@ -114,7 +114,6 @@ static int getargopt __ARGS((exarg_T *eap));
# define ex_cc ex_ni
# define ex_cnext ex_ni
# define ex_cfile ex_ni
# define ex_cexpr ex_ni
# define qf_list ex_ni
# define qf_age ex_ni
# define ex_helpgrep ex_ni
@ -125,6 +124,9 @@ static int getargopt __ARGS((exarg_T *eap));
# define ex_copen ex_ni
# define ex_cwindow ex_ni
#endif
#if !defined(FEAT_QUICKFIX) || !defined(FEAT_EVAL)
# define ex_cexpr ex_ni
#endif
static int check_more __ARGS((int, int));
static linenr_T get_address __ARGS((char_u **, int skip, int to_other_file));

View File

@ -428,13 +428,10 @@ getcmdline(firstc, count, indent)
if (p_wmnu && wild_menu_showing != 0)
{
int skt = KeyTyped;
int old_RedrawingDisabled;
int old_RedrawingDisabled = RedrawingDisabled;
if (ccline.input_fn)
{
old_RedrawingDisabled = RedrawingDisabled;
RedrawingDisabled = 0;
}
if (wild_menu_showing == WM_SCROLLED)
{
@ -463,10 +460,10 @@ getcmdline(firstc, count, indent)
# endif
redraw_statuslines();
}
if (ccline.input_fn)
RedrawingDisabled = old_RedrawingDisabled;
KeyTyped = skt;
wild_menu_showing = 0;
if (ccline.input_fn)
RedrawingDisabled = old_RedrawingDisabled;
}
#endif
}
@ -4876,7 +4873,7 @@ set_cmdline_pos(pos)
/*
* Get the current command-line type.
* Returns ':' or '/' or '?' or '@' or '>'
* Returns ':' or '/' or '?' or '@' or '>' or '-'
* Only works when the command line is being edited.
* Returns NUL when something is wrong.
*/
@ -4887,6 +4884,8 @@ get_cmdline_type()
if (p == NULL)
return NUL;
if (p->cmdfirstc == NUL)
return (p->input_fn) ? '@' : '-';
return p->cmdfirstc;
}

View File

@ -201,13 +201,6 @@
# define VIM_BACKTICK /* internal backtick expansion */
#endif
/*
* +textobjects Text objects: "vaw", "das", etc.
*/
#ifdef FEAT_NORMAL
# define FEAT_TEXTOBJ
#endif
/*
* +visual Visual mode.
* +visualextra Extra features for Visual mode (mostly block operators).
@ -383,11 +376,19 @@
* +profile Profiling for functions and scripts.
*/
#if defined(FEAT_HUGE) \
&& defined(FEAT_EVAL) \
&& ((defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)) \
|| defined(WIN3264))
# define FEAT_PROFILE
#endif
/*
* +textobjects Text objects: "vaw", "das", etc.
*/
#if defined(FEAT_NORMAL) && defined(FEAT_EVAL)
# define FEAT_TEXTOBJ
#endif
/*
* Insert mode completion with 'completefunc'.
*/

View File

@ -2796,14 +2796,22 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
if (!buf_valid(buf))
buf = NULL;
if (buf == NULL || (buf->b_ml.ml_mfp == NULL && !empty_memline)
|| did_cmd || nofile_err || aborting())
|| did_cmd || nofile_err
#ifdef FEAT_EVAL
|| aborting()
#endif
)
{
--no_wait_return;
msg_scroll = msg_save;
if (nofile_err)
EMSG(_("E676: No matching autocommands for acwrite buffer"));
if (aborting() || nofile_err)
if (nofile_err
#ifdef FEAT_EVAL
|| aborting()
#endif
)
/* An aborting error, interrupt or exception in the
* autocommands. */
return FAIL;
@ -6021,8 +6029,10 @@ buf_check_timestamp(buf, focus)
* Avoid being called recursively by setting "busy".
*/
busy = TRUE;
# ifdef FEAT_EVAL
set_vim_var_string(VV_FCS_REASON, (char_u *)reason, -1);
set_vim_var_string(VV_FCS_CHOICE, (char_u *)"", -1);
# endif
n = apply_autocmds(EVENT_FILECHANGEDSHELL,
buf->b_fname, buf->b_fname, FALSE, buf);
busy = FALSE;
@ -6030,12 +6040,14 @@ buf_check_timestamp(buf, focus)
{
if (!buf_valid(buf))
EMSG(_("E246: FileChangedShell autocommand deleted buffer"));
# ifdef FEAT_EVAL
s = get_vim_var_str(VV_FCS_CHOICE);
if (STRCMP(s, "reload") == 0 && *reason != 'd')
reload = TRUE;
else if (STRCMP(s, "ask") == 0)
n = FALSE;
else
# endif
return 2;
}
if (!n)
@ -7978,12 +7990,18 @@ apply_autocmds_retval(event, fname, fname_io, force, buf, retval)
{
int did_cmd;
#ifdef FEAT_EVAL
if (should_abort(*retval))
return FALSE;
#endif
did_cmd = apply_autocmds_group(event, fname, fname_io, force,
AUGROUP_ALL, buf, NULL);
if (did_cmd && aborting())
if (did_cmd
#ifdef FEAT_EVAL
&& aborting()
#endif
)
*retval = FAIL;
return did_cmd;
}

View File

@ -3749,6 +3749,7 @@ tv_nr(tvs, idxp)
/*
* Get string argument from "idxp" entry in "tvs". First entry is 1.
* Returns NULL for an error.
*/
static char *
tv_str(tvs, idxp)

View File

@ -20,6 +20,7 @@
#include "vim.h"
static void comp_botline __ARGS((win_T *wp));
static int scrolljump_value __ARGS((void));
static int check_top_offset __ARGS((void));
static void curs_rows __ARGS((win_T *wp, int do_botline));
static void validate_botline_win __ARGS((win_T *wp));
@ -249,7 +250,7 @@ update_topline()
scroll_cursor_halfway(FALSE);
else
{
scroll_cursor_top((int)p_sj, FALSE);
scroll_cursor_top(scrolljump_value(), FALSE);
check_botline = TRUE;
}
}
@ -341,7 +342,7 @@ update_topline()
line_count = curwin->w_cursor.lnum - curwin->w_botline
+ 1 + p_so;
if (line_count <= curwin->w_height + 1)
scroll_cursor_bot((int)p_sj, FALSE);
scroll_cursor_bot(scrolljump_value(), FALSE);
else
scroll_cursor_halfway(FALSE);
}
@ -376,6 +377,19 @@ update_topline()
#endif
}
/*
* Return the scrolljump value to use for the current window.
* When 'scrolljump' is positive use it as-is.
* When 'scrolljump' is negative use it as a percentage of the window height.
*/
static int
scrolljump_value()
{
if (p_sj >= 0)
return (int)p_sj;
return (curwin->w_height * -p_sj) / 100;
}
/*
* Return TRUE when there are not 'scrolloff' lines above the cursor for the
* current window.

View File

@ -7420,7 +7420,7 @@ set_num_option(opt_idx, varp, value, errbuf, errbuflen, opt_flags)
errmsg = e_positive;
p_report = 1;
}
if ((p_sj < 0 || p_sj >= Rows) && full_screen)
if ((p_sj < -100 || p_sj >= Rows) && full_screen)
{
if (Rows != old_Rows) /* Rows changed, just adjust p_sj */
p_sj = Rows / 2;

View File

@ -2215,8 +2215,10 @@ ex_make(eap)
{
apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
curbuf->b_fname, TRUE, curbuf);
# ifdef FEAT_EVAL
if (did_throw || force_abort)
return;
# endif
}
#endif
@ -2974,6 +2976,7 @@ ex_cbuffer(eap)
}
}
#if defined(FEAT_EVAL) || defined(PROTO)
/*
* ":cexpr {expr}" command.
*/
@ -2994,6 +2997,7 @@ ex_cexpr(eap)
clear_tv(tv);
}
#endif
/*
* ":helpgrep {pattern}"

View File

@ -511,15 +511,15 @@ typedef struct suggest_S
#define SCORE_RARE 180 /* rare word */
#define SCORE_SWAP 90 /* swap two characters */
#define SCORE_SWAP3 110 /* swap two characters in three */
#define SCORE_REP 87 /* REP replacement */
#define SCORE_REP 65 /* REP replacement */
#define SCORE_SUBST 93 /* substitute a character */
#define SCORE_SIMILAR 33 /* substitute a similar character */
#define SCORE_SUBCOMP 33 /* substitute a composing character */
#define SCORE_DEL 94 /* delete a character */
#define SCORE_DELDUP 64 /* delete a duplicated character */
#define SCORE_DELDUP 66 /* delete a duplicated character */
#define SCORE_DELCOMP 28 /* delete a composing character */
#define SCORE_INS 96 /* insert a character */
#define SCORE_INSDUP 66 /* insert a duplicate character */
#define SCORE_INSDUP 67 /* insert a duplicate character */
#define SCORE_INSCOMP 30 /* insert a composing character */
#define SCORE_NONWORD 103 /* change non-word to word char */
@ -5049,8 +5049,18 @@ spell_read_aff(spin, fname)
if (itemcnt > 3 && items[3][0] != '#')
smsg((char_u *)_(e_afftrailing), fname, lnum, items[3]);
if (do_rep)
{
/* Replace underscore with space (can't include a space
* directly). */
for (p = items[1]; *p != NUL; mb_ptr_adv(p))
if (*p == '_')
*p = ' ';
for (p = items[2]; *p != NUL; mb_ptr_adv(p))
if (*p == '_')
*p = ' ';
add_fromto(spin, &spin->si_rep, items[1], items[2]);
}
}
else if (STRCMP(items[0], "MAP") == 0 && itemcnt == 2)
{
/* MAP item or count */
@ -11081,13 +11091,21 @@ add_suggestion(su, gap, goodword, badlen, score, altscore, had_bonus, slang)
int had_bonus; /* value for st_had_bonus */
slang_T *slang; /* language for sound folding */
{
int goodlen = STRLEN(goodword);
suggest_T *stp;
int i;
char_u *p = NULL;
int c = 0;
int attr = 0;
char_u longword[MAXWLEN + 1];
/* Check that the word wasn't banned. */
if (was_banned(su, goodword))
/* Check that the word really is valid. Esp. for banned words and for
* split words, such as "the the". Need to append what follows to check
* for that. */
STRCPY(longword, goodword);
vim_strncpy(longword + goodlen, su->su_badptr + badlen, MAXWLEN - goodlen);
(void)spell_check(curwin, longword, &attr, NULL);
if (attr != 0)
return;
/* If past "su_badlen" and the rest is identical stop at "su_badlen".
@ -11097,7 +11115,7 @@ add_suggestion(su, gap, goodword, badlen, score, altscore, had_bonus, slang)
{
/* This assumes there was no case folding or it didn't change the
* length... */
p = goodword + STRLEN(goodword) - i;
p = goodword + goodlen - i;
if (p > goodword && STRNICMP(su->su_badptr + su->su_badlen, p, i) == 0)
{
badlen = su->su_badlen;
@ -11112,7 +11130,7 @@ add_suggestion(su, gap, goodword, badlen, score, altscore, had_bonus, slang)
/* When replacing part of the word check that we actually change
* something. For "the the" a suggestion can be replacing the first
* "the" with itself, since "the" wasn't banned. */
if (badlen == (int)STRLEN(goodword)
if (badlen == (int)goodlen
&& STRNCMP(su->su_badword, goodword, badlen) == 0)
return;
}

View File

@ -33,7 +33,7 @@ STARTTEST
normal 0f:]s
let prevbad = ''
while 1
let bad = spellbadword()
let [bad, a] = spellbadword()
if bad == '' || bad == prevbad || bad == 'badend'
break
endif
@ -64,31 +64,31 @@ gg:/^addstart/+1,/^addend/-1w! Xtest.utf-8.add
:mkspell! Xtest.utf-8.add.spl Xtest.utf-8.add
:set spellfile=Xtest.utf-8.add
/^test2:
]s:let str = spellbadword()
]s:let [str, a] = spellbadword()
:$put =str
:set spl=Xtest_us.utf-8.spl
/^test2:
]smm:let str = spellbadword()
]smm:let [str, a] = spellbadword()
:$put =str
`m]s:let str = spellbadword()
`m]s:let [str, a] = spellbadword()
:$put =str
:set spl=Xtest_gb.utf-8.spl
/^test2:
]smm:let str = spellbadword()
]smm:let [str, a] = spellbadword()
:$put =str
`m]s:let str = spellbadword()
`m]s:let [str, a] = spellbadword()
:$put =str
:set spl=Xtest_nz.utf-8.spl
/^test2:
]smm:let str = spellbadword()
]smm:let [str, a] = spellbadword()
:$put =str
`m]s:let str = spellbadword()
`m]s:let [str, a] = spellbadword()
:$put =str
:set spl=Xtest_ca.utf-8.spl
/^test2:
]smm:let str = spellbadword()
]smm:let [str, a] = spellbadword()
:$put =str
`m]s:let str = spellbadword()
`m]s:let [str, a] = spellbadword()
:$put =str
:"
:" Postponed prefixes

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 20)"
#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 20, compiled "
#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 25)"
#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 25, compiled "