neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

freebasic.vim (2679B)


      1 " Vim filetype plugin file
      2 " Language:	FreeBASIC
      3 " Maintainer:	Doug Kearns <dougkearns@gmail.com>
      4 " Last Change:	2023 Aug 22
      5 
      6 " Setup {{{1
      7 if exists("b:did_ftplugin")
      8  finish
      9 endif
     10 
     11 let s:cpo_save = &cpo
     12 set cpo&vim
     13 
     14 runtime! ftplugin/basic.vim
     15 
     16 let s:dialect = freebasic#GetDialect()
     17 
     18 " Comments {{{1
     19 " add ''comments before 'comments
     20 let &l:comments = "sO:*\ -,mO:*\ \ ,exO:*/,s1:/',mb:',ex:'/,:''," .. &l:comments
     21 
     22 " Match words {{{1
     23 if exists("loaded_matchit")
     24  let s:line_start = '\%(^\s*\)\@<='
     25  let s:not_end    = '\%(end\s\+\)\@<!'
     26 
     27  let b:match_words ..= ','
     28 
     29  if s:dialect == 'fb'
     30    let b:match_words ..= s:not_end .. '\<constructor\>:\<end\s\+constructor\>,' ..
     31 	  \	  s:not_end .. '\<destructor\>:\<end\s\+destructor\>,' ..
     32 	  \	  s:not_end .. '\<property\>:\<end\s\+property\>,' ..
     33 	  \	  s:not_end .. '\<operator\>:\<end\s\+operator\>,' ..
     34 	  \	  s:not_end .. '\<extern\%(\s\+"\)\@=:\<end\s\+extern\>,'
     35  endif
     36 
     37  if s:dialect == 'fb' || s:dialect == 'deprecated'
     38    let b:match_words ..= s:not_end .. '\<scope\>:\<end\s\+scope\>,'
     39  endif
     40 
     41  if s:dialect == 'qb'
     42    let b:match_words ..= s:not_end .. '\<__asm\>:\<end\s\+__asm\>,' ..
     43 	  \	  s:not_end .. '\<__union\>:\<end\s\+__union\>,' ..
     44 	  \	  s:not_end .. '\<__with\>:\<end\s\+__with\>,'
     45  else
     46    let b:match_words ..= s:not_end .. '\<asm\>:\<end\s\+asm\>,' ..
     47 	  \	  s:not_end .. '\<namespace\>:\<end\s\+namespace\>,' ..
     48 	  \	  s:not_end .. '\<union\>:\<end\s\+union\>,' ..
     49 	  \	  s:not_end .. '\<with\>:\<end\s\+with\>,'
     50  endif
     51 
     52  let b:match_words ..= s:not_end .. '\<enum\>:\<end\s\+enum\>,' ..
     53 	\     s:line_start .. '#\s*\%(if\|ifdef\|ifndef\)\>:' ..
     54 	\       s:line_start .. '#\s*\%(else\|elseif\)\>:' ..
     55 	\     s:line_start .. '#\s*endif\>,' ..
     56 	\     s:line_start .. '#\s*macro\>:' .. s:line_start .. '#\s*endmacro\>,' ..
     57 	\     "/':'/"
     58 
     59  " skip "function = <retval>" and "continue { do | for | while }"
     60  if s:dialect == "qb"
     61    let s:continue = "__continue"
     62  else
     63    let s:continue = "continue"
     64  endif
     65  let b:match_skip ..= ' || strpart(getline("."), col(".") - 1) =~? "^\\<function\\s\\+="' ..
     66 	  \    ' || strpart(getline("."), 0, col(".") ) =~? "\\<' .. s:continue .. '\\s\\+"'
     67 
     68  unlet s:not_end s:line_start
     69 endif
     70 
     71 if (has("gui_win32") || has("gui_gtk")) && exists("b:basic_set_browsefilter")
     72  let b:browsefilter = "FreeBASIC Source Files (*.bas)\t*.bas\n" ..
     73 	\      "FreeBASIC Header Files (*.bi)\t*.bi\n"
     74  if has("win32")
     75    let b:browsefilter ..= "All Files (*.*)\t*\n"
     76  else
     77    let b:browsefilter ..= "All Files (*)\t*\n"
     78  endif
     79 endif
     80 
     81 " Cleanup {{{1
     82 let &cpo = s:cpo_save
     83 unlet s:cpo_save s:dialect
     84 
     85 " vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: