diff --git a/runtime/lua/vim/filetype.lua b/runtime/lua/vim/filetype.lua index 1c355fe2e8..861b863270 100644 --- a/runtime/lua/vim/filetype.lua +++ b/runtime/lua/vim/filetype.lua @@ -3254,7 +3254,7 @@ function M.match(args) end if name then - if name:sub(-1) == '/' then + if name:sub(-1) == '/' and not name:find('^%a[%w+.-]*://') then return 'directory' end name = normalize_path(name) diff --git a/test/functional/lua/filetype_spec.lua b/test/functional/lua/filetype_spec.lua index 2593a08d71..efbac45570 100644 --- a/test/functional/lua/filetype_spec.lua +++ b/test/functional/lua/filetype_spec.lua @@ -82,6 +82,20 @@ describe('vim.filetype', function() ) end) + it('matches URI buffer patterns ending in slash', function() + eq( + 'example', + exec_lua(function() + vim.filetype.add({ + pattern = { + ['example://.*'] = 'example', + }, + }) + return vim.filetype.match({ filename = 'example:///tmp/example/' }) + end) + ) + end) + it('works without defined g:ft_ignore_pat', function() local match_opts = { filename = 'unknown-ft', buf = api.nvim_create_buf(false, true) } eq(