From 5d49542b561e7f4826e28f7a0aeca94d47b3e0b7 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Thu, 31 Aug 2023 08:20:00 +0800 Subject: vim-patch:9.0.1820: Rexx files may not be recognised (#24956) Problem: Rexx files may not be recognised Solution: Add shebang detection and improve disambiguation of *.cls files closes: vim/vim#12951 https://github.com/vim/vim/commit/e06afb7860805537ccd69966bc03169852c9b378 Co-authored-by: Doug Kearns --- runtime/lua/vim/filetype/detect.lua | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'runtime/lua/vim') diff --git a/runtime/lua/vim/filetype/detect.lua b/runtime/lua/vim/filetype/detect.lua index 0609ac5513..934b02dcdd 100644 --- a/runtime/lua/vim/filetype/detect.lua +++ b/runtime/lua/vim/filetype/detect.lua @@ -194,13 +194,18 @@ function M.cls(_, bufnr) return vim.g.filetype_cls end local line1 = getline(bufnr, 1) - if line1:find('^[%%\\]') then - return 'tex' - elseif line1:find('^#') and line1:lower():find('rexx') then + if matchregex(line1, [[^#!.*\<\%(rexx\|regina\)\>]]) then return 'rexx' elseif line1 == 'VERSION 1.0 CLASS' then return 'vb' end + + local nonblank1 = nextnonblank(bufnr, 1) + if nonblank1 and nonblank1:find('^[%%\\]') then + return 'tex' + elseif nonblank1 and findany(nonblank1, { '^%s*/%*', '^%s*::%w' }) then + return 'rexx' + end return 'st' end @@ -1648,6 +1653,7 @@ local patterns_hashbang = { guile = 'scheme', ['nix%-shell'] = 'nix', ['crystal\\>'] = { 'crystal', { vim_regex = true } }, + ['^\\%(rexx\\|regina\\)\\>'] = { 'rexx', { vim_regex = true } }, } ---@private -- cgit