To properly handle syntax highlighting, vi and viw use syntax configuration files that describe how the syntax for a given programming, scripting, or mark-up language should be highlighted. While several syntax configuration files are included with MKS Toolkit, you can also create new configuration files to handle additional languages.
These configuration files must have a .viw extension. When the vi option variable syntaxlanguage is set to DETECT, vi searches for the appropriate syntax configuration file to use. This file will be of the form ext.viw where ext is the file extension of the file being edited. vi first looks for this file in the $HOME/syntax directory and, if not found, in the $ROOTDIR/etc/syntax directory.
When you install MKS Toolkit, a number of syntax configuration files are installed in $ROOTDIR/etc/syntax. To determine which syntax configuration file should be used to highlight which file name. vi use syntax map files as described in the Syntax Map Files section.
Syntax configuration files are flat text files. They contain five types of lines:
Lines that start with the # character.
Lines that start with the syntaxGroup statement.
Lines that start with the hilightGroup statement.
Lines the specify the value of a boolean flag.
A line beginning with # is a comment lines and is ignored by vi. Blank lines are also ignored.
A line beginning with syntaxGroup defines a syntax group and specifies which commands, key words, strings, and blocks are assigned to that group. For instance, in a syntax configuration file for the C programming language, the key words if and while might be assigned to a syntax group named cConditional while the keywords int and char might be assigned to one named cDatatype. Similarly, a string beginning with // might be assigned to lineComment, a block that starts with /* and ends with */ might be assigned to blockComment, and some strings beginning with # (such as #include) might be assigned to cPreProcessor.
A line beginning with hilightGroup defines a mapping of syntax groups to a highlight group. The highlight group defines color is used to displayed members of the mapped syntax group. Continuing with the C language example, the cConditional, cDatatype, and cPreprocessor syntax groups might be mapped to the Keyword highlight group, while the lineComment and blockComment syntax groups might be mapped to the Comment highlight group.
Lines that specify the value of a boolean flag can change the behavior of the pattern matching used by the syntaxGroup statements.
A syntaxGroup statement has one of the following formats:
syntaxGroup syntax_group_name keyword_list syntaxGroup syntax_group_name startStr="start_string" endStr="end_string" syntaxGroup syntax_group_name startStr="start_string" endStr="EOLPAT" syntaxGroup syntax_group_name startStr="start_string" keyword_list
The individual elements of these formats are defined as follows:
syntax_group_name is an alphanumeric string that describes the syntax group. This string can be a maximum of 31 characters in length.
For the purposes of this reference page, an alphanumeric string must begin with a letter and can only contain letters, digits, and the underscore character (_).
keyword_list is a list of one or more alphanumeric language keywords separated by spaces. Each keyword will be highlighted with the same color as determined by an appropriate hilightGroup statement. keyword_list can be a maximum of 4097 characters in length. It is not necessary for keyword_list to contain all keywords that you want to assign to a given syntax group. You can specify additional keywords by using another syntaxGroup statement with the same syntax_group_name.
startStr="start_string" and endStr="end_string" specify the start and end of a block of characters, The block begins with start_string and ends with end_string and will be highlighted with the color determined by the appropriate hilightGroup statement. start_string and end_string each have a maximum length of 31 characters.
When endStr="EOLPAT", the block of characters ends when end-of-line (EOL) is encountered.
startStr="start_string" in conjunction with keyword_list defines a list of keywords that have special significance when preceded by start_string. All keywords starting with the same start_string must be specified with a single statement of this type. start_string and keyword_list can be a maximum of 31 characters and 4097 characters, respectively.
The hilightGroup statement has the following format:
hilightGroup highlight_group_name syntax_group_name_list
The individual elements formats are defined as follows:
highlight_group_name is one of the pre-determined list of highlight groups supported by vi:
Conditional or Cond Keyword or Key PreProcessor or Preproc Comment Datatype or Data Operator or Oper Constant or Const Function or Func Structure or Struct Expression or Expr
This name is case-insensitive. By default, each highlight group is displayed by vi using a particular color. The color used to display a particular group may be changed by using the appropriate vi option variable. See the Set Option Variables section of the vi reference page for more details.
syntax_group_name_list is a list of one or more syntax_group_names, as specified in a previous syntaxGroup statement, and separated by spaces.
The format for setting a boolean flag is:
where boolean_flag is the name of the flag to be set and value is either 0 or 1.
The following boolean flags are currently supported:
When set to 1, syntax patterns are case sensitive. When set to 0, they are case insensitive. By default, syntax patterns are case insensitive.
When set to 1, syntax highlighting occurs inside of double quotes. When set to 0, double quotes do not allow highlighting inside of them. By default, syntax highlighting does not occur within double quotes.
When set to 1, syntax highlighting works like the C language where multiline string constants must be continued by appending a \ at the end of the line. When set to 0, it works like shell scripts where strings continue without \. For example:
echo "starting and continuing"
By default, syntax highlighting works like C.
The following is an excerpt from the c.viw provided with MKS Toolkit:
# Comments syntaxGroup cComment1 startStr="/*" endStr="*/" syntaxGroup cComment2 startStr="//" endStr="EOLPAT" # Preprocessor keywords start with # syntaxGroup cPreProc1 startStr="#" if ifdef endif else elif define undef ifndef # Keywords used in conditional or iterative statements syntaxGroup cCond break case continue do else if switch while # Keywords for datatypes syntaxGroup cType1 bool char class double enum float int long short syntaxGroup cType2 signed struct typedef union unsigned void wchar_t # Known Constants syntaxGroup cConst NULL TRUE FALSE # Keywords or strings used for operators. syntaxGroup cplusOper1 and and_eq bitand bitor const_cast dynamic_cast syntaxGroup cplusOper2 not not_eq operator or or_eq xor xor_eq syntaxGroup cplusOper3 sizeof static_cast reinterpret_cast syntaxGroup cOtherKey1 asm auto catch delete explicit syntaxGroup cOtherKey1 export extern false friend goto inline mutable syntaxGroup cOtherKey2 namespace new private protected public pure syntaxGroup cOtherKey2 register return static template syntaxGroup cOtherKey3 this throw true try typeid typename using syntaxGroup cOtherKey3 virtual volatile const # Map syntax groups to hilight groups. hilightGroup Conditional cCond hilightGroup Keyword cOtherKey1 cOtherKey2 cOtherKey3 hilightGroup PreProc cPreProc1 cPreProc2 hilightGroup Comment cComment1 cComment2 hilightGroup Type cType1 cType2 hilightGroup Operator cplusOper1 cplusOper2 cplusOper3 hilightGroup Const cConst
As mentioned earlier, vi uses syntax map files to associate extensions and file names with syntax configuration files. The provided $ROOTDIR/etc/syntax/syntax.map file includes mappings for several common extensions and file names:
File or Extension File .c, .h, .cc, .cpp, .hpp c.viw .i asm.viw .bat, .cmd bat.viw .jav, .java java.viw .htm, .html, .sgm, .sgml, .xml html.viw .jj, .jjt javacc.viw .csh csh.viw .sh, .ksh sh.viw .pl perl.viw .php php.viw .mk make.viw makefile make.viw .profile sh.viw
If you change or replace any of the listed files or place a file of the same name in your $HOME/syntax directory, that file is used instead.
You can override the associations given in the $ROOTDIR/etc/syntax/syntax.map file by creating a $HOME/syntax/syntax.map file. This file consists of a list of regular expressions and associated syntax configuration files. Each entry consists of a regular expression followed by white space and the name of the associated syntax configuration file. For example, a $HOME/syntax/syntax.map map containing:
.*[.]cpp cpp.viw .*[.]tst test.viw
indicates that syntax highlighting for files with a .cpp extension should use cpp.viw instead of the normal c.viw. Similarly, it adds a new association for files with a .tst extension. These files will use the test.viw syntax file to determine syntax highlighting.
MKS Toolkit for System Administrators
MKS Toolkit for Developers
MKS Toolkit for Interoperability
MKS Toolkit for Professional Developers
MKS Toolkit for Enterprise Developers
MKS Toolkit for Enterprise Developers 64-Bit Edition
MKS Toolkit 9.5 Documentation Build 3.