diff options
author | Bram Moolenaar <Bram@vim.org> | 2005-09-25 22:16:38 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2005-09-25 22:16:38 +0000 |
commit | 1e01546026ce909b5fe56c05867f28e77d1b6eb3 (patch) | |
tree | 05ccef65c430097352670acbbeb5520d649ba841 /runtime | |
parent | bfd8fc0529f46612f7b3efca6c7b3305e70ac374 (diff) | |
download | vim-git-1e01546026ce909b5fe56c05867f28e77d1b6eb3.tar.gz |
updated for version 7.0150
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/autoload/csscomplete.vim | 39 | ||||
-rw-r--r-- | runtime/autoload/htmlcomplete.vim | 150 | ||||
-rw-r--r-- | runtime/autoload/netrw.vim | 250 | ||||
-rw-r--r-- | runtime/compiler/eruby.vim | 21 | ||||
-rw-r--r-- | runtime/doc/diff.txt | 6 | ||||
-rw-r--r-- | runtime/doc/eval.txt | 45 | ||||
-rw-r--r-- | runtime/doc/insert.txt | 31 | ||||
-rw-r--r-- | runtime/doc/map.txt | 13 | ||||
-rw-r--r-- | runtime/doc/message.txt | 8 | ||||
-rw-r--r-- | runtime/doc/options.txt | 13 | ||||
-rw-r--r-- | runtime/doc/pi_netrw.txt | 303 | ||||
-rw-r--r-- | runtime/doc/spell.txt | 6 | ||||
-rw-r--r-- | runtime/doc/tags | 13 | ||||
-rw-r--r-- | runtime/filetype.vim | 6 | ||||
-rw-r--r-- | runtime/indent/eruby.vim | 20 | ||||
-rw-r--r-- | runtime/indent/php.vim | 918 | ||||
-rw-r--r-- | runtime/indent/ruby.vim | 15 | ||||
-rw-r--r-- | runtime/indent/sml.vim | 215 | ||||
-rw-r--r-- | runtime/plugin/NetrwPlugin.vim | 16 | ||||
-rw-r--r-- | runtime/plugin/NetrwSettings.vim | 4 | ||||
-rw-r--r-- | runtime/spell/en.ascii.spl | bin | 566661 -> 566695 bytes | |||
-rw-r--r-- | runtime/spell/en.latin1.spl | bin | 568765 -> 568799 bytes | |||
-rw-r--r-- | runtime/spell/en.utf-8.spl | bin | 569196 -> 569230 bytes | |||
-rw-r--r-- | runtime/syntax/ruby.vim | 14 |
24 files changed, 1185 insertions, 921 deletions
diff --git a/runtime/autoload/csscomplete.vim b/runtime/autoload/csscomplete.vim index 8ac360061..9461f39b8 100644 --- a/runtime/autoload/csscomplete.vim +++ b/runtime/autoload/csscomplete.vim @@ -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,14 +28,16 @@ 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, ':') - let semicolon = stridx(revline, ';') - let opencomm = stridx(revline, '*/') " Line was reversed - let closecomm = stridx(revline, '/*') " Line was reversed - let style = stridx(revline, '=\s*elyts') " Line was reversed - let atrule = stridx(revline, '@') + let colon = stridx(revline, ':') + let semicolon = stridx(revline, ';') + let opencomm = stridx(revline, '*/') " Line was reversed + let closecomm = stridx(revline, '/*') " Line was reversed + let style = stridx(revline, '=\s*elyts') " Line was reversed + let atrule = stridx(revline, '@') + 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-]*$') diff --git a/runtime/autoload/htmlcomplete.vim b/runtime/autoload/htmlcomplete.vim index ab5095243..9dd5830a1 100644 --- a/runtime/autoload/htmlcomplete.vim +++ b/runtime/autoload/htmlcomplete.vim @@ -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 =~ "class\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$" + 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 styleheadlines = split(stylehead) - let headclasslines = filter(copy(styleheadlines), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'") + 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 stylesheet = split(stylefile) - let classlines = filter(copy(stylesheet), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'") + 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,43 +154,71 @@ function! htmlcomplete#CompleteTags(findstart, base) if internal == 1 let classes += headclasslines endif - let elements = {} - for element in classes - if element =~ '^\.' - let class = matchstr(element, '^\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze') - let class = substitute(class, ':.*', '', '') - if has_key(elements, "common") - let elements["common"] .= " ".class - else - let elements["common"] = class - endif - else - let class = matchstr(element, '[a-zA-Z1-6]*\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze') - let tagname = tolower(matchstr(element, '[a-zA-Z1-6]*\ze.')) - if tagname != '' - if has_key(elements, tagname) - let elements[tagname] .= " ".class + + 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 else - let elements[tagname] = 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 + else + let elements[tagname] = class + endif endif endif + endfor + + if has_key(elements, tag) && has_key(elements, 'common') + let values = split(elements[tag]." ".elements['common']) + elseif has_key(elements, tag) && !has_key(elements, 'common') + let values = split(elements[tag]) + elseif !has_key(elements, tag) && has_key(elements, 'common') + let values = split(elements['common']) + else + return [] endif - endfor - if has_key(elements, tag) && has_key(elements, "common") - let values = split(elements[tag]." ".elements["common"]) - elseif has_key(elements, tag) && !has_key(elements, "common") - let values = split(elements[tag]) - elseif !has_key(elements, tag) && has_key(elements, "common") - let values = split(elements["common"]) - else - return [] + 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 classquote = matchstr(classbase, '.$') let entered_class = matchstr(attr, ".*=\\s*[\"']\\zs.*") @@ -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\)$' diff --git a/runtime/autoload/netrw.vim b/runtime/autoload/netrw.vim index c7434af9b..10dd28542 100644 --- a/runtime/autoload/netrw.vim +++ b/runtime/autoload/netrw.vim @@ -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 @@ -1207,7 +1200,7 @@ fun! s:NetBrowse(dirname) nnoremap <buffer> <silent> U :<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr> nnoremap <buffer> <silent> v :call <SID>NetSplit(1)<cr> nnoremap <buffer> <silent> x :call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()),1)<cr> - nnoremap <buffer> <silent> <2-leftmouse> :call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr> + nnoremap <buffer> <silent> <2-leftmouse> :call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr> exe 'nnoremap <buffer> <silent> <del> :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' exe 'vnoremap <buffer> <silent> <del> :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' exe 'nnoremap <buffer> <silent> d :call <SID>NetMakeDir("'.user.machine.'")<cr>' @@ -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 @@ -3091,73 +3078,12 @@ fun! netrw#Explore(indx,dosplit,style,...) 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 - 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 &ai = w:aikeep + if has("netbeans_intg") || has("sun_workshop") + let &acd = w:acdkeep + 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 " --------------------------------------------------------------------- diff --git a/runtime/compiler/eruby.vim b/runtime/compiler/eruby.vim index 5d85bf14f..77292bce1 100644 --- a/runtime/compiler/eruby.vim +++ b/runtime/compiler/eruby.vim @@ -24,13 +24,22 @@ 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, - \%E%f:%l:\ %m, - \%-Z%p^, - \%C%m, - \%-G%.%# +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^, + \%-G%.%# let &cpo = s:cpo_save unlet s:cpo_save diff --git a/runtime/doc/diff.txt b/runtime/doc/diff.txt index 7d6383126..fdd820f84 100644 --- a/runtime/doc/diff.txt +++ b/runtime/doc/diff.txt @@ -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* diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index ed6ee899a..6c32f1653 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -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}]) diff --git a/runtime/doc/insert.txt b/runtime/doc/insert.txt index 30fe2d4f1..f668c0093 100644 --- a/runtime/doc/insert.txt +++ b/runtime/doc/insert.txt @@ -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. - -When used after "</" CTRL-X CTRL-O will close the last opened tag. +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: + +- 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* diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt index c33023a75..618c76712 100644 --- a/runtime/doc/map.txt +++ b/runtime/doc/map.txt @@ -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 diff --git a/runtime/doc/message.txt b/runtime/doc/message.txt index a1c18bed9..87429e030 100644 --- a/runtime/doc/message.txt +++ b/runtime/doc/message.txt @@ -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: diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 7cc817043..39a6f40ce 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -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'* diff --git a/runtime/doc/pi_netrw.txt b/runtime/doc/pi_netrw.txt index 4d446f692..d1ca623d7 100644 --- a/runtime/doc/pi_netrw.txt +++ b/runtime/doc/pi_netrw.txt @@ -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. - -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"). +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"). 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,14 +369,15 @@ 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. :Nread {netfile} {netfile}... Read the {netfile} after the current line. - *netrw-uidpass* + *netrw-uidpass* :call NetUserPass() If b:netrw_uid and b:netrw_passwd don't exist, this function query the user for them. @@ -407,11 +401,10 @@ 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 - ------------- +> + ------------- + Netrw Options + ------------- Option Meaning -------------- ----------------------------------------------- < @@ -434,7 +427,7 @@ behavior. These variables typically may be set in the user's <.vimrc> file: g:netrw_silent =0 transfers done normally =1 transfers done silently g:netrw_uid Holds current user-id for ftp. - =1 use alternate ftp (user uid password) + =1 use alternate ftp (user uid password) (see |netrw-options|) g:netrw_use_nt_rcp =0 don't use WinNT/2K/XP's rcp (default) =1 use WinNT/2K/XP's rcp, binary mode @@ -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 @@ -853,13 +841,7 @@ BROWSING *netrw-cr* Browsing is simple: move the cursor onto a file or directory of interest. 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. +protocol given in the original read request. OBTAINING A FILE *netrw-O* @@ -867,21 +849,7 @@ 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,20 +1011,20 @@ 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 in your <.vimrc>. -CUSTOMIZING BROWSING WITH A USER FUNCTION *netrw-x* *netrw-handler* +CUSTOMIZING BROWSING WITH A USER FUNCTION *netrw-x* *netrw-handler* One may "enter" a file with a special handler, thereby firing up a browser or other application, for example, on a file by hitting the "x" key. The special @@ -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. ============================================================================== @@ -1240,10 +1201,10 @@ which is loaded automatically at startup (assuming :set nocp). 1. Get the <Decho.vim> script, available as: - http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_scripts - as "Decho, a vimL debugging aid" + http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_scripts + as "Decho, a vimL debugging aid" or - http://vim.sourceforge.net/scripts/script.php?script_id=120 + http://vim.sourceforge.net/scripts/script.php?script_id=120 and put it into your local plugin directory. @@ -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 diff --git a/runtime/doc/spell.txt b/runtime/doc/spell.txt index d2fa97629..023476a91 100644 --- a/runtime/doc/spell.txt +++ b/runtime/doc/spell.txt @@ -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* diff --git a/runtime/doc/tags b/runtime/doc/tags index cc4d2a8a7..36d9b2271 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -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* diff --git a/runtime/filetype.vim b/runtime/filetype.vim index a09f89548..af6465fd8 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -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 diff --git a/runtime/indent/eruby.vim b/runtime/indent/eruby.vim new file mode 100644 index 000000000..664f9c231 --- /dev/null +++ b/runtime/indent/eruby.vim @@ -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 diff --git a/runtime/indent/php.vim b/runtime/indent/php.vim index 3e7a99023..22210cee7 100644 --- a/runtime/indent/php.vim +++ b/runtime/indent/php.vim @@ -2,30 +2,27 @@ " 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 -" 2072productions.com at the URI provided above. -" +" The change log and all the comments have been removed from this file. " -" -" 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. +" For a complete change log and fully commented code, download the script on +" 2072productions.com at the URI provided above. " " -" Thanks a lot for using this script. +" If you find a bug, please e-mail me at John.wellesz (AT) teaser (DOT) fr +" with an example of code that breaks the algorithm. " " " NOTE: This script must be used with PHP syntax ON and with the php syntax -" script by Lutz Eymers (http://www.isp.de/data/php.vim ) that's the script bundled with Gvim. +" script by Lutz Eymers (http://www.isp.de/data/php.vim ) that's the script bundled with Gvim. " " " In the case you have syntax errors in your script such as end of HereDoc " 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 @@ -38,56 +35,51 @@ " silently remove them when VIM load this script (at each bufread). " Options: PHP_default_indenting = # of sw (default is 0), # of sw will be -" added to the indent of each line of PHP code. +" added to the indent of each line of PHP code. " " Options: PHP_removeCRwhenUnix = 1 to make the script automatically remove CR -" at end of lines (by default this option is unset), NOTE that you -" MUST remove CR when the fileformat is UNIX else the indentation -" won't be correct... +" at end of lines (by default this option is unset), NOTE that you +" MUST remove CR when the fileformat is UNIX else the indentation +" won't be correct... " " Options: PHP_BracesAtCodeLevel = 1 to indent the '{' and '}' at the same -" level than the code they contain. -" Exemple: -" Instead of: -" if ($foo) +" level than the code they contain. +" Exemple: +" Instead of: +" if ($foo) +" { +" foo(); +" } +" +" You will write: +" if ($foo) " { -" foo(); +" foo(); " } " -" You will write: -" if ($foo) -" { -" foo(); -" } -" -" NOTE: The script will be a bit slower if you use this option because -" some optimizations won't be available. +" NOTE: The script will be a bit slower if you use this option because +" some optimizations won't be available. if exists("b:did_indent") - finish + finish 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 if exists("PHP_default_indenting") - let b:PHP_default_indenting = PHP_default_indenting * &sw + let b:PHP_default_indenting = PHP_default_indenting * &sw else - let b:PHP_default_indenting = 0 + let b:PHP_default_indenting = 0 endif if exists("PHP_BracesAtCodeLevel") - let b:PHP_BracesAtCodeLevel = PHP_BracesAtCodeLevel + let b:PHP_BracesAtCodeLevel = PHP_BracesAtCodeLevel else - let b:PHP_BracesAtCodeLevel = 0 + let b:PHP_BracesAtCodeLevel = 0 endif @@ -108,24 +100,21 @@ 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 + silent! %s/\r$//g endif if exists("*GetPhpIndent") - finish " XXX + finish " XXX endif let s:endline= '\s*\%(//.*\|#.*\|/\*.*\*/\s*\)\=$' @@ -134,537 +123,544 @@ 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 - - while lnum > 1 - let lnum = prevnonblank(lnum) + let lnum = a:startline + let old_lnum = lnum + + while lnum > 1 + let lnum = prevnonblank(lnum) + let lastline = getline(lnum) + + if b:InPHPcode_and_script && lastline =~ '?>\s*$' + let lnum = lnum - 1 + elseif lastline =~ '^\s*?>.*<?\%(php\)\=\s*$' + let lnum = lnum - 1 + elseif lastline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)' + let lnum = lnum - 1 + elseif lastline =~ '\*/\s*$' + call cursor(lnum, 1) + if lastline !~ '^\*/' + call search('\*/', 'W') + endif + let lnum = searchpair('/\*', '', '\*/', s:searchpairflags) + + let lastline = getline(lnum) + if lastline =~ '^\s*/\*' + let lnum = lnum - 1 + else + break + endif + + + elseif lastline =~? '\%(//\s*\|?>.*\)\@<!<?\%(php\)\=\s*$\|^\s*<script\>' + + while lastline !~ '\(<?.*\)\@<!?>' && lnum > 1 + let lnum = lnum - 1 let lastline = getline(lnum) + endwhile + if lastline =~ '^\s*?>' + let lnum = lnum - 1 + else + break + endif + + + 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 + endif + endwhile - if b:InPHPcode_and_script && lastline =~ '?>\s*$' - let lnum = lnum - 1 - elseif lastline =~ '^\s*?>.*<?\%(php\)\=\s*$' - let lnum = lnum - 1 - elseif lastline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)' " if line is under comment - let lnum = lnum - 1 - elseif lastline =~ '\*/\s*$' " skip multiline comments - call cursor(lnum, 1) - call search('\*/\zs', 'W') " positition the cursor after the first */ - let lnum = searchpair('/\*', '', '\*/\zs', s:searchpairflags) " find the most outside /* - - 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...) - else - break - endif - - - elseif lastline =~? '\%(//\s*\|?>.*\)\@<!<?\%(php\)\=\s*$\|^\s*<script\>' " skip non php code - - while lastline !~ '\(<?.*\)\@<!?>' && lnum > 1 - let lnum = lnum - 1 - let lastline = getline(lnum) - endwhile - if lastline =~ '^\s*?>' " if line contains nothing but end tag - let lnum = lnum - 1 - else - break " else there is something important before the ?> - endif - - - elseif lastline =~? '^\a\w*;$' && lastline !~? s:notPhpHereDoc " match the end of a heredoc - 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 - endif - endwhile + if lnum==1 && getline(lnum)!~ '<?' + let lnum=0 + endif - if lnum==1 && getline(lnum)!~ '<?' - let lnum=0 - endif - - if b:InPHPcode_and_script && !b:InPHPcode - let b:InPHPcode_and_script = 0 - endif - return lnum -endfunction -" }}} + if b:InPHPcode_and_script && !b:InPHPcode + let b:InPHPcode_and_script = 0 + endif + return lnum +endfunction " }}} function! Skippmatch() " {{{ - let synname = synIDattr(synID(line("."), col("."), 0), "name") - if synname == "Delimiter" || synname == "phpParent" || synname == "javaScriptBraces" || synname == "phpComment" && b:UserIsTypingComment - return 0 - else - return 1 - endif -endfun -" }}} + let synname = synIDattr(synID(line("."), col("."), 0), "name") + if synname == "Delimiter" || synname == "phpParent" || synname == "javaScriptBraces" || synname == "phpComment" && b:UserIsTypingComment + return 0 + else + return 1 + endif +endfun " }}} function! FindOpenBracket(lnum) " {{{ - call cursor(a:lnum, 1) " set the cursor to the start of the lnum line - return searchpair('{', '', '}', 'bW', 'Skippmatch()') -endfun -" }}} + call cursor(a:lnum, 1) + return searchpair('{', '', '}', 'bW', 'Skippmatch()') +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 - else - let beforeelse = GetLastRealCodeLNum(a:lnum - 1) - endif - if !s:level - let s:iftoskip = 0 - endif + if getline(a:lnum) =~# '^\s*}\s*else\%(if\)\=\>' + let beforeelse = a:lnum + else + let beforeelse = GetLastRealCodeLNum(a:lnum - 1) + endif - if getline(beforeelse) =~# '^\s*\%(}\s*\)\=else\%(\s*if\)\@!\>' - let s:iftoskip = s:iftoskip + 1 - endif - - if getline(beforeelse) =~ '^\s*}' - let beforeelse = FindOpenBracket(beforeelse) + if !s:level + let s:iftoskip = 0 + endif - if getline(beforeelse) =~ '^\s*{' - let beforeelse = GetLastRealCodeLNum(beforeelse - 1) - endif - endif + if getline(beforeelse) =~# '^\s*\%(}\s*\)\=else\%(\s*if\)\@!\>' + let s:iftoskip = s:iftoskip + 1 + endif + if getline(beforeelse) =~ '^\s*}' + let beforeelse = FindOpenBracket(beforeelse) - if !s:iftoskip && a:StopAfterFirstPrevElse && getline(beforeelse) =~# '^\s*\%([}]\s*\)\=else\%(if\)\=\>' - return beforeelse + if getline(beforeelse) =~ '^\s*{' + let beforeelse = GetLastRealCodeLNum(beforeelse - 1) endif + endif - if getline(beforeelse) !~# '^\s*if\>' && beforeelse>1 || s:iftoskip && beforeelse>1 - - if s:iftoskip && getline(beforeelse) =~# '^\s*if\>' - let s:iftoskip = s:iftoskip - 1 - endif - let s:level = s:level + 1 - let beforeelse = FindTheIfOfAnElse(beforeelse, a:StopAfterFirstPrevElse) + if !s:iftoskip && a:StopAfterFirstPrevElse && getline(beforeelse) =~# '^\s*\%([}]\s*\)\=else\%(if\)\=\>' + return beforeelse + endif + + if getline(beforeelse) !~# '^\s*if\>' && beforeelse>1 || s:iftoskip && beforeelse>1 + + if s:iftoskip && getline(beforeelse) =~# '^\s*if\>' + let s:iftoskip = s:iftoskip - 1 endif - return beforeelse + let s:level = s:level + 1 + let beforeelse = FindTheIfOfAnElse(beforeelse, a:StopAfterFirstPrevElse) + endif -endfunction -" }}} + return beforeelse + +endfunction " }}} function! IslinePHP (lnum, tofind) " {{{ - let cline = getline(a:lnum) + 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. - else - let tofind = a:tofind - endif + if a:tofind=="" + 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 synname = synIDattr(synID(a:lnum, coltotest, 0), "name") " ask to syntax what is its name + let coltotest = match (cline, tofind) + 1 - if synname =~ '^php' || synname=="Delimiter" || synname =~? '^javaScript' - return synname - else - return "" - endif -endfunction -" }}} + let synname = synIDattr(synID(a:lnum, coltotest, 0), "name") + + if synname =~ '^php' || synname=="Delimiter" || synname =~? '^javaScript' + return synname + else + return "" + endif +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 - au BufWinEnter,Syntax *.php,*.php3,*.php4,*.php5 call ResetOptions() - let s:autorestoptions = 1 + au BufWinEnter,Syntax *.php,*.php3,*.php4,*.php5 call ResetOptions() + let s:autorestoptions = 1 endif function! ResetOptions() - if ! b:optionsset - setlocal formatoptions=qroc - let b:optionsset = 1 - endif + if ! b:optionsset + setlocal formatoptions=qroc + let b:optionsset = 1 + endif endfunc function! GetPhpIndent() - "############################################## - "########### MAIN INDENT FUNCTION ############# - "############################################## - - let UserIsEditing=0 - if b:PHP_oldchangetick != b:changedtick - let b:PHP_oldchangetick = b:changedtick - let UserIsEditing=1 - endif - - if b:PHP_default_indenting - let b:PHP_default_indenting = g:PHP_default_indenting * &sw - endif - let cline = getline(v:lnum) " current line + let UserIsEditing=0 + if b:PHP_oldchangetick != b:changedtick + let b:PHP_oldchangetick = b:changedtick + let UserIsEditing=1 + endif - if !b:PHP_indentinghuge && b:PHP_lastindented > b:PHP_indentbeforelast - if b:PHP_indentbeforelast - let b:PHP_indentinghuge = 1 - echom 'Large indenting detected, speed optimizations engaged' - endif - let b:PHP_indentbeforelast = b:PHP_lastindented - endif + if b:PHP_default_indenting + let b:PHP_default_indenting = g:PHP_default_indenting * &sw + endif - if b:InPHPcode_checked && prevnonblank(v:lnum - 1) != b:PHP_lastindented - if b:PHP_indentinghuge - echom 'Large indenting deactivated' - let b:PHP_indentinghuge = 0 - let b:PHP_CurrentIndentLevel = b:PHP_default_indenting - endif - let b:PHP_lastindented = v:lnum - let b:PHP_LastIndentedWasComment=0 - let b:PHP_InsideMultilineComment=0 - let b:PHP_indentbeforelast = 0 - - let b:InPHPcode = 0 - let b:InPHPcode_checked = 0 - let b:InPHPcode_and_script = 0 - let b:InPHPcode_tofind = "" + let cline = getline(v:lnum) - elseif v:lnum > b:PHP_lastindented " we are indenting line in > order (we can rely on the line before) - let real_PHP_lastindented = b:PHP_lastindented - let b:PHP_lastindented = v:lnum + if !b:PHP_indentinghuge && b:PHP_lastindented > b:PHP_indentbeforelast + if b:PHP_indentbeforelast + let b:PHP_indentinghuge = 1 + echom 'Large indenting detected, speed optimizations engaged' endif + let b:PHP_indentbeforelast = b:PHP_lastindented + endif + if b:InPHPcode_checked && prevnonblank(v:lnum - 1) != b:PHP_lastindented + if b:PHP_indentinghuge + echom 'Large indenting deactivated' + let b:PHP_indentinghuge = 0 + let b:PHP_CurrentIndentLevel = b:PHP_default_indenting + endif + let b:PHP_lastindented = v:lnum + let b:PHP_LastIndentedWasComment=0 + let b:PHP_InsideMultilineComment=0 + let b:PHP_indentbeforelast = 0 - 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 b:InPHPcode = 0 + let b:InPHPcode_checked = 0 + let b:InPHPcode_and_script = 0 + let b:InPHPcode_tofind = "" - if synname!="" - if synname != "phpHereDoc" - let b:InPHPcode = 1 - let b:InPHPcode_tofind = "" + elseif v:lnum > b:PHP_lastindented + let real_PHP_lastindented = b:PHP_lastindented + let b:PHP_lastindented = v:lnum + endif - if synname == "phpComment" - let b:UserIsTypingComment = 1 - else - let b:UserIsTypingComment = 0 - endif - if synname =~? '^javaScript' - let b:InPHPcode_and_script = 1 - endif + if !b:InPHPcode_checked " {{{ One time check + let b:InPHPcode_checked = 1 - else - let b:InPHPcode = 0 - let b:UserIsTypingComment = 0 + let synname = IslinePHP (prevnonblank(v:lnum), "") - let lnum = v:lnum - 1 - while getline(lnum) !~? '<<<\a\w*$' && lnum > 1 - let lnum = lnum - 1 - endwhile + if synname!="" + if synname != "phpHereDoc" + let b:InPHPcode = 1 + let b:InPHPcode_tofind = "" - let b:InPHPcode_tofind = substitute( getline(lnum), '^.*<<<\(\a\w*\)\c', '^\\s*\1;$', '') - endif - else " IslinePHP returned "" => we are not in PHP or Javascript - let b:InPHPcode = 0 - let b:UserIsTypingComment = 0 - " Then we have to find a php start tag... - let b:InPHPcode_tofind = '<?\%(.*?>\)\@!\|<script.*>' + if synname == "phpComment" + let b:UserIsTypingComment = 1 + else + let b:UserIsTypingComment = 0 endif - endif "!b:InPHPcode_checked }}} - - - let lnum = prevnonblank(v:lnum - 1) - let last_line = getline(lnum) - - if b:InPHPcode_tofind!="" - if cline =~? b:InPHPcode_tofind - let b:InPHPcode = 1 - let b:InPHPcode_tofind = "" - let b:UserIsTypingComment = 0 - if cline =~ '\*/' " End comment tags must be indented like start comment tags - call cursor(v:lnum, 1) - call search('\*/\zs', 'W') - let lnum = searchpair('/\*', '', '\*/\zs', s:searchpairflags) " find the most outside /* - - 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 - - if cline =~ '^\s*\*/' - return indent(lnum) + 1 - else - return indent(lnum) - endif - - elseif cline =~? '<script\>' " a more accurate test is useless since there isn't any other possibility - let b:InPHPcode_and_script = 1 - endif + + if synname =~? '^javaScript' + let b:InPHPcode_and_script = 1 endif - endif + else + let b:InPHPcode = 0 + let b:UserIsTypingComment = 0 - if b:InPHPcode + let lnum = v:lnum - 1 + while getline(lnum) !~? '<<<\a\w*$' && lnum > 1 + let lnum = lnum - 1 + endwhile - if !b:InPHPcode_and_script && last_line =~ '\%(<?.*\)\@<!?>\%(.*<?\)\@!' && IslinePHP(lnum, '?>')=="Delimiter" - if cline !~? s:PHP_startindenttag - let b:InPHPcode = 0 - let b:InPHPcode_tofind = s:PHP_startindenttag - elseif cline =~? '<script\>' - let b:InPHPcode_and_script = 1 - endif + let b:InPHPcode_tofind = substitute( getline(lnum), '^.*<<<\(\a\w*\)\c', '^\\s*\1;$', '') + endif + else + let b:InPHPcode = 0 + let b:UserIsTypingComment = 0 + let b:InPHPcode_tofind = '<?\%(.*?>\)\@!\|<script.*>' + endif + endif "!b:InPHPcode_checked }}} - elseif last_line =~? '<<<\a\w*$' - 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 - let b:InPHPcode = 0 - let b:InPHPcode_tofind = '\*/' + " Test if we are indenting PHP code {{{ + let lnum = prevnonblank(v:lnum - 1) + let last_line = getline(lnum) - elseif cline =~? '^\s*</script>' - let b:InPHPcode = 0 - let b:InPHPcode_tofind = s:PHP_startindenttag + if b:InPHPcode_tofind!="" + if cline =~? b:InPHPcode_tofind + let b:InPHPcode = 1 + let b:InPHPcode_tofind = "" + let b:UserIsTypingComment = 0 + if cline =~ '\*/' + call cursor(v:lnum, 1) + if cline !~ '^\*/' + call search('\*/', 'W') endif - endif " }}} - - if !b:InPHPcode && !b:InPHPcode_and_script - return -1 - endif + let lnum = searchpair('/\*', '', '\*/', s:searchpairflags) + let b:PHP_CurrentIndentLevel = b:PHP_default_indenting - " 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 - endif - let b:PHP_LastIndentedWasComment = 1 - else let b:PHP_LastIndentedWasComment = 0 - endif - " }}} - - " Indent multiline /* comments correctly {{{ - - - if b:PHP_InsideMultilineComment || b:UserIsTypingComment - if cline =~ '^\s*\*\%(\/\)\@!' " if cline == '*' - if last_line =~ '^\s*/\*' " if last_line == '/*' - return indent(lnum) + 1 - else - return indent(lnum) - endif + + if cline =~ '^\s*\*/' + return indent(lnum) + 1 else - let b:PHP_InsideMultilineComment = 0 + return indent(lnum) endif - endif - - if !b:PHP_InsideMultilineComment && cline =~ '^\s*/\*' " if cline == '/*' - let b:PHP_InsideMultilineComment = 1 - return -1 - endif - " }}} - if cline =~# '^\s*<?' && cline !~ '?>' " Added the ^\s* part in version 1.03 - return 0 + elseif cline =~? '<script\>' + let b:InPHPcode_and_script = 1 + endif endif + endif - if cline =~ '^\s*?>' && cline !~# '<?' - return 0 - endif + if b:InPHPcode - if cline =~? '^\s*\a\w*;$' && cline !~? s:notPhpHereDoc - return 0 - endif - " }}} + if !b:InPHPcode_and_script && last_line =~ '\%(<?.*\)\@<!?>\%(.*<?\)\@!' && IslinePHP(lnum, '?>')=="Delimiter" + if cline !~? s:PHP_startindenttag + let b:InPHPcode = 0 + let b:InPHPcode_tofind = s:PHP_startindenttag + elseif cline =~? '<script\>' + let b:InPHPcode_and_script = 1 + endif - let s:level = 0 + elseif last_line =~? '<<<\a\w*$' + let b:InPHPcode = 0 + let b:InPHPcode_tofind = substitute( last_line, '^.*<<<\(\a\w*\)\c', '^\\s*\1;$', '') - let lnum = GetLastRealCodeLNum(v:lnum - 1) - let last_line = getline(lnum) " last line - let ind = indent(lnum) " by default - let endline= s:endline + elseif !UserIsEditing && cline =~ '^\s*/\*\%(.*\*/\)\@!' && getline(v:lnum + 1) !~ '^\s*\*' + let b:InPHPcode = 0 + let b:InPHPcode_tofind = '\*/' - if ind==0 && b:PHP_default_indenting - let ind = b:PHP_default_indenting + elseif cline =~? '^\s*</script>' + let b:InPHPcode = 0 + let b:InPHPcode_tofind = s:PHP_startindenttag endif + endif " }}} + + if !b:InPHPcode && !b:InPHPcode_and_script + return -1 + endif + - if lnum == 0 - return b:PHP_default_indenting + " Indent successive // or # comment the same way the first is {{{ + if cline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)' + if b:PHP_LastIndentedWasComment == 1 + return indent(real_PHP_lastindented) endif + let b:PHP_LastIndentedWasComment = 1 + else + let b:PHP_LastIndentedWasComment = 0 + endif " }}} + " Indent multiline /* comments correctly {{{ - if cline =~ '^\s*}\%(}}\)\@!' - let ind = indent(FindOpenBracket(v:lnum)) - let b:PHP_CurrentIndentLevel = b:PHP_default_indenting - return ind + if b:PHP_InsideMultilineComment || b:UserIsTypingComment + if cline =~ '^\s*\*\%(\/\)\@!' + if last_line =~ '^\s*/\*' + return indent(lnum) + 1 + else + return indent(lnum) + endif + else + let b:PHP_InsideMultilineComment = 0 endif + endif - if cline =~ '^\s*\*/' " End comment tags must be indented like start comment tags - call cursor(v:lnum, 1) - call search('\*/\zs', 'W') - let lnum = searchpair('/\*', '', '\*/\zs', s:searchpairflags) " find the most outside /* + if !b:PHP_InsideMultilineComment && cline =~ '^\s*/\*' + let b:PHP_InsideMultilineComment = 1 + return -1 + endif " }}} - let b:PHP_CurrentIndentLevel = b:PHP_default_indenting - if cline =~ '^\s*\*/' - return indent(lnum) + 1 - else - return indent(lnum) - endif - endif + " Things always indented at col 1 (PHP delimiter: <?, ?>, Heredoc end) {{{ + if cline =~# '^\s*<?' && cline !~ '?>' + return 0 + endif - let defaultORcase = '^\s*\%(default\|case\).*:' + if cline =~ '^\s*?>' && cline !~# '<?' + return 0 + endif - if last_line =~ '[;}]'.endline && last_line !~# defaultORcase - if ind==b:PHP_default_indenting " if no indentation for the previous line - 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 + if cline =~? '^\s*\a\w*;$' && cline !~? s:notPhpHereDoc + return 0 + endif " }}} + + let s:level = 0 + + let lnum = GetLastRealCodeLNum(v:lnum - 1) + let last_line = getline(lnum) + let ind = indent(lnum) + let endline= s:endline + + if ind==0 && b:PHP_default_indenting + let ind = b:PHP_default_indenting + endif + + if lnum == 0 + return b:PHP_default_indenting + endif + + + if cline =~ '^\s*}\%(}}\)\@!' + let ind = indent(FindOpenBracket(v:lnum)) + let b:PHP_CurrentIndentLevel = b:PHP_default_indenting + return ind + endif + + if cline =~ '^\s*\*/' + call cursor(v:lnum, 1) + if cline !~ '^\*/' + call search('\*/', 'W') endif + let lnum = searchpair('/\*', '', '\*/', s:searchpairflags) - let LastLineClosed = 0 " used to prevent redundant tests in the last part of the script + let b:PHP_CurrentIndentLevel = b:PHP_default_indenting - let terminated = '\%(;\%(\s*?>\)\=\|<<<\a\w*\|}\)'.endline + if cline =~ '^\s*\*/' + return indent(lnum) + 1 + else + return indent(lnum) + endif + endif - let unstated = '\%(^\s*'.s:blockstart.'.*)\|\%(//.*\)\@<!\<e'.'lse\>\)'.endline + let defaultORcase = '^\s*\%(default\|case\).*:' - 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 - return indent(FindTheIfOfAnElse(v:lnum, 1)) - elseif last_line =~# unstated && cline !~ '^\s*{\|^\s*);\='.endline - let ind = ind + &sw - return ind + if last_line =~ '[;}]'.endline && last_line !~# defaultORcase + 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 - elseif ind != b:PHP_default_indenting && last_line =~ terminated - let previous_line = last_line - let last_line_num = lnum - let LastLineClosed = 1 + let terminated = '\%(;\%(\s*?>\)\=\|<<<\a\w*\|}\)'.endline + let unstated = '\%(^\s*'.s:blockstart.'.*)\|\%(//.*\)\@<!\<e'.'lse\>\)'.endline - while 1 - if previous_line =~ '^\s*}' - let last_line_num = FindOpenBracket(last_line_num) + if ind != b:PHP_default_indenting && cline =~# '^\s*else\%(if\)\=\>' + 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 - if getline(last_line_num) =~ '^\s*{' - let last_line_num = GetLastRealCodeLNum(last_line_num - 1) - endif + while last_line_num > 1 - let previous_line = getline(last_line_num) + if previous_line =~ '^\s*\%(' . s:blockstart . '\|\%([a-zA-Z]\s*\)*function\)' && previous_line !~ '^\s*[|&]' - 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) - endif + let ind = indent(last_line_num) + if b:PHP_BracesAtCodeLevel + let ind = ind + &sw + endif - let last_match = last_line_num " remember the 'topest' line we found so far + return ind + endif - let one_ahead_indent = indent(last_line_num) - let last_line_num = GetLastRealCodeLNum(last_line_num - 1) - let two_ahead_indent = indent(last_line_num) - let after_previous_line = previous_line - let previous_line = getline(last_line_num) + 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 - if previous_line =~# defaultORcase.'\|{'.endline - break - endif + elseif ind != b:PHP_default_indenting && last_line =~ terminated + let previous_line = last_line + let last_line_num = lnum + let LastLineClosed = 1 - if after_previous_line=~# '^\s*'.s:blockstart.'.*)'.endline && previous_line =~# '[;}]'.endline - break - endif + while 1 + if previous_line =~ '^\s*}' + let last_line_num = FindOpenBracket(last_line_num) - if one_ahead_indent == two_ahead_indent || last_line_num < 1 - if previous_line =~# '[;}]'.endline || last_line_num < 1 - break - endif - endif - endif - endwhile + if getline(last_line_num) =~ '^\s*{' + let last_line_num = GetLastRealCodeLNum(last_line_num - 1) + endif - 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 + let previous_line = getline(last_line_num) - if cline =~# defaultORcase - let ind = ind - &sw - endif - return ind + continue + else + + if getline(last_line_num) =~# '^\s*else\%(if\)\=\>' + let last_line_num = FindTheIfOfAnElse(last_line_num, 0) + continue endif - endif - let plinnum = GetLastRealCodeLNum(lnum - 1) - let pline = getline(plinnum) " previous to last line - let last_line = substitute(last_line,"\\(//\\|#\\)\\(\\(\\([^\"']*\\([\"']\\)[^\"']*\\5\\)\\+[^\"']*$\\)\\|\\([^\"']*$\\)\\)",'','') + let last_match = last_line_num + let one_ahead_indent = indent(last_line_num) + let last_line_num = GetLastRealCodeLNum(last_line_num - 1) + let two_ahead_indent = indent(last_line_num) + let after_previous_line = previous_line + let previous_line = getline(last_line_num) - if ind == b:PHP_default_indenting - if last_line =~ terminated - let LastLineClosed = 1 + + if previous_line =~# defaultORcase.'\|{'.endline + break endif - endif - - if !LastLineClosed " the last line isn't a .*; or a }$ line - if last_line =~# '[{(]'.endline || last_line =~? '\h\w*\s*(.*,$' && pline !~ '[,(]'.endline - - if !b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{' " XXX mod { - let ind = ind + &sw - endif - - if b:PHP_BracesAtCodeLevel || cline !~# defaultORcase " XXX mod (2) { - " case and default are not indented inside blocks - let b:PHP_CurrentIndentLevel = ind - return ind - endif - - elseif last_line =~ '\S\+\s*),'.endline - call cursor(lnum, 1) - call search('),'.endline, 'W') - let openedparent = searchpair('(', '', ')', 'bW', 'Skippmatch()') - if openedparent != lnum - let ind = indent(openedparent) - endif - - elseif cline !~ '^\s*{' && pline =~ '\%(;\%(\s*?>\)\=\|<<<\a\w*\|{\|^\s*'.s:blockstart.'\s*(.*)\)'.endline.'\|^\s*}\|'.defaultORcase - - let ind = ind + &sw + if after_previous_line=~# '^\s*'.s:blockstart.'.*)'.endline && previous_line =~# '[;}]'.endline + break endif - if b:PHP_BracesAtCodeLevel && cline =~# '^\s*{' " XXX mod { - let ind = ind + &sw + + if one_ahead_indent == two_ahead_indent || last_line_num < 1 + if previous_line =~# '[;}]'.endline || last_line_num < 1 + break + endif endif + endif + endwhile - elseif last_line =~# defaultORcase - let ind = ind + &sw - endif + if indent(last_match) != ind + let ind = indent(last_match) + let b:PHP_CurrentIndentLevel = b:PHP_default_indenting - if cline =~ '^\s*);\=' + if cline =~# defaultORcase let ind = ind - &sw - elseif cline =~# defaultORcase - let ind = ind - &sw - + endif + return ind endif + endif - let b:PHP_CurrentIndentLevel = ind - return ind + let plinnum = GetLastRealCodeLNum(lnum - 1) + let pline = getline(plinnum) + + let last_line = substitute(last_line,"\\(//\\|#\\)\\(\\(\\([^\"']*\\([\"']\\)[^\"']*\\5\\)\\+[^\"']*$\\)\\|\\([^\"']*$\\)\\)",'','') + + + if ind == b:PHP_default_indenting + if last_line =~ terminated + let LastLineClosed = 1 + endif + endif + + if !LastLineClosed + + if last_line =~# '[{(]'.endline || last_line =~? '\h\w*\s*(.*,$' && pline !~ '[,(]'.endline + + if !b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{' + let ind = ind + &sw + endif + + if b:PHP_BracesAtCodeLevel || cline !~# defaultORcase + let b:PHP_CurrentIndentLevel = ind + return ind + endif + + elseif last_line =~ '\S\+\s*),'.endline + call cursor(lnum, 1) + call search('),'.endline, 'W') + let openedparent = searchpair('(', '', ')', 'bW', 'Skippmatch()') + if openedparent != lnum + let ind = indent(openedparent) + endif + + + elseif cline !~ '^\s*{' && pline =~ '\%(;\%(\s*?>\)\=\|<<<\a\w*\|{\|^\s*'.s:blockstart.'\s*(.*)\)'.endline.'\|^\s*}\|'.defaultORcase + + let ind = ind + &sw + + endif + + elseif last_line =~# defaultORcase + let ind = ind + &sw + endif + + if cline =~ '^\s*);\=' + let ind = ind - &sw + elseif cline =~# defaultORcase + let ind = ind - &sw + + endif + + let b:PHP_CurrentIndentLevel = ind + return ind endfunction -" vim: set ts=4 sw=4: -" vim: set ff=unix: +" vim: set ts=8 sw=4 sts=4: diff --git a/runtime/indent/ruby.vim b/runtime/indent/ruby.vim index ff22bbb41..e5946ebc8 100644 --- a/runtime/indent/ruby.vim +++ b/runtime/indent/ruby.vim @@ -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: diff --git a/runtime/indent/sml.vim b/runtime/indent/sml.vim new file mode 100644 index 000000000..30d3108a6 --- /dev/null +++ b/runtime/indent/sml.vim @@ -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 diff --git a/runtime/plugin/NetrwPlugin.vim b/runtime/plugin/NetrwPlugin.vim index 42bdbd9b1..8013c8fdc 100644 --- a/runtime/plugin/NetrwPlugin.vim +++ b/runtime/plugin/NetrwPlugin.vim @@ -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>) diff --git a/runtime/plugin/NetrwSettings.vim b/runtime/plugin/NetrwSettings.vim index 7d8089cc4..eecdcd234 100644 --- a/runtime/plugin/NetrwSettings.vim +++ b/runtime/plugin/NetrwSettings.vim @@ -1,7 +1,7 @@ " 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 +" Version: 3 " Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1 " Permission is hereby granted to use and distribute this code, " with or without modifications, provided that this copyright diff --git a/runtime/spell/en.ascii.spl b/runtime/spell/en.ascii.spl Binary files differindex c6ebea958..0715e555b 100644 --- a/runtime/spell/en.ascii.spl +++ b/runtime/spell/en.ascii.spl diff --git a/runtime/spell/en.latin1.spl b/runtime/spell/en.latin1.spl Binary files differindex fe6b90e7d..6d4fe5f81 100644 --- a/runtime/spell/en.latin1.spl +++ b/runtime/spell/en.latin1.spl diff --git a/runtime/spell/en.utf-8.spl b/runtime/spell/en.utf-8.spl Binary files differindex 46ef9a5c8..d3cd823a1 100644 --- a/runtime/spell/en.utf-8.spl +++ b/runtime/spell/en.utf-8.spl diff --git a/runtime/syntax/ruby.vim b/runtime/syntax/ruby.vim index 0a00dfc5b..aba869763 100644 --- a/runtime/syntax/ruby.vim +++ b/runtime/syntax/ruby.vim @@ -79,10 +79,10 @@ syn region rubySymbol start=":\@<!:\"" end="\"" skip="\\\\\|\\\"" syn match rubyBlockParameter "\%(\%(\<do\>\|{\)\s*\)\@<=|\s*\zs[( ,a-zA-Z0-9_*)]\+\ze\s*|" display 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 "$_\>" display +syn match rubyPredefinedVariable "$-[0FIKadilpvw]\>" display +syn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>" 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 |