mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.2.3686: filetype detection often mixes up Forth and F#
Problem: Filetype detection often mixes up Forth and F#.
Solution: Add a function to inspect the file contents. (Doug Kearns)
3d14c0f2b9
This commit is contained in:
parent
b339cb5aca
commit
ea5699399e
17
runtime/autoload/dist/ft.vim
vendored
17
runtime/autoload/dist/ft.vim
vendored
@ -219,6 +219,23 @@ func dist#ft#FTe()
|
|||||||
endif
|
endif
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Distinguish between Forth and F#.
|
||||||
|
" Provided by Doug Kearns.
|
||||||
|
func dist#ft#FTfs()
|
||||||
|
if exists("g:filetype_fs")
|
||||||
|
exe "setf " . g:filetype_fs
|
||||||
|
else
|
||||||
|
let line = getline(nextnonblank(1))
|
||||||
|
" comments and colon definitions
|
||||||
|
if line =~ '^\s*\.\=( ' || line =~ '^\s*\\G\= ' || line =~ '^\\$'
|
||||||
|
\ || line =~ '^\s*: \S'
|
||||||
|
setf forth
|
||||||
|
else
|
||||||
|
setf fs
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
" Distinguish between HTML, XHTML and Django
|
" Distinguish between HTML, XHTML and Django
|
||||||
func dist#ft#FThtml()
|
func dist#ft#FThtml()
|
||||||
let n = 1
|
let n = 1
|
||||||
|
@ -128,18 +128,19 @@ can be used to overrule the filetype used for certain extensions:
|
|||||||
|
|
||||||
file name variable ~
|
file name variable ~
|
||||||
*.asa g:filetype_asa |ft-aspvbs-syntax| |ft-aspperl-syntax|
|
*.asa g:filetype_asa |ft-aspvbs-syntax| |ft-aspperl-syntax|
|
||||||
*.asp g:filetype_asp |ft-aspvbs-syntax| |ft-aspperl-syntax|
|
|
||||||
*.asm g:asmsyntax |ft-asm-syntax|
|
*.asm g:asmsyntax |ft-asm-syntax|
|
||||||
*.prg g:filetype_prg
|
*.asp g:filetype_asp |ft-aspvbs-syntax| |ft-aspperl-syntax|
|
||||||
*.pl g:filetype_pl
|
*.fs g:filetype_fs |ft-forth-syntax|
|
||||||
*.inc g:filetype_inc
|
|
||||||
*.w g:filetype_w |ft-cweb-syntax|
|
|
||||||
*.i g:filetype_i |ft-progress-syntax|
|
*.i g:filetype_i |ft-progress-syntax|
|
||||||
|
*.inc g:filetype_inc
|
||||||
*.m g:filetype_m |ft-mathematica-syntax|
|
*.m g:filetype_m |ft-mathematica-syntax|
|
||||||
*.p g:filetype_p |ft-pascal-syntax|
|
*.p g:filetype_p |ft-pascal-syntax|
|
||||||
|
*.pl g:filetype_pl
|
||||||
*.pp g:filetype_pp |ft-pascal-syntax|
|
*.pp g:filetype_pp |ft-pascal-syntax|
|
||||||
|
*.prg g:filetype_prg
|
||||||
*.sh g:bash_is_sh |ft-sh-syntax|
|
*.sh g:bash_is_sh |ft-sh-syntax|
|
||||||
*.tex g:tex_flavor |ft-tex-plugin|
|
*.tex g:tex_flavor |ft-tex-plugin|
|
||||||
|
*.w g:filetype_w |ft-cweb-syntax|
|
||||||
|
|
||||||
*filetype-ignore*
|
*filetype-ignore*
|
||||||
To avoid that certain files are being inspected, the g:ft_ignore_pat variable
|
To avoid that certain files are being inspected, the g:ft_ignore_pat variable
|
||||||
@ -494,7 +495,6 @@ Options:
|
|||||||
For further discussion of fortran_have_tabs and the method used for the
|
For further discussion of fortran_have_tabs and the method used for the
|
||||||
detection of source format see |ft-fortran-syntax|.
|
detection of source format see |ft-fortran-syntax|.
|
||||||
|
|
||||||
|
|
||||||
GIT COMMIT *ft-gitcommit-plugin*
|
GIT COMMIT *ft-gitcommit-plugin*
|
||||||
|
|
||||||
One command, :DiffGitCached, is provided to show a diff of the current commit
|
One command, :DiffGitCached, is provided to show a diff of the current commit
|
||||||
|
@ -1497,6 +1497,14 @@ gvim display. Here, statements are colored LightYellow instead of Yellow, and
|
|||||||
conditionals are LightBlue for better distinction.
|
conditionals are LightBlue for better distinction.
|
||||||
|
|
||||||
|
|
||||||
|
FORTH *forth.vim* *ft-forth-syntax*
|
||||||
|
|
||||||
|
Files matching "*.fs" could be F# or Forth. If the automatic detection
|
||||||
|
doesn't work for you, or you don't edit F# at all, use this in your
|
||||||
|
startup vimrc: >
|
||||||
|
:let filetype_fs = "forth"
|
||||||
|
|
||||||
|
|
||||||
FORTRAN *fortran.vim* *ft-fortran-syntax*
|
FORTRAN *fortran.vim* *ft-fortran-syntax*
|
||||||
|
|
||||||
Default highlighting and dialect ~
|
Default highlighting and dialect ~
|
||||||
|
@ -628,7 +628,10 @@ au BufNewFile,BufRead auto.master setf conf
|
|||||||
au BufNewFile,BufRead *.mas,*.master setf master
|
au BufNewFile,BufRead *.mas,*.master setf master
|
||||||
|
|
||||||
" Forth
|
" Forth
|
||||||
au BufNewFile,BufRead *.fs,*.ft,*.fth setf forth
|
au BufNewFile,BufRead *.ft,*.fth setf forth
|
||||||
|
|
||||||
|
" F# or Forth
|
||||||
|
au BufNewFile,BufRead *.fs call dist#ft#FTfs()
|
||||||
|
|
||||||
" Reva Forth
|
" Reva Forth
|
||||||
au BufNewFile,BufRead *.frt setf reva
|
au BufNewFile,BufRead *.frt setf reva
|
||||||
|
@ -198,6 +198,10 @@ if s:line1 =~# "^#!"
|
|||||||
elseif s:name =~# 'fish\>'
|
elseif s:name =~# 'fish\>'
|
||||||
set ft=fish
|
set ft=fish
|
||||||
|
|
||||||
|
" Gforth
|
||||||
|
elseif s:name =~# 'gforth\>'
|
||||||
|
set ft=forth
|
||||||
|
|
||||||
endif
|
endif
|
||||||
unlet s:name
|
unlet s:name
|
||||||
|
|
||||||
|
@ -182,11 +182,12 @@ let s:filename_checks = {
|
|||||||
\ 'fgl': ['file.4gl', 'file.4gh', 'file.m4gl'],
|
\ 'fgl': ['file.4gl', 'file.4gh', 'file.m4gl'],
|
||||||
\ 'fish': ['file.fish'],
|
\ 'fish': ['file.fish'],
|
||||||
\ 'focexec': ['file.fex', 'file.focexec'],
|
\ 'focexec': ['file.fex', 'file.focexec'],
|
||||||
\ 'forth': ['file.fs', 'file.ft', 'file.fth'],
|
\ 'forth': ['file.ft', 'file.fth'],
|
||||||
\ 'fortran': ['file.f', 'file.for', 'file.fortran', 'file.fpp', 'file.ftn', 'file.f77', 'file.f90', 'file.f95', 'file.f03', 'file.f08'],
|
\ 'fortran': ['file.f', 'file.for', 'file.fortran', 'file.fpp', 'file.ftn', 'file.f77', 'file.f90', 'file.f95', 'file.f03', 'file.f08'],
|
||||||
\ 'fpcmake': ['file.fpc'],
|
\ 'fpcmake': ['file.fpc'],
|
||||||
\ 'framescript': ['file.fsl'],
|
\ 'framescript': ['file.fsl'],
|
||||||
\ 'freebasic': ['file.fb', 'file.bi'],
|
\ 'freebasic': ['file.fb', 'file.bi'],
|
||||||
|
\ 'fs': ['file.fs'],
|
||||||
\ 'fstab': ['fstab', 'mtab'],
|
\ 'fstab': ['fstab', 'mtab'],
|
||||||
\ 'fvwm': ['/.fvwm/file', 'any/.fvwm/file'],
|
\ 'fvwm': ['/.fvwm/file', 'any/.fvwm/file'],
|
||||||
\ 'gdb': ['.gdbinit', 'gdbinit'],
|
\ 'gdb': ['.gdbinit', 'gdbinit'],
|
||||||
@ -663,6 +664,7 @@ let s:script_checks = {
|
|||||||
\ 'fennel': [['#!/path/fennel']],
|
\ 'fennel': [['#!/path/fennel']],
|
||||||
\ 'routeros': [['#!/path/rsc']],
|
\ 'routeros': [['#!/path/rsc']],
|
||||||
\ 'fish': [['#!/path/fish']],
|
\ 'fish': [['#!/path/fish']],
|
||||||
|
\ 'forth': [['#!/path/gforth']],
|
||||||
\ }
|
\ }
|
||||||
|
|
||||||
" Various forms of "env" optional arguments.
|
" Various forms of "env" optional arguments.
|
||||||
@ -945,4 +947,57 @@ func Test_xpm_file()
|
|||||||
filetype off
|
filetype off
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_fs_file()
|
||||||
|
filetype on
|
||||||
|
|
||||||
|
call writefile(['looks like F#'], 'Xfile.fs')
|
||||||
|
split Xfile.fs
|
||||||
|
call assert_equal('fs', &filetype)
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
let g:filetype_fs = 'forth'
|
||||||
|
split Xfile.fs
|
||||||
|
call assert_equal('forth', &filetype)
|
||||||
|
bwipe!
|
||||||
|
unlet g:filetype_fs
|
||||||
|
|
||||||
|
" Test dist#ft#FTfs()
|
||||||
|
|
||||||
|
" Forth (Gforth)
|
||||||
|
|
||||||
|
call writefile(['( Forth inline comment )'], 'Xfile.fs')
|
||||||
|
split Xfile.fs
|
||||||
|
call assert_equal('forth', &filetype)
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
call writefile(['.( Forth displayed inline comment )'], 'Xfile.fs')
|
||||||
|
split Xfile.fs
|
||||||
|
call assert_equal('forth', &filetype)
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
call writefile(['\ Forth line comment'], 'Xfile.fs')
|
||||||
|
split Xfile.fs
|
||||||
|
call assert_equal('forth', &filetype)
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
" empty line comment - no space required
|
||||||
|
call writefile(['\'], 'Xfile.fs')
|
||||||
|
split Xfile.fs
|
||||||
|
call assert_equal('forth', &filetype)
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
call writefile(['\G Forth documentation comment '], 'Xfile.fs')
|
||||||
|
split Xfile.fs
|
||||||
|
call assert_equal('forth', &filetype)
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
call writefile([': squared ( n -- n^2 )', 'dup * ;'], 'Xfile.fs')
|
||||||
|
split Xfile.fs
|
||||||
|
call assert_equal('forth', &filetype)
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
call delete('Xfile.fs')
|
||||||
|
filetype off
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
Loading…
Reference in New Issue
Block a user