diff runtime/filetype.vim @ 11459:561b76ed9d12 v8.0.0613

patch 8.0.0613: the conf filetype is used before ftdetect from packages commit https://github.com/vim/vim/commit/3e54569b17683318e0cb6693ab0024c2ad1e3e8f Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jun 4 19:00:32 2017 +0200 patch 8.0.0613: the conf filetype is used before ftdetect from packages Problem: The conf filetype detection is done before ftdetect scripts from packages that are added later. Solution: Add the FALLBACK argument to :setfiletype. (closes #1679, closes #1693)
author Christian Brabandt <cb@256bit.org>
date Sun, 04 Jun 2017 19:15:03 +0200
parents d183d629509e
children 63b0b7b79b25
line wrap: on
line diff
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -1,7 +1,7 @@
 " Vim support file to detect file types
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2017 May 27
+" Last Change:	2017 Jun 04
 
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
@@ -1181,14 +1181,21 @@ au BufNewFile,BufRead *.markdown,*.mdown
 " Mason
 au BufNewFile,BufRead *.mason,*.mhtml,*.comp	setf mason
 
-" Matlab or Objective C
+" Mathematica, Matlab, Murphi or Objective C
 au BufNewFile,BufRead *.m			call s:FTm()
 
 func! s:FTm()
   let n = 1
-  while n < 10
+  let saw_comment = 0 " Whether we've seen a multiline comment leader.
+  while n < 100
     let line = getline(n)
-    if line =~ '^\s*\(#\s*\(include\|import\)\>\|@import\>\|/\*\|//\)'
+    if line =~ '^\s*/\*'
+      " /* ... */ is a comment in Objective C and Murphi, so we can't conclude
+      " it's either of them yet, but track this as a hint in case we don't see
+      " anything more definitive.
+      let saw_comment = 1
+    endif
+    if line =~ '^\s*\(#\s*\(include\|import\)\>\|@import\>\|//\)'
       setf objc
       return
     endif
@@ -1200,11 +1207,23 @@ func! s:FTm()
       setf mma
       return
     endif
+    if line =~ '^\c\s*\(\(type\|var\)\>\|--\)'
+      setf murphi
+      return
+    endif
     let n = n + 1
   endwhile
-  if exists("g:filetype_m")
+
+  if saw_comment
+    " We didn't see anything definitive, but this looks like either Objective C
+    " or Murphi based on the comment leader. Assume the former as it is more
+    " common.
+    setf objc
+  elseif exists("g:filetype_m")
+    " Use user specified default filetype for .m
     exe "setf " . g:filetype_m
   else
+    " Default is matlab
     setf matlab
   endif
 endfunc
@@ -2777,12 +2796,12 @@ runtime! ftdetect/*.vim
 " state.
 augroup END
 
-" Generic configuration file (check this last, it's just guessing!)
+" Generic configuration file. Use FALLBACK, it's just guessing!
 au filetypedetect BufNewFile,BufRead,StdinReadPost *
 	\ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
 	\    && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#'
 	\	|| getline(4) =~ '^#' || getline(5) =~ '^#') |
-	\   setf conf |
+	\   setf FALLBACK conf |
 	\ endif