Mercurial > vim
view runtime/syntax/ibasic.vim @ 33399:95db67c7b754 v9.0.1958
patch 9.0.1958: cannot complete option values
Commit: https://github.com/vim/vim/commit/900894b09a95398dfc75599e9f0aa2ea25723384
Author: Yee Cheng Chin <ychin.git@gmail.com>
Date: Fri Sep 29 20:42:32 2023 +0200
patch 9.0.1958: cannot complete option values
Problem: cannot complete option values
Solution: Add completion functions for several options
Add cmdline tab-completion for setting string options
Add tab-completion for setting string options on the cmdline using
`:set=` (along with `:set+=` and `:set-=`).
The existing tab completion for setting options currently only works
when nothing is typed yet, and it only fills in with the existing value,
e.g. when the user does `:set diffopt=<Tab>` it will be completed to
`set diffopt=internal,filler,closeoff` and nothing else. This isn't too
useful as a user usually wants auto-complete to suggest all the possible
values, such as 'iblank', or 'algorithm:patience'.
For set= and set+=, this adds a new optional callback function for each
option that can be invoked when doing completion. This allows for each
option to have control over how completion works. For example, in
'diffopt', it will suggest the default enumeration, but if `algorithm:`
is selected, it will further suggest different algorithm types like
'meyers' and 'patience'. When using set=, the existing option value will
be filled in as the first choice to preserve the existing behavior. When
using set+= this won't happen as it doesn't make sense.
For flag list options (e.g. 'mouse' and 'guioptions'), completion will
take into account existing typed values (and in the case of set+=, the
existing option value) to make sure it doesn't suggest duplicates.
For set-=, there is a new `ExpandSettingSubtract` function which will
handle flag list and comma-separated options smartly, by only suggesting
values that currently exist in the option.
Note that Vim has some existing code that adds special handling for
'filetype', 'syntax', and misc dir options like 'backupdir'. This change
preserves them as they already work, instead of converting to the new
callback API for each option.
closes: #13182
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Fri, 29 Sep 2023 20:45:04 +0200 |
parents | e63691e7c504 |
children |
line wrap: on
line source
" Vim syntax file " Language: ibasic " Maintainer: Mark Manning <markem@airmail.net> " Originator: Allan Kelly <Allan.Kelly@ed.ac.uk> " Created: 10/1/2006 " Updated: 10/21/2006 " Description: A vim file to handle the IBasic file format. " Notes: " Updated by Mark Manning <markem@airmail.net> " Applied IBasic support to the already excellent support for standard " basic syntax (like QB). " " First version based on Micro$soft QBASIC circa 1989, as documented in " 'Learn BASIC Now' by Halvorson&Rygmyr. Microsoft Press 1989. " This syntax file not a complete implementation yet. " Send suggestions to the maintainer. " " This version is based upon the commands found in IBasic (www.pyxia.com). " MEM 10/6/2006 " " Quit when a (custom) syntax file was already loaded (Taken from c.vim) " if exists("b:current_syntax") finish endif " " Be sure to turn on the "case ignore" since current versions of basic " support both upper as well as lowercase letters. " syn case ignore " " A bunch of useful BASIC keywords " syn keyword ibasicStatement beep bload bsave call absolute chain chdir circle syn keyword ibasicStatement clear close cls color com common const data syn keyword ibasicStatement loop draw end environ erase error exit field syn keyword ibasicStatement files function get gosub goto syn keyword ibasicStatement input input# ioctl key kill let line locate syn keyword ibasicStatement lock unlock lprint using lset mkdir name syn keyword ibasicStatement on error open option base out paint palette pcopy syn keyword ibasicStatement pen play pmap poke preset print print# using pset syn keyword ibasicStatement put randomize read redim reset restore resume syn keyword ibasicStatement return rmdir rset run seek screen syn keyword ibasicStatement shared shell sleep sound static stop strig sub syn keyword ibasicStatement swap system timer troff tron type unlock syn keyword ibasicStatement view wait width window write syn keyword ibasicStatement date$ mid$ time$ " " Do the basic variables names first. This is because it " is the most inclusive of the tests. Later on we change " this so the identifiers are split up into the various " types of identifiers like functions, basic commands and " such. MEM 9/9/2006 " syn match ibasicIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>" syn match ibasicGenericFunction "\<[a-zA-Z_][a-zA-Z0-9_]*\>\s*("me=e-1,he=e-1 " " Function list " syn keyword ibasicBuiltInFunction abs asc atn cdbl cint clng cos csng csrlin cvd cvdmbf syn keyword ibasicBuiltInFunction cvi cvl cvs cvsmbf eof erdev erl err exp fileattr syn keyword ibasicBuiltInFunction fix fre freefile inp instr lbound len loc lof syn keyword ibasicBuiltInFunction log lpos mod peek pen point pos rnd sadd screen seek syn keyword ibasicBuiltInFunction setmem sgn sin spc sqr stick strig tab tan ubound syn keyword ibasicBuiltInFunction val valptr valseg varptr varseg syn keyword ibasicBuiltInFunction chr\$ command$ date$ environ$ erdev$ hex$ inkey$ syn keyword ibasicBuiltInFunction input$ ioctl$ lcases$ laft$ ltrim$ mid$ mkdmbf$ mkd$ syn keyword ibasicBuiltInFunction mki$ mkl$ mksmbf$ mks$ oct$ right$ rtrim$ space$ syn keyword ibasicBuiltInFunction str$ string$ time$ ucase$ varptr$ syn keyword ibasicTodo contained TODO syn cluster ibasicFunctionCluster contains=ibasicBuiltInFunction,ibasicGenericFunction syn keyword Conditional if else then elseif endif select case endselect syn keyword Repeat for do while next enddo endwhile wend syn keyword ibasicTypeSpecifier single double defdbl defsng syn keyword ibasicTypeSpecifier int integer uint uinteger int64 uint64 defint deflng syn keyword ibasicTypeSpecifier byte char string istring defstr syn keyword ibasicDefine dim def declare " "catch errors caused by wrong parenthesis " syn cluster ibasicParenGroup contains=ibasicParenError,ibasicIncluded,ibasicSpecial,ibasicTodo,ibasicUserCont,ibasicUserLabel,ibasicBitField syn region ibasicParen transparent start='(' end=')' contains=ALLBUT,@bParenGroup syn match ibasicParenError ")" syn match ibasicInParen contained "[{}]" " "integer number, or floating point number without a dot and with "f". " syn region ibasicHex start="&h" end="\W" syn region ibasicHexError start="&h\x*[g-zG-Z]" end="\W" syn match ibasicInteger "\<\d\+\(u\=l\=\|lu\|f\)\>" " "floating point number, with dot, optional exponent " syn match ibasicFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>" " "floating point number, starting with a dot, optional exponent " syn match ibasicFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" " "floating point number, without dot, with exponent " syn match ibasicFloat "\<\d\+e[-+]\=\d\+[fl]\=\>" " "hex number " syn match ibasicIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>" syn match ibasicFunction "\<[a-zA-Z_][a-zA-Z0-9_]*\>\s*("me=e-1,he=e-1 syn case match syn match ibasicOctalError "\<0\o*[89]" " " String and Character contstants " syn region ibasicString start='"' end='"' contains=ibasicSpecial,ibasicTodo syn region ibasicString start="'" end="'" contains=ibasicSpecial,ibasicTodo " " Comments " syn match ibasicSpecial contained "\\." syn region ibasicComment start="^rem" end="$" contains=ibasicSpecial,ibasicTodo syn region ibasicComment start=":\s*rem" end="$" contains=ibasicSpecial,ibasicTodo syn region ibasicComment start="\s*'" end="$" contains=ibasicSpecial,ibasicTodo syn region ibasicComment start="^'" end="$" contains=ibasicSpecial,ibasicTodo " " Now do the comments and labels " syn match ibasicLabel "^\d" syn region ibasicLineNumber start="^\d" end="\s" " " Pre-compiler options : FreeBasic " syn region ibasicPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=ibasicString,ibasicCharacter,ibasicNumber,ibasicCommentError,ibasicSpaceError syn match ibasicInclude "^\s*#\s*include\s*" " " Create the clusters " syn cluster ibasicNumber contains=ibasicHex,ibasicInteger,ibasicFloat syn cluster ibasicError contains=ibasicHexError " " Used with OPEN statement " syn match ibasicFilenumber "#\d\+" " "syn sync ccomment ibasicComment " syn match ibasicMathOperator "[\+\-\=\|\*\/\>\<\%\()[\]]" contains=ibasicParen " " The default methods for highlighting. Can be overridden later " hi def link ibasicLabel Label hi def link ibasicConditional Conditional hi def link ibasicRepeat Repeat hi def link ibasicHex Number hi def link ibasicInteger Number hi def link ibasicFloat Number hi def link ibasicError Error hi def link ibasicHexError Error hi def link ibasicStatement Statement hi def link ibasicString String hi def link ibasicComment Comment hi def link ibasicLineNumber Comment hi def link ibasicSpecial Special hi def link ibasicTodo Todo hi def link ibasicGenericFunction Function hi def link ibasicBuiltInFunction Function hi def link ibasicTypeSpecifier Type hi def link ibasicDefine Type hi def link ibasicInclude Include hi def link ibasicIdentifier Identifier hi def link ibasicFilenumber ibasicTypeSpecifier hi def link ibasicMathOperator Operator let b:current_syntax = "ibasic" " vim: ts=8