aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/lua/vim')
-rw-r--r--runtime/lua/vim/filetype.lua16
1 files changed, 13 insertions, 3 deletions
diff --git a/runtime/lua/vim/filetype.lua b/runtime/lua/vim/filetype.lua
index 2a34fec7f2..279fcf92a4 100644
--- a/runtime/lua/vim/filetype.lua
+++ b/runtime/lua/vim/filetype.lua
@@ -1480,8 +1480,18 @@ end
local pattern_sorted = sort_by_priority(pattern)
---@private
-local function normalize_path(path)
- return (path:gsub("\\", "/"):gsub("^~", vim.env.HOME))
+local function normalize_path(path, as_pattern)
+ local normal = path:gsub("\\", '/')
+ if normal:find('^~') then
+ if as_pattern then
+ -- Escape Lua's metacharacters when $HOME is used in a pattern.
+ -- The rest of path should already be properly escaped.
+ normal = vim.env.HOME:gsub('[-^$()%%.%[%]+?]', '%%%0') .. normal:sub(2)
+ else
+ normal = vim.env.HOME .. normal:sub(2)
+ end
+ end
+ return normal
end
--- Add new filetype mappings.
@@ -1550,7 +1560,7 @@ function M.add(filetypes)
end
for k, v in pairs(filetypes.pattern or {}) do
- pattern[normalize_path(k)] = v
+ pattern[normalize_path(k, true)] = v
end
if filetypes.pattern then