neovim

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

forth.vim (2031B)


      1 " Vim filetype plugin
      2 " Language:	Forth
      3 " Maintainer:	Johan Kotlinski <kotlinski@gmail.com>
      4 " Last Change:	2023 Sep 15
      5 "		2024 Jan 14 by Vim Project (browsefilter)
      6 " URL:		https://github.com/jkotlinski/forth.vim
      7 
      8 if exists("b:did_ftplugin")
      9  finish
     10 endif
     11 let b:did_ftplugin = 1
     12 
     13 let s:cpo_save = &cpo
     14 set cpo&vim
     15 
     16 setlocal commentstring=\\\ %s
     17 setlocal comments=s:(,mb:\ ,e:),b:\\
     18 setlocal iskeyword=33-126,128-255
     19 
     20 let s:include_patterns =<< trim EOL
     21 
     22  \<\%(INCLUDE\|REQUIRE\)\>\s\+\zs\k\+\ze
     23  \<S"\s\+\zs[^"]*\ze"\s\+\%(INCLUDED\|REQUIRED\)\>
     24 EOL
     25 let &l:include = $'\c{ s:include_patterns[1:]->join('\|') }'
     26 
     27 let s:define_patterns =<< trim EOL
     28  :
     29  [2F]\=CONSTANT
     30  [2F]\=VALUE
     31  [2F]\=VARIABLE
     32  BEGIN-STRUCTURE
     33  BUFFER:
     34  CODE
     35  CREATE
     36  MARKER
     37  SYNONYM
     38 EOL
     39 let &l:define = $'\c\<\%({ s:define_patterns->join('\|') }\)'
     40 
     41 " assume consistent intra-project file extensions
     42 let &l:suffixesadd = "." .. expand("%:e")
     43 
     44 let b:undo_ftplugin = "setl cms< com< def< inc< isk< sua<"
     45 
     46 if exists("loaded_matchit") && !exists("b:match_words")
     47  let s:matchit_patterns =<< trim EOL
     48 
     49    \<\:\%(NONAME\)\=\>:\<EXIT\>:\<;\>
     50    \<IF\>:\<ELSE\>:\<THEN\>
     51    \<\[IF]\>:\<\[ELSE]\>:\<\[THEN]\>
     52    \<?\=DO\>:\<LEAVE\>:\<+\=LOOP\>
     53    \<CASE\>:\<ENDCASE\>
     54    \<OF\>:\<ENDOF\>
     55    \<BEGIN\>:\<WHILE\>:\<\%(AGAIN\|REPEAT\|UNTIL\)\>
     56    \<CODE\>:\<END-CODE\>
     57    \<BEGIN-STRUCTURE\>:\<END-STRUCTURE\>
     58  EOL
     59  let b:match_ignorecase = 1
     60  let b:match_words = s:matchit_patterns[1:]->join(',')
     61  let b:undo_ftplugin ..= "| unlet! b:match_ignorecase b:match_words"
     62  unlet s:matchit_patterns
     63 endif
     64 
     65 if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
     66  let b:browsefilter = "Forth Source Files (*.f, *.fs, *.ft, *.fth, *.4th)\t*.f;*.fs;*.ft;*.fth;*.4th\n"
     67  if has("win32")
     68    let b:browsefilter ..= "All Files (*.*)\t*\n"
     69  else
     70    let b:browsefilter ..= "All Files (*)\t*\n"
     71  endif
     72  let b:undo_ftplugin ..= " | unlet! b:browsefilter"
     73 endif
     74 
     75 let &cpo = s:cpo_save
     76 unlet s:cpo_save
     77 unlet s:define_patterns s:include_patterns