# HG changeset patch # User Bram Moolenaar # Date 1400776000 -7200 # Node ID 16d26051085abb3ec514be32c4165f962a898577 # Parent c263ad1094166095a684df1a80fc5ad2299f720c Runtime file updates. diff --git a/runtime/autoload/netrw.vim b/runtime/autoload/netrw.vim --- a/runtime/autoload/netrw.vim +++ b/runtime/autoload/netrw.vim @@ -1,7 +1,7 @@ " netrw.vim: Handles file transfer and remote directory listing across " AUTOLOAD SECTION -" Date: Mar 20, 2014 -" Version: 151 +" Date: May 13, 2014 +" Version: 152 " Maintainer: Charles E Campbell " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim " Copyright: Copyright (C) 1999-2013 Charles E. Campbell {{{1 @@ -22,7 +22,14 @@ if &cp || exists("g:loaded_netrw") finish endif -let g:loaded_netrw = "v151" +if v:version < 704 || !has("patch213") + if !exists("s:needpatch213") + echo "***sorry*** this version of netrw requires vim v7.4 with patch 213" + endif + let s:needpatch213= 1 + finish +endif +let g:loaded_netrw = "v152" if !exists("s:NOTE") let s:NOTE = 0 let s:WARNING = 1 @@ -44,7 +51,7 @@ setl cpo&vim " 0=note = s:NOTE " 1=warning = s:WARNING " 2=error = s:ERROR -" Mar 04, 2014 : max errnum currently is 96 +" Apr 16, 2014 : max errnum currently is 97 fun! netrw#ErrorMsg(level,msg,errnum) " call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow) @@ -100,7 +107,7 @@ fun! netrw#ErrorMsg(level,msg,errnum) hi link netrwMesgError Error endif " call Decho("setl noma ro bh=wipe") - setl noma ro bh=wipe + setl ro nomod noma bh=wipe else " (optional) netrw will show messages using echomsg. Even if the @@ -245,7 +252,7 @@ call s:NetrwInit("g:netrw_alto" , call s:NetrwInit("g:netrw_altv" , &spr) call s:NetrwInit("g:netrw_banner" , 1) call s:NetrwInit("g:netrw_browse_split", 0) -call s:NetrwInit("g:netrw_bufsettings" , "noma nomod nonu nobl nowrap ro") +call s:NetrwInit("g:netrw_bufsettings" , "noma nomod nonu nobl nowrap ro nornu") call s:NetrwInit("g:netrw_chgwin" , -1) call s:NetrwInit("g:netrw_compress" , "gzip") call s:NetrwInit("g:netrw_ctags" , "ctags") @@ -316,7 +323,7 @@ if !exists("g:netrw_localcopycmd") if g:netrw_cygwin let g:netrw_localcopycmd= "cp" else - let g:netrw_localcopycmd= "cmd /c copy" + let g:netrw_localcopycmd= expand("$COMSPEC")." /c copy" endif elseif has("unix") || has("macunix") let g:netrw_localcopycmd= "cp" @@ -328,7 +335,15 @@ if exists("g:netrw_local_mkdir") let g:netrw_localmkdir= g:netrw_local_mkdir call netrw#ErrorMsg(s:NOTE,"g:netrw_local_mkdir is deprecated in favor of g:netrw_localmkdir",87) endif -call s:NetrwInit("g:netrw_localmkdir","mkdir") +if has("win32") || has("win95") || has("win64") || has("win16") + if g:netrw_cygwin + call s:NetrwInit("g:netrw_localmkdir","mkdir") + else + let g:netrw_localmkdir= expand("$COMSPEC")." /c mkdir" + endif +else + call s:NetrwInit("g:netrw_localmkdir","mkdir") +endif call s:NetrwInit("g:netrw_remote_mkdir","mkdir") if exists("g:netrw_local_movecmd") let g:netrw_localmovecmd= g:netrw_local_movecmd @@ -339,7 +354,7 @@ if !exists("g:netrw_localmovecmd") if g:netrw_cygwin let g:netrw_localmovecmd= "mv" else - let g:netrw_localmovecmd= "cmd /c move" + let g:netrw_localmovecmd= expand("$COMSPEC")." /c move" endif elseif has("unix") || has("macunix") let g:netrw_localmovecmd= "mv" @@ -347,11 +362,19 @@ if !exists("g:netrw_localmovecmd") let g:netrw_localmovecmd= "" endif endif -call s:NetrwInit("g:netrw_localrmdir", "rmdir") if exists("g:netrw_local_rmdir") let g:netrw_localrmdir= g:netrw_local_rmdir call netrw#ErrorMsg(s:NOTE,"g:netrw_local_rmdir is deprecated in favor of g:netrw_localrmdir",86) endif +if has("win32") || has("win95") || has("win64") || has("win16") + if g:netrw_cygwin + call s:NetrwInit("g:netrw_localrmdir","rmdir") + else + let g:netrw_localrmdir= expand("$COMSPEC")." /c rmdir" + endif +else + call s:NetrwInit("g:netrw_localrmdir","rmdir") +endif call s:NetrwInit("g:netrw_liststyle" , s:THINLIST) " sanity checks if g:netrw_liststyle < 0 || g:netrw_liststyle >= s:MAXLIST @@ -423,7 +446,6 @@ endif call s:NetrwInit("g:NetrwTopLvlMenu","Netrw.") call s:NetrwInit("g:netrw_win95ftp",1) call s:NetrwInit("g:netrw_winsize",50) -if g:netrw_winsize == 0|let g:netrw_winsize= -1|endif if g:netrw_winsize > 100|let g:netrw_winsize= 100|endif " --------------------------------------------------------------------- " Default values for netrw's script variables: {{{2 @@ -583,37 +605,50 @@ fun! netrw#Explore(indx,dosplit,style,.. if a:style == 0 " Explore, Sexplore " call Decho("style=0: Explore or Sexplore") let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz - exe winsz."wincmd s" + if winsz == 0|let winsz= ""|endif + exe "noswapfile ".winsz."wincmd s" +" call Decho("exe noswapfile ".winsz."wincmd s") elseif a:style == 1 "Explore!, Sexplore! " call Decho("style=1: Explore! or Sexplore!") let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz - exe "keepalt ".winsz."wincmd v" + if winsz == 0|let winsz= ""|endif + exe "keepalt noswapfile ".winsz."wincmd v" +" call Decho("exe keepalt noswapfile ".winsz."wincmd v") elseif a:style == 2 " Hexplore " call Decho("style=2: Hexplore") let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz - exe "keepalt bel ".winsz."wincmd s" + if winsz == 0|let winsz= ""|endif + exe "keepalt noswapfile bel ".winsz."wincmd s" +" call Decho("exe keepalt noswapfile bel ".winsz."wincmd s") elseif a:style == 3 " Hexplore! " call Decho("style=3: Hexplore!") let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz - exe "keepalt abo ".winsz."wincmd s" + if winsz == 0|let winsz= ""|endif + exe "keepalt noswapfile abo ".winsz."wincmd s" +" call Decho("exe keepalt noswapfile abo ".winsz."wincmd s") elseif a:style == 4 " Vexplore " call Decho("style=4: Vexplore") let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz - exe "keepalt lefta ".winsz."wincmd v" + if winsz == 0|let winsz= ""|endif + exe "keepalt noswapfile lefta ".winsz."wincmd v" +" call Decho("exe keepalt noswapfile lefta ".winsz."wincmd v") elseif a:style == 5 " Vexplore! " call Decho("style=5: Vexplore!") let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz - exe "keepalt rightb ".winsz."wincmd v" + if winsz == 0|let winsz= ""|endif + exe "keepalt noswapfile rightb ".winsz."wincmd v" +" call Decho("exe keepalt noswapfile rightb ".winsz."wincmd v") elseif a:style == 6 " Texplore call s:SaveBufVars() " call Decho("style = 6: Texplore") exe "keepalt tabnew ".fnameescape(curdir) +" call Decho("exe keepalt tabnew ".fnameescape(curdir)) call s:RestoreBufVars() endif call s:RestoreWinVars() @@ -1335,8 +1370,29 @@ fun! netrw#Obtain(islocal,fname,...) keepj call netrw#ErrorMsg(s:ERROR,getline(1),5) endif endif + + elseif b:netrw_method == 9 + " obtain file using sftp +" call Decho("obtain via sftp (method #9)") + if a:fname =~ '/' + let localfile= substitute(a:fname,'^.*/','','') + else + let localfile= a:fname + endif +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1).shellescape(localfile)." ".shellescape(tgtdir)) + exe s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1).shellescape(localfile)." ".shellescape(tgtdir) + elseif !exists("b:netrw_method") || b:netrw_method < 0 -" call Dfunc("netrw#Obtain : unsupported method") + " probably a badly formed url; protocol not recognized +" call Dret("netrw#Obtain : unsupported method") + return + + else + " protocol recognized but not supported for Obtain (yet?) + if !exists("g:netrw_quiet") + keepj call netrw#ErrorMsg(s:ERROR,"current protocol not supported for obtaining file",97) + endif +" call Dret("netrw#Obtain : current protocol not supported for obtaining file") return endif @@ -1436,6 +1492,7 @@ fun! s:NetrwOptionRestore(vt) if exists("{a:vt}netrw_magickeep")|let &l:magic = {a:vt}netrw_magickeep |unlet {a:vt}netrw_magickeep|endif if exists("{a:vt}netrw_modkeep") |let &l:mod = {a:vt}netrw_modkeep |unlet {a:vt}netrw_modkeep |endif if exists("{a:vt}netrw_nukeep") |let &l:nu = {a:vt}netrw_nukeep |unlet {a:vt}netrw_nukeep |endif + if exists("{a:vt}netrw_rnukeep") |let &l:rnu = {a:vt}netrw_rnukeep |unlet {a:vt}netrw_rnukeep |endif if exists("{a:vt}netrw_repkeep") |let &l:report = {a:vt}netrw_repkeep |unlet {a:vt}netrw_repkeep |endif if exists("{a:vt}netrw_rokeep") |let &l:ro = {a:vt}netrw_rokeep |unlet {a:vt}netrw_rokeep |endif if exists("{a:vt}netrw_selkeep") |let &l:sel = {a:vt}netrw_selkeep |unlet {a:vt}netrw_selkeep |endif @@ -1532,7 +1589,7 @@ fun! s:NetrwOptionSave(vt) let {a:vt}netrw_awkeep = &l:aw let {a:vt}netrw_bhkeep = &l:bh let {a:vt}netrw_blkeep = &l:bl -" let {a:vt}netrw_btkeep = &l:bt + let {a:vt}netrw_btkeep = &l:bt let {a:vt}netrw_bombkeep = &l:bomb let {a:vt}netrw_cedit = &cedit let {a:vt}netrw_cikeep = &l:ci @@ -1542,7 +1599,9 @@ fun! s:NetrwOptionSave(vt) let {a:vt}netrw_cpokeep = &l:cpo let {a:vt}netrw_diffkeep = &l:diff let {a:vt}netrw_fenkeep = &l:fen - let {a:vt}netrw_ffkeep = &l:ff + if !exists("g:netrw_ffkeep") || g:netrw_ffkeep == 1 + let {a:vt}netrw_ffkeep = &l:ff + endif let {a:vt}netrw_fokeep = &l:fo " formatoptions let {a:vt}netrw_gdkeep = &l:gd " gdefault let {a:vt}netrw_hidkeep = &l:hidden @@ -1553,6 +1612,7 @@ fun! s:NetrwOptionSave(vt) let {a:vt}netrw_magickeep = &l:magic let {a:vt}netrw_modkeep = &l:mod let {a:vt}netrw_nukeep = &l:nu + let {a:vt}netrw_rnukeep = &l:rnu let {a:vt}netrw_repkeep = &l:report let {a:vt}netrw_rokeep = &l:ro let {a:vt}netrw_selkeep = &l:sel @@ -1973,7 +2033,7 @@ fun! netrw#NetRead(mode,...) endif let b:netrw_lastfile = choice " call Decho("setl ro") - setl ro + setl ro nomod "......................................... " NetRead: (dav) NetRead Method #6 {{{3 @@ -2052,7 +2112,7 @@ fun! netrw#NetRead(mode,...) let result = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method) let b:netrw_lastfile = choice " call Decho("setl ro") - setl ro + setl ro nomod "......................................... " NetRead: (sftp) NetRead Method #9 {{{3 @@ -3675,7 +3735,7 @@ fun! s:NetrwGetBuffer(islocal,dirname) " call Decho(" re-using w:netrw_treebufnr=".w:netrw_treebufnr) let eikeep= &ei setl ei=all - exe "sil! keepalt b ".w:netrw_treebufnr + exe "sil! noswapfile keepalt b ".w:netrw_treebufnr let &ei= eikeep setl ma sil! keepj %d @@ -3799,10 +3859,10 @@ fun! s:NetrwGetBuffer(islocal,dirname) setl ei=all if getline(2) =~ '^" Netrw Directory Listing' " call Decho(" getline(2)<".getline(2).'> matches "Netrw Directory Listing" : using keepalt b '.bufnum) - exe "sil! keepalt b ".bufnum + exe "sil! noswapfile keepalt b ".bufnum else " call Decho(" getline(2)<".getline(2).'> does not match "Netrw Directory Listing" : using b '.bufnum) - exe "sil! keepalt b ".bufnum + exe "sil! noswapfile keepalt b ".bufnum endif if bufname("%") == '.' " call Decho("exe sil! keepalt file ".fnameescape(getcwd())) @@ -3985,8 +4045,8 @@ fun! s:NetrwListSettings(islocal) " call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")") " call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) let fname= bufname("%") -" call Decho("(NetrwListSettings) setl bt=nofile nobl ma nonu nowrap noro") - setl bt=nofile nobl ma nonu nowrap noro +" " call Decho("(NetrwListSettings) setl bt=nofile nobl ma nonu nowrap noro nornu") + setl bt=nofile nobl ma nonu nowrap noro nornu " call Decho("(NetrwListSettings) exe sil! keepalt file ".fnameescape(fname)) exe "sil! keepalt file ".fnameescape(fname) if g:netrw_use_noswf @@ -4011,9 +4071,11 @@ endfun " =1: local browsing fun! s:NetrwListStyle(islocal) " call Dfunc("NetrwListStyle(islocal=".a:islocal.") w:netrw_liststyle=".w:netrw_liststyle) + let ykeep = @@ let fname = s:NetrwGetWord() if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif + let svpos = netrw#SavePosn() let w:netrw_liststyle = (w:netrw_liststyle + 1) % s:MAXLIST " call Decho("fname<".fname.">") " call Decho("chgd w:netrw_liststyle to ".w:netrw_liststyle) @@ -4057,18 +4119,11 @@ fun! s:NetrwListStyle(islocal) " refresh the listing " call Decho("refresh the listing") - let svpos= netrw#SavePosn() keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#RestorePosn(svpos) keepj call s:NetrwCursor() - " keep cursor on the filename - sil! keepj $ - let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc') -" call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A')) - if result <= 0 && exists("w:netrw_bannercnt") - exe "sil! keepj ".w:netrw_bannercnt - endif + " restore position; keep cursor on the filename + keepj call netrw#RestorePosn(svpos) let @@= ykeep " call Dret("NetrwListStyle".(exists("w:netrw_liststyle")? ' : w:netrw_liststyle='.w:netrw_liststyle : "")) @@ -4198,6 +4253,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir, endif let newdir = a:newdir let dolockout = 0 + let dorestore = 1 " call Decho("dirname<".dirname.">") " ignore s when done in the banner @@ -4208,7 +4264,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir, " call Decho("#1: quickhelp=".g:netrw_quickhelp." ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") let g:netrw_quickhelp= (g:netrw_quickhelp + 1)%len(s:QuickHelp) " call Decho("#2: quickhelp=".g:netrw_quickhelp." ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") - setl noro ma nowrap + setl ma noro nowrap keepj call setline(line('.'),'" Quick Help: :help '.s:QuickHelp[g:netrw_quickhelp]) setl noma nomod nowrap keepj call netrw#RestorePosn(nbcd_curpos) @@ -4300,6 +4356,14 @@ fun! s:NetrwBrowseChgDir(islocal,newdir, call s:NetrwMenu(0) " optional change to window if g:netrw_chgwin >= 1 + if winnr("$")+1 == g:netrw_chgwin + " if g:netrw_chgwin is set to one more than the last window, then + " vertically split the last window to make that window available. + let curwin= winnr() + exe "keepj keepalt ".g:netrw_chgwin."wincmd ".winnr("$") + vs + exe "keepj keepalt ".g:netrw_chgwin."wincmd ".curwin + endif exe "keepj keepalt ".g:netrw_chgwin."wincmd w" endif endif @@ -4317,11 +4381,18 @@ fun! s:NetrwBrowseChgDir(islocal,newdir, else exe "keepj e! ".fnameescape(dirname) endif +" call Decho("after e! ".dirname.": hidden=".&hidden." bufhidden<".&bufhidden."> mod=".&mod) call s:NetrwCursor() +" call Decho("COMBAK#1: after e! ".dirname.": hidden=".&hidden." bufhidden<".&bufhidden."> mod=".&mod) + if &hidden || &bufhidden == "hide" + " file came from vim's hidden storage. Don't "restore" options with it. + let dorestore= 0 + endif else " call Decho("edit-a-file: remote file: NetrwBrowse will edit it") endif let dolockout= 1 +" call Decho("COMBAK#2: after e! ".dirname.": hidden=".&hidden." bufhidden<".&bufhidden."> mod=".&mod) " handle g:Netrw_funcref -- call external-to-netrw functions " This code will handle g:Netrw_funcref as an individual function reference @@ -4488,21 +4559,31 @@ fun! s:NetrwBrowseChgDir(islocal,newdir, " -------------------------------------- " NetrwBrowseChgDir: Restore and Cleanup {{{3 " -------------------------------------- - keepj call s:NetrwOptionRestore("s:") - if dolockout +" call Decho("COMBAK#3: after e! ".dirname.": hidden=".&hidden." bufhidden<".&bufhidden."> mod=".&mod) + if dorestore + " dorestore is zero'd when a local file was hidden or bufhidden; + " in such a case, we want to keep whatever settings it may have. +" call Decho("doing option restore (dorestore=".dorestore.")") + keepj call s:NetrwOptionRestore("s:") +" else " Decho +" call Decho("skipping option restore (dorestore==0): hidden=".&hidden." bufhidden=".&bufhidden." mod=".&mod) + endif +" call Decho("COMBAK#4: after e! ".dirname.": hidden=".&hidden." bufhidden<".&bufhidden."> mod=".&mod) + if dolockout && dorestore " call Decho("restore: filewritable(dirname<".dirname.">)=".filewritable(dirname)) if filewritable(dirname) " call Decho("restore: doing modification lockout settings: ma nomod noro") " call Decho("restore: setl ma nomod noro") - setl ma nomod noro + setl ma noro nomod " call Decho("restore: ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") else " call Decho("restore: doing modification lockout settings: ma nomod ro") " call Decho("restore: setl ma nomod noro") - setl ma nomod ro + setl ma ro nomod " call Decho("restore: ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") endif endif +" call Decho("COMBAK#5: after e! ".dirname.": hidden=".&hidden." bufhidden<".&bufhidden."> mod=".&mod) let @@= ykeep " call Dret("s:NetrwBrowseChgDir <".dirname."> : curpos<".string(getpos(".")).">") @@ -5368,7 +5449,7 @@ fun! s:NetrwMaps(islocal) nnoremap a :call NetrwHide(1) nnoremap % :call NetrwOpenFile(1) nnoremap c :call NetrwLcd(b:netrw_curdir) - nnoremap C :let g:netrw_chgwin= winnr() + nnoremap C :call NetrwSetChgwin() nnoremap :call netrw#LocalBrowseCheck(NetrwBrowseChgDir(1,NetrwGetWord())) nnoremap :call TreeSqueezeDir(1) nnoremap d :call NetrwMakeDir("") @@ -5421,7 +5502,7 @@ fun! s:NetrwMaps(islocal) inoremap a :call NetrwHide(1) inoremap c :exe "keepjumps lcd ".fnameescape(b:netrw_curdir) inoremap c :call NetrwLcd(b:netrw_curdir) - inoremap C :let g:netrw_chgwin= winnr() + inoremap C :call NetrwSetChgwin() inoremap % :call NetrwOpenFile(1) inoremap - :call NetrwBrowseUpDir(1) inoremap :call netrw#LocalBrowseCheck(NetrwBrowseChgDir(1,NetrwGetWord())) @@ -5552,7 +5633,7 @@ fun! s:NetrwMaps(islocal) nnoremap gf :call NetrwForceFile(0,NetrwGetWord()) nnoremap gh :call NetrwHidden(0) nnoremap gp :call NetrwChgPerm(0,b:netrw_curdir) - nnoremap C :let g:netrw_chgwin= winnr() + nnoremap C :call NetrwSetChgwin() nnoremap i :call NetrwListStyle(0) nnoremap I :call NetrwBannerCtrl(1) nnoremap o :call NetrwSplit(0) @@ -5600,7 +5681,7 @@ fun! s:NetrwMaps(islocal) inoremap gb :call NetrwBookHistHandler(1,b:netrw_curdir) inoremap gh :call NetrwHidden(0) inoremap gp :call NetrwChgPerm(0,b:netrw_curdir) - inoremap C :let g:netrw_chgwin= winnr() + inoremap C :call NetrwSetChgwin() inoremap i :call NetrwListStyle(0) inoremap I :call NetrwBannerCtrl(1) inoremap o :call NetrwSplit(0) @@ -5972,7 +6053,7 @@ fun! s:NetrwMarkFileCopy(islocal,...) if a:islocal && s:netrwmftgt_islocal " Copy marked files, local directory to local directory " call Decho("copy from local to local") - if !executable(g:netrw_localcopycmd) && g:netrw_localcopycmd !~ '\ not executable on your system, aborting",91) " call Dfunc("s:NetrwMarkFileMove : g:netrw_localcopycmd<".g:netrw_localcopycmd."> n/a!") return @@ -6545,7 +6626,7 @@ fun! s:NetrwMarkFileMove(islocal) " move: local -> local " call Decho("move from local to local") " call Decho("local to local move") - if !executable(g:netrw_localmovecmd) && g:netrw_localmovecmd !~ '\ not executable on your system, aborting",90) " call Dfunc("s:NetrwMarkFileMove : g:netrw_localmovecmd<".g:netrw_localmovecmd."> n/a!") return @@ -7487,13 +7568,14 @@ endfun fun! s:NetrwRefresh(islocal,dirname) " call Dfunc("NetrwRefresh(islocal<".a:islocal.">,dirname=".a:dirname.") hide=".g:netrw_hide." sortdir=".g:netrw_sort_direction) " at the current time (Mar 19, 2007) all calls to NetrwRefresh() call NetrwBrowseChgDir() first. - " (defunct) NetrwBrowseChgDir() may clear the display; hence a NetrwSavePosn() may not work if its placed here. - " (defunct) Also, NetrwBrowseChgDir() now does a NetrwSavePosn() itself. setl ma noro " call Decho("setl ma noro") " call Decho("clear buffer<".expand("%")."> with :%d") let ykeep = @@ + + " save the cursor position before refresh. let screenposn = netrw#SavePosn() +" call Decho("win#".winnr().": ".winheight(0)."x".winwidth(0)." curfile<".expand("%").">") " call Decho("clearing buffer prior to refresh") sil! keepj %d if a:islocal @@ -7501,6 +7583,8 @@ fun! s:NetrwRefresh(islocal,dirname) else keepj call s:NetrwBrowse(a:islocal,a:dirname) endif + + " restore position keepj call netrw#RestorePosn(screenposn) " restore file marks @@ -7551,6 +7635,21 @@ fun! s:NetrwRefreshDir(islocal,dirname) endfun " --------------------------------------------------------------------- +" s:NetrwSetChgwin: set g:netrw_chgwin; a will use the specified +" window number to do its editing in. +" Supports [count]C where the count, if present, is used to specify +" a window to use for editing via the mapping. +fun! s:NetrwSetChgwin() +" call Dfunc("s:NetrwSetChgwin() v:count=".v:count) + if v:count > 0 + let g:netrw_chgwin= v:count + else + let g:netrw_chgwin= winnr() + endif +" call Dret("s:NetrwSetChgwin") +endfun + +" --------------------------------------------------------------------- " s:NetrwSetSort: sets up the sort based on the g:netrw_sort_sequence {{{2 " What this function does is to compute a priority for the patterns " in the g:netrw_sort_sequence. It applies a substitute to any @@ -7687,6 +7786,7 @@ fun! s:NetrwSplit(mode) if a:mode == 0 " remote and o let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winheight(0))/100 : -g:netrw_winsize + if winsz == 0|let winsz= ""|endif " call Decho("exe ".(g:netrw_alto? "bel " : "abo ").winsz."wincmd s") exe (g:netrw_alto? "bel " : "abo ").winsz."wincmd s" let s:didsplit= 1 @@ -7707,6 +7807,7 @@ fun! s:NetrwSplit(mode) elseif a:mode == 2 " remote and v let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize + if winsz == 0|let winsz= ""|endif " call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v") exe (g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v" let s:didsplit= 1 @@ -7717,6 +7818,7 @@ fun! s:NetrwSplit(mode) elseif a:mode == 3 " local and o let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winheight(0))/100 : -g:netrw_winsize + if winsz == 0|let winsz= ""|endif " call Decho("exe ".(g:netrw_alto? "bel " : "abo ").winsz."wincmd s") exe (g:netrw_alto? "bel " : "abo ").winsz."wincmd s" let s:didsplit= 1 @@ -7755,6 +7857,7 @@ fun! s:NetrwSplit(mode) elseif a:mode == 5 " local and v let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize + if winsz == 0|let winsz= ""|endif " call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v") exe (g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v" let s:didsplit= 1 @@ -7983,7 +8086,7 @@ fun! s:NetrwTreeListing(dirname) 1d endwhile - setl noma nomod ro + exe "setl ".g:netrw_bufsettings " call Dret("NetrwTreeListing : bufname<".expand("%").">") return @@ -8088,7 +8191,7 @@ fun! s:NetrwWideListing() exe "nmap w /^\\\\|\\s\\s\\zs\\S/\" exe "nmap b ?^\\\\|\\s\\s\\zs\\S?\" " call Decho("NetrwWideListing) setl noma nomod ro") - setl noma nomod ro + exe "setl ".g:netrw_bufsettings " call Decho("(NetrwWideListing) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("NetrwWideListing") return @@ -8591,7 +8694,7 @@ fun! s:NetrwRemoteListing() let w:netrw_method= b:netrw_method endif - if s:method == "ftp" || s:method == "sftp" + if s:method == "ftp" " use ftp to get remote file listing {{{3 " call Decho("use ftp to get remote file listing") let s:method = "ftp" @@ -8660,7 +8763,7 @@ fun! s:NetrwRemoteListing() endif endif - else + else " use ssh to get remote file listing {{{3 " call Decho("use ssh to get remote file listing: s:path<".s:path.">") let listcmd= s:MakeSshCmd(g:netrw_list_cmd) @@ -9656,6 +9759,18 @@ fun! netrw#RestorePosn(...) if a:0 > 0 exe "keepj ".a:1 endif +" call Decho("a:1 = ".((a:0 > 0)? a:1 : 'n/a')) +" call Decho("liststyle = ".(exists("liststyle")? liststyle : 'n/a'). " w:netrw_liststyle=".(exists("w:netrw_liststyle")? w:netrw_liststyle : 'n/a')) + if exists("liststyle") && exists("w:netrw_liststyle") && liststyle != w:netrw_liststyle + let usesrch= 1 + else + let usesrch= 0 + endif + +" call Decho("winh = ".(exists("w:netrw_winh")? w:netrw_winh : -1)) +" call Decho("winw = ".(exists("w:netrw_winw")? w:netrw_winw : -1)) +" call Decho("cur winheight=".winheight(0)." winwidth=".winwidth(0)) +" call Decho("w:netrw_winfile = ".(exists("w:netrw_winfile")? w:netrw_winfile : 'n/a')) " restore window if exists("w:netrw_winnr") @@ -9675,9 +9790,31 @@ fun! netrw#RestorePosn(...) endif " restore position - if exists("w:netrw_line") && exists("w:netrw_col") -" call Decho("restore posn: exe keepj norm! ".w:netrw_line."G0".w:netrw_col."|") + " when the window's height x width has changed, the line,col is no longer useful + if w:netrw_winh == winheight(0) && w:netrw_winw == winwidth(0) && exists("w:netrw_line") && exists("w:netrw_col") && !usesrch +" call Decho("using posn: exe keepj norm! ".w:netrw_line."G0".w:netrw_col."|") exe "keepj norm! ".w:netrw_line."G0".w:netrw_col."\" + + elseif exists("w:netrw_winfile") + if !search('\<'.escape(w:netrw_winfile,g:netrw_fname_escape),'cw') + if exists("w:netrw_bannercnt") +" call Decho("using bannercnt: win#".winnr()." ".winheight(0)."x".winwidth(0)." w:netrw_winfile<".w:netrw_winfile.">") + exe "keepj ".w:netrw_bannercnt + norm! 0 + else + " go to upper left corner +" call Decho("goto ulc: win#".winnr()." ".winheight(0)."x".winwidth(0)." w:netrw_winfile<".w:netrw_winfile.">") + keepj 1 + norm! 0 + endif + else +" call Decho("used search: w:netrw_winfile<".w:netrw_winfile.">") + endif + + else +" call Decho("goto ulc: win#".winnr()." ".winheight(0)."x".winwidth(0)) + keepj 1 + norm! 0 endif let &ei= eikeep @@ -9703,12 +9840,32 @@ fun! netrw#SavePosn() let w:netrw_col = virtcol(".") " call Decho("currently, win#".w:netrw_winnr." line#".w:netrw_line." col#".w:netrw_col) + " save filename under cursor +" call Decho("line#".line(".")." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'n/a')) + if exists("w:netrw_bannercnt") && line(".") >= w:netrw_bannercnt && &ft == "netrw" + let winfile = "|let w:netrw_winfile='".s:NetrwGetWord()."'" + else + let winfile= "" + endif +" call Decho("winfile<".winfile.">") + if exists("w:netrw_liststyle") + let liststyle = "|let liststyle=".w:netrw_liststyle + else + let liststyle= "" + endif +" call Decho("liststyle=".liststyle) + " Save top-of-screen line keepj norm! H0 let w:netrw_hline= line(".") + " save up alternate position information + " use this when window height x width has changed + let w:netrw_winh = winheight(0) + let w:netrw_winw = winwidth(0) + " set up string holding position parameters - let ret = "let w:netrw_winnr=".w:netrw_winnr."|let w:netrw_line=".w:netrw_line."|let w:netrw_col=".w:netrw_col."|let w:netrw_hline=".w:netrw_hline + let ret = "let w:netrw_winnr=".w:netrw_winnr."|let w:netrw_line=".w:netrw_line."|let w:netrw_col=".w:netrw_col."|let w:netrw_hline=".w:netrw_hline."|let w:netrw_winh=".w:netrw_winh."|let w:netrw_winw=".w:netrw_winw.liststyle.winfile keepj call netrw#RestorePosn() " call Dret("netrw#SavePosn : winnr=".(exists("w:netrw_winnr")? w:netrw_winnr : "n/a")." line=".(exists("w:netrw_line")? w:netrw_line : "n/a")." col=".(exists("w:netrw_col")? w:netrw_col : "n/a")." hline=".(exists("w:netrw_hline")? w:netrw_hline : "n/a")) @@ -9883,7 +10040,11 @@ endfun " a correct command for use with a system() call fun! s:MakeSshCmd(sshcmd) " call Dfunc("s:MakeSshCmd(sshcmd<".a:sshcmd.">) user<".s:user."> machine<".s:machine.">") - let sshcmd = substitute(a:sshcmd,'\',s:user.s:machine,'') + if s:user == "" + let sshcmd = substitute(a:sshcmd,'\',s:machine,'') + else + let sshcmd = substitute(a:sshcmd,'\',s:user."@".s:machine,'') + endif if exists("g:netrw_port") && g:netrw_port != "" let sshcmd= substitute(sshcmd,"USEPORT",g:netrw_sshport.' '.g:netrw_port,'') elseif exists("s:port") && s:port != "" @@ -10050,7 +10211,7 @@ fun! s:NetrwEnew(...) keepj call s:NetrwOptionRestore("w:") " call Decho("generate a buffer with keepjumps keepalt enew!") let netrw_keepdiff= &l:diff - keepj keepalt enew! + noswapfile keepj keepalt enew! let &l:diff= netrw_keepdiff " call Decho("bufnr($)=".bufnr("$")." winnr($)=".winnr("$")) keepj call s:NetrwOptionSave("w:") @@ -10145,7 +10306,7 @@ fun! s:NetrwLcd(newdir) else call s:NetrwOptionRestore("w:") " call Decho("setl noma nomod nowrap") - setl noma nomod nowrap + exe "setl ".g:netrw_bufsettings " call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") let a:newdir= dirname " call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">") @@ -10201,7 +10362,7 @@ fun! s:RemotePathAnalysis(dirname) let s:machine = substitute(a:dirname,dirpat,'\4','') let s:port = substitute(a:dirname,dirpat,'\5','') let s:path = substitute(a:dirname,dirpat,'\6','') - let s:fname = substitute(a:dirname,'^.*/\ze.','','') + let s:fname = substitute(s:path,'^.*/\ze.','','') if s:machine =~ '@' let dirpat = '^\(.*\)@\(.\{-}\)$' let s:user = s:user.'@'.substitute(s:machine,dirpat,'\1','') diff --git a/runtime/doc/diff.txt b/runtime/doc/diff.txt --- a/runtime/doc/diff.txt +++ b/runtime/doc/diff.txt @@ -1,4 +1,4 @@ -*diff.txt* For Vim version 7.4. Last change: 2013 Sep 20 +*diff.txt* For Vim version 7.4. Last change: 2014 May 20 VIM REFERENCE MANUAL by Bram Moolenaar @@ -95,7 +95,7 @@ While already in Vim you can start diff :difft[his] Make the current window part of the diff windows. This sets the options like for "vimdiff". -:diffp[atch] {patchfile} *E816* *:diffp* *:diffpatch* +:diffp[atch] {patchfile} *E816* *:diffp* *:diffpatch* Use the current buffer, patch it with the diff found in {patchfile} and open a buffer on the result. The options are set as for "vimdiff". diff --git a/runtime/doc/pi_netrw.txt b/runtime/doc/pi_netrw.txt --- a/runtime/doc/pi_netrw.txt +++ b/runtime/doc/pi_netrw.txt @@ -1,4 +1,4 @@ -*pi_netrw.txt* For Vim version 7.4. Last change: 2014 Mar 20 +*pi_netrw.txt* For Vim version 7.4. Last change: 2014 May 13 ------------------------------------------------ NETRW REFERENCE MANUAL by Charles E. Campbell @@ -173,7 +173,7 @@ There are more protocols supported by ne next section, |netrw-externapp|, on how to use these external applications with netrw and vim. -PREVENTING LOADING *netrw-noload* +PREVENTING LOADING *netrw-noload* If you want to use plugins, but for some reason don't wish to use netrw, then you need to avoid loading both the plugin and the autoload portions of netrw. @@ -184,7 +184,7 @@ You may do so by placing the following t < ============================================================================== -3. Netrw Reference *netrw-ref* {{{1 +3. Netrw Reference *netrw-ref* {{{1 Netrw supports several protocols in addition to scp and ftp as mentioned in |netrw-start|. These include dav, fetch, http,... well, just look @@ -291,7 +291,7 @@ SOURCING *netrw-source* {{{2 :Nsource "scp://[user@]machine[[:#]port]/path" uses scp :Nsource "sftp://[user@]machine/path" uses sftp -DIRECTORY LISTING *netrw-trailingslash* *netrw-dirlist* {{{2 +DIRECTORY LISTING *netrw-trailingslash* *netrw-dirlist* {{{2 One may browse a directory to get a listing by simply attempting to edit the directory: > @@ -348,9 +348,9 @@ settings are described below, in |netrw- *g:netrw_bufsettings* the settings that netrw buffers have (default) noma nomod nonu nowrap ro nobl - *g:netrw_chgwin* specifies a window number where file edits will take - place. (also see |netrw-C|) - (default) not defined + *g:netrw_chgwin* specifies a window number where subsequent file edits + will take place. (also see |netrw-C|) + (default) -1 *g:Netrw_funcref* specifies a function (or functions) to be called when netrw edits a file. The file is first edited, and @@ -371,9 +371,9 @@ settings are described below, in |netrw- value of this variable to see if the alternate ftp method works for your setup. - *g:netrw_ftp_options* Chosen by default, these options are supposed to turn - interactive prompting off and to restrain ftp from - attempting auto-login upon initial connection. + *g:netrw_ftp_options* Chosen by default, these options are supposed to + turn interactive prompting off and to restrain ftp + from attempting auto-login upon initial connection. However, it appears that not all ftp implementations support this (ex. ncftp). ="-i -n" @@ -404,8 +404,8 @@ settings are described below, in |netrw- *g:netrw_preview* =0 (default) preview window shown in a horizontally split window =1 preview window shown in a vertically split window. - Also affects the "previous window" (see |netrw-P|) in - the same way. + Also affects the "previous window" (see |netrw-P|) + in the same way. *g:netrw_scpport* = "-P" : option to use to set port for scp *g:netrw_sshport* = "-p" : option to use to set port for ssh @@ -543,15 +543,17 @@ which contains ftp commands which will b starts. You may use this feature to enter a user and password for one site: > userid password -< *netrw-windows-netrc* *netrw-windows-s* -If |g:netrw_ftp_cmd| contains -s:[path/]MACHINE, then (on Windows machines only) -netrw will substitute the current machine name requested for ftp connections -for MACHINE. Hence one can have multiple machine.ftp files containing login -and password for ftp. Example: > +< *netrw-windows-netrc* *netrw-windows-s* +If |g:netrw_ftp_cmd| contains -s:[path/]MACHINE, then (on Windows machines +only) netrw will substitute the current machine name requested for ftp +connections for MACHINE. Hence one can have multiple machine.ftp files +containing login and password for ftp. Example: > let g:netrw_ftp_cmd= 'c:\Windows\System32\ftp -s:C:\Users\Myself\MACHINE' vim ftp://myhost.somewhere.net/ + will use a file > + C:\Users\Myself\myhost.ftp < Often, ftp will need to query the user for the userid and password. @@ -681,7 +683,7 @@ your <.vimrc> customization file: > < ============================================================================== -6. Transparent Remote File Editing *netrw-transparent* {{{1 +6. Transparent Remote File Editing *netrw-transparent* {{{1 Transparent file transfers occur whenever a regular file read or write (invoked via an |:autocmd| for |BufReadCmd|, |BufWriteCmd|, or |SourceCmd| @@ -755,7 +757,7 @@ below, a {netfile} is an url to a remote ============================================================================== -8. Variables and Options *netrw-var* *netrw-settings* {{{1 +8. Variables and Options *netrw-var* *netrw-settings* {{{1 (also see: |netrw-options| |netrw-variables| |netrw-protocol| |netrw-browser-settings| |netrw-browser-options| ) @@ -795,7 +797,7 @@ set in the user's <.vimrc> file: (see al =1 use default method to do ftp > ----------------------------------------------------------------------- < - *netrw-internal-variables* + *netrw-internal-variables* The script will also make use of the following variables internally, albeit temporarily. > @@ -1042,8 +1044,8 @@ QUICK REFERENCE: MAPS *netrw-browse-m Netrw will attempt to remove the file/directory |netrw-del| - Makes Netrw go up one directory |netrw--| a Toggles between normal display, |netrw-a| - hiding (suppress display of files matching g:netrw_list_hide) - showing (display only files which match g:netrw_list_hide) + hiding (suppress display of files matching g:netrw_list_hide) + showing (display only files which match g:netrw_list_hide) c Make browsing directory the current directory |netrw-c| C Setting the editing window |netrw-C| d Make a directory |netrw-d| @@ -1068,7 +1070,7 @@ QUICK REFERENCE: MAPS *netrw-browse-m mx Apply arbitrary shell command to marked files |netrw-mx| mz Compress/decompress marked files |netrw-mz| o Enter the file/directory under the cursor in a new |netrw-o| - browser window. A horizontal split is used. + browser window. A horizontal split is used. O Obtain a file specified by cursor |netrw-O| p Preview the file |netrw-p| P Browse in the previously used window |netrw-P| @@ -1082,7 +1084,7 @@ QUICK REFERENCE: MAPS *netrw-browse-m u Change to recently-visited directory |netrw-u| U Change to subsequently-visited directory |netrw-U| v Enter the file/directory under the cursor in a new |netrw-v| - browser window. A vertical split is used. + browser window. A vertical split is used. x View file with an associated program |netrw-x| X Execute filename under cursor via |system()| |netrw-X| @@ -1096,9 +1098,9 @@ QUICK REFERENCE: MAPS *netrw-browse-m (gvim only) delete file/directory using word under mouse <2-leftmouse> (gvim only) when: - * in a netrw-selected file, AND - * |g:netrw_retmap| == 1 AND - * the user doesn't already have a <2-leftmouse> + * in a netrw-selected file, AND + * |g:netrw_retmap| == 1 AND + * the user doesn't already have a <2-leftmouse> mapping defined before netrw is autoloaded, then a double clicked leftmouse button will return to the netrw browser window. See |g:netrw_retmap|. @@ -1234,9 +1236,7 @@ cursor at the left. There is only one tree listing buffer; using "v" on a displayed subdirectory will split the screen, but the same buffer will be shown twice. -Associated setting variable: |g:netrw_altv| |g:netrw_winsize| - -Related Actions |netrw-cr| |netrw-o| |netrw-t| |netrw-v| +Related Actions: |netrw-cr| |netrw-o| |netrw-t| |netrw-v| Associated setting variables: |g:netrw_altv| control right/left splitting |g:netrw_winsize| control initial sizing @@ -1258,11 +1258,12 @@ The wide listing format uses two or more 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. -This listing format is the most compact. +The wide listing format is the most compact. The tree listing format has a top directory followed by files and directories -preceded by a "|". One may open and close directories by pressing the -key while atop the directory name. +preceded by one or more "|"s, which indicate the directory depth. One may +open and close directories by pressing the key while atop the directory +name. One may make a preferred listing style your default; see |g:netrw_liststyle|. As an example, by putting the following line in your .vimrc, > @@ -1462,8 +1463,16 @@ If files have been marked with |netrw-mf Marked files (and empty directories) will be deleted; again, you'll be asked to confirm the deletion before it actually takes place. +A further approach is to delete files which match a pattern. + + * use :MF pattern (see |netrw-:MF|); then press "D". + + * use mr (see |netrw-mr|) which will prompt you for pattern. + This will cause the matching files to be marked. Then, + press "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 +used to control the attempts to remove remote files and directories. The g:netrw_rm_cmd is used with files, and its default value is: g:netrw_rm_cmd: ssh HOSTNAME rm @@ -1471,12 +1480,12 @@ g:netrw_rm_cmd is used with files, and i The g:netrw_rmdir_cmd variable is used to support the removal of directories. Its default value is: - g:netrw_rmdir_cmd: ssh HOSTNAME rmdir + |g:netrw_rmdir_cmd|: ssh HOSTNAME rmdir If removing a directory fails with g:netrw_rmdir_cmd, netrw then will attempt to remove it again using the g:netrw_rmf_cmd variable. Its default value is: - g:netrw_rmf_cmd: ssh HOSTNAME rm -f + |g:netrw_rmf_cmd|: ssh HOSTNAME rm -f Related topics: |netrw-d| Associated setting variable: |g:netrw_localrmdir| |g:netrw_rm_cmd| @@ -1548,11 +1557,12 @@ windows should have. Return to Explorer~ When one edits a file, for example by pressing when the cursor is atop a file in a netrw browser window, :Rexplore will - return the display to that of the last netrw browser window. + return the display to that of the last netrw browser display + in that window. Return from Explorer~ Conversely, when one is editing a directory, issuing a :Rexplore - will return to editing the last file being edited in that + will return to editing the file that was last edited in that window. The <2-leftmouse> map (which is only available under gvim and @@ -1919,19 +1929,21 @@ MARKING FILES *netrw-:MF* *netrw-mf* Netrw has several ways of marking files: * One may mark files with the cursor atop a filename and - then pressing "mf". + then pressing "mf". * With gvim, in addition one may mark files with - . + . (see |netrw-mouse|) * One may use the :MF command, which takes a list of - files (for local directories, the list may include - wildcards -- see |glob()|) > + files (for local directories, the list may include + wildcards -- see |glob()|) > :MF *.c < * Note that :MF uses || to break the line - at spaces. + at spaces. + + * Mark files based upon the quickfix list (|netrw-qF|) The following netrw maps make use of marked files: @@ -1948,7 +1960,6 @@ The following netrw maps make use of mar |netrw-mT| Generate tags using marked files |netrw-mx| Apply shell command to marked files |netrw-mz| Compress/Decompress marked files - |netrw-qF| Mark files using quickfix list |netrw-O| Obtain marked files |netrw-R| Rename marked files @@ -2350,7 +2361,7 @@ your browsing preferences. (see also: | 2: errors *g:netrw_fastbrowse* =0: slow speed directory browsing; - never re-uses directory listings, + never re-uses directory listings; always obtains directory listings. =1: medium speed directory browsing; re-use directory listings only @@ -2373,6 +2384,11 @@ your browsing preferences. (see also: | trading off accuracy (ie. up-to-date listing) versus speed. + *g:netrw_ffkeep* (default: doesn't exist) + If this variable exists and is zero, then + netrw will not do a save and restore for + |'fileformat'|. + *g:netrw_fname_escape* =' ?&;%' Used on filenames before remote reading/writing @@ -2518,13 +2534,13 @@ your browsing preferences. (see also: | default: =0 - *g:netrw_rm_cmd* command for removing files + *g:netrw_rm_cmd* command for removing remote files default: "ssh USEPORT HOSTNAME rm" - *g:netrw_rmdir_cmd* command for removing directories + *g:netrw_rmdir_cmd* command for removing remote directories default: "ssh USEPORT HOSTNAME rmdir" - *g:netrw_rmf_cmd* command for removing softlinks + *g:netrw_rmf_cmd* command for removing remote softlinks default: "ssh USEPORT HOSTNAME rm -f" *g:netrw_sort_by* sort by "name", "time", or "size" @@ -2634,6 +2650,9 @@ your browsing preferences. (see also: | If g:netrw_winsize is less than zero, then the absolute value of g:netrw_winsize lines or columns will be used for the new window. + If g:netrw_winsize is zero, then a normal + split will be made (ie. |'equalalways'| will + take effect, for example). default: 50 (for 50%) *g:netrw_xstrlen* Controls how netrw computes string lengths, @@ -2830,6 +2849,15 @@ One may select a netrw window for editin g:netrw_chgwin to the selected window number. Subsequent selection of a file to edit (|netrw-cr|) will use that window. + * C by itself, will select the current window for editing via + |netrw-cr| + + * [count]C the count will be used as the window number to be used + for editing via |netrw-cr|. +Using > + let g:netrw_chgwin= -1 +will restore the default editing behavior (ie. use the current window). + Related topics: |netrw-cr| |g:netrw_browse_split| Associated setting variables: |g:netrw_chgwin| @@ -3118,6 +3146,15 @@ 10. Problems and Fixes *netrw-proble all netrw's mouse mappings, not just the one. (see |g:netrw_mousemaps|) + *netrw-p16* + P16. When editing remote files (ex. :e ftp://hostname/path/file), + under Windows I get an |E303| message complaining that its unable + to open a swap file. + + (romainl) It looks like you are starting Vim from a protected + directory. Start if from your $HOME or another writable + directory. + ============================================================================== 11. Debugging Netrw Itself *netrw-debug* {{{1 @@ -3177,6 +3214,32 @@ which is loaded automatically at startup ============================================================================== 12. History *netrw-history* {{{1 + v152: Apr 08, 2014 * uses the |'noswapfile'| option (requires + vim 7.4 with patch 213) + * (Enno Nagel) turn |'rnu'| off in netrw + buffers. + * (Quinn Strahl) suggested that netrw + allow regular window splitting to occur, + thereby allowing |'equalalways'| to take + effect. + * (qingtian zhao) normally, netrw will + save and restore the |'fileformat'|; + however, sometimes that isn't wanted + Apr 14, 2014 * whenever netrw marks a buffer as ro, + it will also mark it as nomod. + Apr 16, 2014 * sftp protocol now supported by + netrw#Obtain(); this means that one + may use "mc" to copy a remote file + to a local file using sftp, and that + the |netrw-O| command can obtain remote + files via sftp. + * added [count]C support (see |netrw-C|) + Apr 18, 2014 * when |g:netrw_chgwin| is one more than + the last window, then vertically split + the last window and use it as the + chgwin window. + May 09, 2014 * SavePosn was "saving filename under cursor" + from a non-netrw window when using :Rex. v151: Jan 22, 2014 * extended :Rexplore to return to buffer prior to Explore or editing a directory * (Ken Takata) netrw gave error when diff --git a/runtime/doc/tags b/runtime/doc/tags --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -1201,6 +1201,7 @@ +mouse various.txt /*+mouse* +mouse_dec various.txt /*+mouse_dec* +mouse_gpm various.txt /*+mouse_gpm* ++mouse_jsbterm various.txt /*+mouse_jsbterm* +mouse_netterm various.txt /*+mouse_netterm* +mouse_pterm various.txt /*+mouse_pterm* +mouse_sgr various.txt /*+mouse_sgr* @@ -1415,6 +1416,7 @@ /\%>c pattern.txt /*\/\\%>c* /\%>l pattern.txt /*\/\\%>l* /\%>v pattern.txt /*\/\\%>v* +/\%C pattern.txt /*\/\\%C* /\%U pattern.txt /*\/\\%U* /\%V pattern.txt /*\/\\%V* /\%[] pattern.txt /*\/\\%[]* @@ -4313,6 +4315,7 @@ E881 autocmd.txt /*E881* E882 eval.txt /*E882* E883 eval.txt /*E883* E884 eval.txt /*E884* +E885 sign.txt /*E885* E89 message.txt /*E89* E90 message.txt /*E90* E91 options.txt /*E91* @@ -5980,6 +5983,7 @@ g:netrw_dynamic_maxfilenamelen pi_netrw. g:netrw_errorlvl pi_netrw.txt /*g:netrw_errorlvl* g:netrw_fastbrowse pi_netrw.txt /*g:netrw_fastbrowse* g:netrw_fetch_cmd pi_netrw.txt /*g:netrw_fetch_cmd* +g:netrw_ffkeep pi_netrw.txt /*g:netrw_ffkeep* g:netrw_fname_escape pi_netrw.txt /*g:netrw_fname_escape* g:netrw_ftp pi_netrw.txt /*g:netrw_ftp* g:netrw_ftp_browse_reject pi_netrw.txt /*g:netrw_ftp_browse_reject* @@ -7084,6 +7088,7 @@ netrw-p12 pi_netrw.txt /*netrw-p12* netrw-p13 pi_netrw.txt /*netrw-p13* netrw-p14 pi_netrw.txt /*netrw-p14* netrw-p15 pi_netrw.txt /*netrw-p15* +netrw-p16 pi_netrw.txt /*netrw-p16* netrw-p2 pi_netrw.txt /*netrw-p2* netrw-p3 pi_netrw.txt /*netrw-p3* netrw-p4 pi_netrw.txt /*netrw-p4* diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -1,4 +1,4 @@ -*todo.txt* For Vim version 7.4. Last change: 2014 May 13 +*todo.txt* For Vim version 7.4. Last change: 2014 May 22 VIM REFERENCE MANUAL by Bram Moolenaar @@ -55,6 +55,9 @@ directory exists. (Sergio Gallelli, 2013 Problem using ":try" inside ":execute". (ZyX, 2013 Sep 15) +Setting 'ttymouse' empty causes Dec mouse to be detected. (Elijah Griffin, +2014 May 13) + Python: ":py raw_input('prompt')" doesn't work. (Manu Hack) MS-Windows: Crash opening very long file name starting with "\\". @@ -87,11 +90,17 @@ Also fixes wrong result from executable( Update from Ken Takata, 2014 Jan 10. Newer 2014 Apr 3. Win32: use 64 bit stat() if possible. (Ken Takata, 2014 May 12) -Needs more tests. +More tests May 14. + +Idea: For a window in the middle (has window above and below it), use +right-mouse-drag on the status line to move a window up/down without changing +it's height? It's like dragging the status bar above it at the same time. Can we make ":unlet $VAR" use unsetenv() to delete the env var? What for systems that don't have unsetenv()? +Patch to make getchar() work for typing Esc. (Yasuhiro Matsumoto, 2014 May 13) + Patch for problem that v:register is set to '_' after deleting into the black hole register. @@ -152,7 +161,7 @@ normal spell file. (Enno Nagel, 2014 Mar Update by Taylor Hedberg, 2013 May 30. Updated for Vim 7.4 by Ken Takata, 2013 Oct 5. Update by Christian Brabandt, 2014 May 9. Remarks by Ken Takata. - Update by Christian 2014 May 12 + Update by Christian 2014 May 12, github link on May 15 When typing the first character of a command, e.g. "f", then using a menu, the menu item doesn't work. Clear typeahead when using a menu? @@ -608,7 +617,7 @@ Patch to make "z=" work when 'spell' is effects? (Christian Brabandt, 2012 Aug 5, Update 2013 Aug 12) Would also need to do this for spellbadword() and spellsuggest(). -Patch for variable tabstops. +Patch for variable tabstops. On github (Christian Brabandt, 2014 May 15) On 64 bit MS-Windows "long" is only 32 bits, but we sometimes need to store a 64 bits value. Change all number options to use nropt_T and define it to the diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt --- a/runtime/doc/various.txt +++ b/runtime/doc/various.txt @@ -1,4 +1,4 @@ -*various.txt* For Vim version 7.4. Last change: 2014 May 02 +*various.txt* For Vim version 7.4. Last change: 2014 May 22 VIM REFERENCE MANUAL by Bram Moolenaar @@ -379,6 +379,7 @@ N *+mouse* Mouse handling |mouse-using N *+mouseshape* |'mouseshape'| B *+mouse_dec* Unix only: Dec terminal mouse handling |dec-mouse| N *+mouse_gpm* Unix only: Linux console mouse handling |gpm-mouse| +N *+mouse_jsbterm* JSB mouse handling |jsbterm-mouse| B *+mouse_netterm* Unix only: netterm mouse handling |netterm-mouse| N *+mouse_pterm* QNX only: pterm mouse handling |qnx-terminal| N *+mouse_sysmouse* Unix only: *BSD console mouse handling |sysmouse| diff --git a/runtime/plugin/netrwPlugin.vim b/runtime/plugin/netrwPlugin.vim --- a/runtime/plugin/netrwPlugin.vim +++ b/runtime/plugin/netrwPlugin.vim @@ -20,7 +20,7 @@ if &cp || exists("g:loaded_netrwPlugin") finish endif -let g:loaded_netrwPlugin = "v151" +let g:loaded_netrwPlugin = "v152" if v:version < 702 echohl WarningMsg echo "***warning*** you need vim version 7.2 for this version of netrw" diff --git a/runtime/syntax/cpp.vim b/runtime/syntax/cpp.vim --- a/runtime/syntax/cpp.vim +++ b/runtime/syntax/cpp.vim @@ -2,7 +2,7 @@ " Language: C++ " Current Maintainer: vim-jp (https://github.com/vim-jp/cpp-vim) " Previous Maintainer: Ken Shan -" Last Change: 2012 Jun 14 +" Last Change: 2014 May 14 " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded @@ -39,6 +39,7 @@ if !exists("cpp_no_cpp11") syn keyword cppExceptions noexcept syn keyword cppStorageClass constexpr decltype syn keyword cppConstant nullptr + syn region cppRawString matchgroup=cppRawDelimiter start=+\%(u8\|[uLU]\)\=R"\z([[:alnum:]_{}[\]#<>%:;.?*\+\-/\^&|~!=,"']\{,16}\)(+ end=+)\z1"+ contains=@Spell endif " The minimum and maximum operators in GNU C++ @@ -62,6 +63,8 @@ if version >= 508 || !exists("did_cpp_sy HiLink cppStructure Structure HiLink cppBoolean Boolean HiLink cppConstant Constant + HiLink cppRawDelimiter Delimiter + HiLink cppRawString String delcommand HiLink endif