aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/lua/vim/fs.lua6
-rw-r--r--test/functional/lua/fs_spec.lua5
2 files changed, 10 insertions, 1 deletions
diff --git a/runtime/lua/vim/fs.lua b/runtime/lua/vim/fs.lua
index 48d76e5d7e..d06dcb87cf 100644
--- a/runtime/lua/vim/fs.lua
+++ b/runtime/lua/vim/fs.lua
@@ -348,7 +348,11 @@ function M.normalize(path, opts)
path = path:gsub('%$([%w_]+)', vim.uv.os_getenv)
end
- return (path:gsub('\\', '/'):gsub('/+', '/'):gsub('(.)/$', '%1'))
+ path = path:gsub('\\', '/'):gsub('/+', '/')
+ if iswin and path:match('^%w:/$') then
+ return path
+ end
+ return (path:gsub('(.)/$', '%1'))
end
return M
diff --git a/test/functional/lua/fs_spec.lua b/test/functional/lua/fs_spec.lua
index c1091cff60..2c7b3ff324 100644
--- a/test/functional/lua/fs_spec.lua
+++ b/test/functional/lua/fs_spec.lua
@@ -301,5 +301,10 @@ describe('vim.fs', function()
return vim.fs.normalize('$XDG_CONFIG_HOME/nvim')
]], xdg_config_home))
end)
+ if is_os('win') then
+ it('Last slash is not truncated from root drive', function()
+ eq('C:/', exec_lua [[ return vim.fs.normalize('C:/') ]])
+ end)
+ end
end)
end)