runtime(netrw): Use consistent forward slashes
Commit:
https://github.com/vim/vim/commit/48474e63704b6d5ae2f491ef320d33ef74e87357
Author: Christian Brabandt <
c...@256bit.org>
Date: Sun Jun 28 19:00:30 2026 +0000
runtime(netrw): Use consistent forward slashes
fixes:
https://github.com/vim/vim/issues/20636
closes:
https://github.com/vim/vim/issues/20663
Signed-off-by: Christian Brabandt <
c...@256bit.org>
diff --git a/runtime/pack/dist/opt/netrw/autoload/netrw.vim b/runtime/pack/dist/opt/netrw/autoload/netrw.vim
index 8006837cf..1535644d2 100644
--- a/runtime/pack/dist/opt/netrw/autoload/netrw.vim
+++ b/runtime/pack/dist/opt/netrw/autoload/netrw.vim
@@ -1,7 +1,7 @@
" Creator: Charles E Campbell
" Previous Maintainer: Luca Saccarola <
github...@aleeas.com>
" Maintainer: This runtime file is looking for a new maintainer.
-" Last Change: 2026 Jun 16
+" Last Change: 2026 Jun 28
" Copyright: Copyright (C) 2016 Charles E. Campbell {{{1
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
@@ -418,7 +418,7 @@ endif
" == 6: Texplore
function netrw#Explore(indx,dosplit,style,...)
if !exists("b:netrw_curdir")
- let b:netrw_curdir= getcwd()
+ let b:netrw_curdir= netrw#fs#Cwd(0)
endif
" record current file for Rexplore's benefit
@@ -525,6 +525,10 @@ function netrw#Explore(indx,dosplit,style,...)
call s:NetrwClearExplore()
return
endif
+ " Win32: Use forward slashes
+ if !g:netrw_cygwin && has("win32")
+ let dirname= substitute(dirname,'\','/','g')
+ endif
if dirname =~ '\.\./\=$'
let dirname= simplify(fnamemodify(dirname,':p:h'))
@@ -568,14 +572,11 @@ function netrw#Explore(indx,dosplit,style,...)
if starpat == 0 && a:indx >= 0
" [Explore Hexplore Vexplore Sexplore] [dirname]
- if dirname == ""
- let dirname= curfiledir
- endif
if dirname =~# '^scp://' || dirname =~ '^ftp://'
call netrw#Nread(2,dirname)
else
if dirname == ""
- let dirname= getcwd()
+ let dirname= netrw#fs#Cwd(0)
elseif has("win32") && !g:netrw_cygwin
" Windows : check for a drive specifier, or else for a remote share name ('\Foo' or '//Foo',
" depending on whether backslashes have been converted to forward slashes by earlier code).
@@ -4983,7 +4984,7 @@ function s:NetrwMaps(islocal)
nno <buffer> <silent> <Plug>NetrwSLeftmouse :exec "norm! \<lt>leftmouse>"<bar>call <SID>NetrwSLeftmouse(1)<cr>
nno <buffer> <silent> <Plug>NetrwSLeftdrag :exec "norm! \<lt>leftmouse>"<bar>call <SID>NetrwSLeftdrag(1)<cr>
nmap <buffer> <silent> <Plug>Netrw2Leftmouse -
- exe 'nnoremap <buffer> <silent> <rightmouse> :exec "norm! \<lt>leftmouse>"<bar>call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+ exe 'nnoremap <buffer> <silent> <rightmouse> :exec "norm! \<lt>leftmouse>"<bar>call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
exe 'vnoremap <buffer> <silent> <rightmouse> :exec "norm! \<lt>leftmouse>"<bar>call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
endif
exe 'nnoremap <buffer> <silent> <nowait> <del> :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
@@ -8679,7 +8680,15 @@ function s:NetrwLocalRename(path) range
endif
NetrwKeepj norm! 0
+ if exists('+shellslash') && !&ssl
+ let reset_ssl = 1
+ set ssl
+ endif
+ " Consistently use / as directory separator
let oldname= netrw#fs#ComposePath(a:path,curword)
+ if reset_ssl
+ set nossl
+ endif
call inputsave()
let newname= input("Moving ".oldname." to : ",substitute(oldname,'/*$','','e'))
diff --git a/src/testdir/test_plugin_netrw.vim b/src/testdir/test_plugin_netrw.vim
index eee5f0984..ea3f33cec 100644
--- a/src/testdir/test_plugin_netrw.vim
+++ b/src/testdir/test_plugin_netrw.vim
@@ -869,4 +869,13 @@ func Test_netrw_local_rm_injection()
endtry
endfunc
+func Test_netrw_forward_slashes()
+ Explore
+ call assert_notmatch('\', b:netrw_curdir)
+ bw!
+ Explore .
+ call assert_notmatch('\', b:netrw_curdir)
+ bw!
+endfunc
+
" vim:ts=8 sts=2 sw=2 et