mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	This enables vim.filetype.match to match based on a buffer (most
accurate) or simply a filename or file contents, which are less accurate
but may still be useful for some scenarios.
When matching based on a buffer, the buffer's name and contents are both
used to do full filetype matching. When using a filename, if the file
exists the file is loaded into a buffer and full filetype detection is
performed. If the file does not exist then filetype matching is only
performed against the filename itself. Content-based matching does the
equivalent of scripts.vim, and matches solely based on file contents
without any information from the name of the file itself (e.g. for
shebangs).
BREAKING CHANGE: use `vim.filetype.match({buf = bufnr})` instead 
of `vim.filetype.match(name, bufnr)`
		
	
		
			
				
	
	
		
			54 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
if vim.g.did_load_filetypes and vim.g.did_load_filetypes ~= 0 then
 | 
						|
  return
 | 
						|
end
 | 
						|
 | 
						|
-- For now, make this opt-in with a global variable
 | 
						|
if vim.g.do_filetype_lua ~= 1 then
 | 
						|
  return
 | 
						|
end
 | 
						|
 | 
						|
vim.api.nvim_create_augroup('filetypedetect', { clear = false })
 | 
						|
 | 
						|
vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, {
 | 
						|
  group = 'filetypedetect',
 | 
						|
  callback = function(args)
 | 
						|
    local ft, on_detect = vim.filetype.match({ buf = args.buf })
 | 
						|
    if ft then
 | 
						|
      vim.api.nvim_buf_set_option(args.buf, 'filetype', ft)
 | 
						|
      if on_detect then
 | 
						|
        on_detect(args.buf)
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end,
 | 
						|
})
 | 
						|
 | 
						|
-- These *must* be sourced after the autocommand above is created
 | 
						|
if not vim.g.did_load_ftdetect then
 | 
						|
  vim.cmd([[
 | 
						|
  augroup filetypedetect
 | 
						|
  runtime! ftdetect/*.vim
 | 
						|
  runtime! ftdetect/*.lua
 | 
						|
  augroup END
 | 
						|
  ]])
 | 
						|
end
 | 
						|
 | 
						|
-- Set a marker so that the ftdetect scripts are not sourced a second time by filetype.vim
 | 
						|
vim.g.did_load_ftdetect = 1
 | 
						|
 | 
						|
-- If filetype.vim is disabled, set up the autocmd to use scripts.vim
 | 
						|
if vim.g.did_load_filetypes then
 | 
						|
  vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, {
 | 
						|
    group = 'filetypedetect',
 | 
						|
    command = "if !did_filetype() && expand('<amatch>') !~ g:ft_ignore_pat | runtime! scripts.vim | endif",
 | 
						|
  })
 | 
						|
 | 
						|
  vim.api.nvim_create_autocmd('StdinReadPost', {
 | 
						|
    group = 'filetypedetect',
 | 
						|
    command = 'if !did_filetype() | runtime! scripts.vim | endif',
 | 
						|
  })
 | 
						|
end
 | 
						|
 | 
						|
if not vim.g.ft_ignore_pat then
 | 
						|
  vim.g.ft_ignore_pat = '\\.\\(Z\\|gz\\|bz2\\|zip\\|tgz\\)$'
 | 
						|
end
 |