view runtime/ftplugin/csh.vim @ 35792:f4b25cf637e7 v9.1.0616

patch 9.1.0616: filetype: Make syntax highlighting off for MS Makefiles Commit: https://github.com/vim/vim/commit/eb4b903c9b238ebcc1d14cfcb207129b4931a33d Author: Ken Takata <kentkt@csc.jp> Date: Thu Jul 25 21:07:13 2024 +0200 patch 9.1.0616: filetype: Make syntax highlighting off for MS Makefiles Problem: filetype: Make syntax highlighting off for MS Makefiles Solution: Try to detect MS Makefiles and adjust syntax rules to it. (Ken Takata) Highlighting of variable expansion in Microsoft Makefile can be broken. E.g.: https://github.com/vim/vim/blob/2979cfc2627d76a9c09cad46a1647dcd4aa73f5f/src/Make_mvc.mak#L1331 Don't use backslash as escape characters if `make_microsoft` is set. Also fix that `make_no_comments` was not considered if `make_microsoft` was set. Also add description for `make_microsoft` and `make_no_comments` to the documentation and include a very simple filetype test closes: #15341 Signed-off-by: Christian Brabandt <cb@256bit.org> Signed-off-by: Ken Takata <kentkt@csc.jp>
author Christian Brabandt <cb@256bit.org>
date Thu, 25 Jul 2024 21:30:04 +0200
parents 7c7432a53a6c
children
line wrap: on
line source

" Vim filetype plugin file
" Language:		csh
" Maintainer:		Doug Kearns <dougkearns@gmail.com>
" Previous Maintainer:	Dan Sharp
" Contributor:		Johannes Zellner <johannes@zellner.org>
" Last Change:		2024 Jan 14
" 			2024 May 23 by Riley Bruins ('commentstring')

if exists("b:did_ftplugin")
  finish
endif
let b:did_ftplugin = 1

let s:save_cpo = &cpo
set cpo-=C

setlocal comments=:#
setlocal commentstring=#\ %s
setlocal formatoptions-=t
setlocal formatoptions+=crql

let b:undo_ftplugin = "setlocal com< cms< fo<"

" Csh: thanks to Johannes Zellner
" - Both foreach and end must appear alone on separate lines.
" - The words else and endif must appear at the beginning of input lines;
"   the if must appear alone on its input line or after an else.
" - Each case label and the default label must appear at the start of a
"   line.
" - while and end must appear alone on their input lines.
if exists("loaded_matchit") && !exists("b:match_words")
  let s:line_start = '\%(^\s*\)\@<='
  let b:match_words =
	\ s:line_start .. 'if\s*(.*)\s*then\>:' ..
	\   s:line_start .. 'else\s\+if\s*(.*)\s*then\>:' .. s:line_start .. 'else\>:' ..
	\   s:line_start .. 'endif\>,' ..
	\ s:line_start .. '\%(\<foreach\s\+\h\w*\|while\)\s*(:' ..
	\   '\<break\>:\<continue\>:' ..
	\   s:line_start .. 'end\>,' ..
	\ s:line_start .. 'switch\s*(:' ..
	\   s:line_start .. 'case\s\+:' .. s:line_start .. 'default\>:\<breaksw\>:' ..
	\   s:line_start .. 'endsw\>'
  unlet s:line_start
  let b:undo_ftplugin ..= " | unlet! b:match_words"
endif

if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
  let b:browsefilter = "csh Scripts (*.csh)\t*.csh\n"
  if has("win32")
    let b:browsefilter ..= "All Files (*.*)\t*\n"
  else
    let b:browsefilter ..= "All Files (*)\t*\n"
  endif
  let b:csh_set_browsefilter = 1
  let b:undo_ftplugin ..= " | unlet! b:browsefilter b:csh_set_browsefilter"
endif

let &cpo = s:save_cpo
unlet s:save_cpo