xref: /vim-8.2.3635/runtime/ftplugin/c.vim (revision e30d1025)
1" Vim filetype plugin file
2" Language:	C
3" Maintainer:	Bram Moolenaar <[email protected]>
4" Last Change:	2021 Sep 21
5
6" Only do this when not done yet for this buffer
7if exists("b:did_ftplugin")
8  finish
9endif
10
11" Don't load another plugin for this buffer
12let b:did_ftplugin = 1
13
14" Using line continuation here.
15let s:cpo_save = &cpo
16set cpo-=C
17
18let b:undo_ftplugin = "setl fo< com< ofu< cms< def< inc< | if has('vms') | setl isk< | endif"
19
20" Set 'formatoptions' to break comment lines but not other lines,
21" and insert the comment leader when hitting <CR> or using "o".
22setlocal fo-=t fo+=croql
23
24" These options have the right value as default, but the user may have
25" overruled that.
26setlocal commentstring& define& include&
27
28" Set completion with CTRL-X CTRL-O to autoloaded function.
29if exists('&ofu')
30  setlocal ofu=ccomplete#Complete
31endif
32
33" Set 'comments' to format dashed lists in comments.
34setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
35
36" In VMS C keywords contain '$' characters.
37if has("vms")
38  setlocal iskeyword+=$
39endif
40
41" When the matchit plugin is loaded, this makes the % command skip parens and
42" braces in comments properly.
43if !exists("b:match_words")
44  let b:match_words = '^\s*#\s*if\(\|def\|ndef\)\>:^\s*#\s*elif\>:^\s*#\s*else\>:^\s*#\s*endif\>'
45  let b:match_skip = 's:comment\|string\|character\|special'
46  let b:undo_ftplugin ..= " | unlet! b:match_skip b:match_words"
47endif
48
49" Win32 can filter files in the browse dialog
50if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
51  if &ft == "cpp"
52    let b:browsefilter = "C++ Source Files (*.cpp *.c++)\t*.cpp;*.c++\n" .
53	  \ "C Header Files (*.h)\t*.h\n" .
54	  \ "C Source Files (*.c)\t*.c\n" .
55	  \ "All Files (*.*)\t*.*\n"
56  elseif &ft == "ch"
57    let b:browsefilter = "Ch Source Files (*.ch *.chf)\t*.ch;*.chf\n" .
58	  \ "C Header Files (*.h)\t*.h\n" .
59	  \ "C Source Files (*.c)\t*.c\n" .
60	  \ "All Files (*.*)\t*.*\n"
61  else
62    let b:browsefilter = "C Source Files (*.c)\t*.c\n" .
63	  \ "C Header Files (*.h)\t*.h\n" .
64	  \ "Ch Source Files (*.ch *.chf)\t*.ch;*.chf\n" .
65	  \ "C++ Source Files (*.cpp *.c++)\t*.cpp;*.c++\n" .
66	  \ "All Files (*.*)\t*.*\n"
67  endif
68  let b:undo_ftplugin ..= " | unlet! b:browsefilter"
69endif
70
71let &cpo = s:cpo_save
72unlet s:cpo_save
73