kakoune(k) ========== NAME ---- highlighters - a Description ----------- Manipulation of the displayed text is done through highlighters, which can be added or removed with the following commands: --------------------------------------------------------------- add-highlighter ... --------------------------------------------------------------- and ----------------------------------- remove-highlighter ----------------------------------- *highlighter_id* is a name generated by the highlighter specified with *highlighter_name*, possibly dependent on the parameters. Use command completion in a prompt on the *remove-highlighter* command to see the existing highlighters ids. General highlighters -------------------- *regex* : ...:: highlight a regex, takes the regex as first parameter, followed by any number of face parameters. For example: --------------------------------------------------------------- add-highlighter regex //(\hTODO:)?[^\n] 0:cyan 1:yellow,red --------------------------------------------------------------- will highlight C++ style comments in cyan, with an eventual 'TODO:' in yellow on red background *dynregex*:: Similar to regex, but expand (like a command parameter would) the given expression before building a regex from the result *flag_lines* :: add a column in front of the buffer, and display the flags specified in , using *show_matching*:: highlight matching char of the character under the selections' cursor using MatchingChar face *show_whitespaces* [options]:: display symbols on top of whitespaces to make them more explicit using the Whitespace face, with the following *options*: *-lf* ::: a one character long separator that will replace line feeds *-spc* ::: a one character long separator that will replace spaces *-nbsp* ::: a one character long separator that will replace non-breakable spaces *-tab* ::: a one character long separator that will replace tabulations *-tabpad* ::: a one character long separator that will be appended to tabulations to honor the *tabstop* option *number_lines* [options]:: show line numbers, with the following *options*: *-relative*::: show line numbers relative to the main cursor line *-hlcursor*::: highlight the cursor line with a separate face *-separator* ::: specify a string to separate the line numbers column with the rest of the buffer (default is '|') *wrap* [options]:: soft wrap buffer text at window width, with the following *options*: *-word*::: wrap at word boundaries instead of codepoint boundaries. *-width *::: wrap text at *max_width* if the window is wider. *ranges* :: use the data in the range-specs option of the given name to highlight the buffer. The string part of the is interpretted as a face to apply to the range. *replace-ranges* :: use the data in the range-specs option of the given name to highlight the buffer. The string part of the is interpretted as a display line to display in place of the range. *fill* :: fill using the given *face*, mostly useful with regions highlighters Highlighting Groups ------------------- The group highlighter is a container for other highlighters. You can add a group to the current window using ---------------------------- add-highlighter group ---------------------------- The *-group* switch of the *add-highlighter* command provides a mean to add highlighters inside this group: ------------------------------------------------ add-highlighter -group ... ------------------------------------------------ Groups can contain other groups, the *-group* switch can be used to define a path as follows: ---------------------------------------------------------- add-highlighter -group group add-highlighter -group / ... ---------------------------------------------------------- Regions highlighters -------------------- A special highlighter provides a way to segment the buffer into regions, which are to be highlighted differently. *name*:: user defined, used to identify the region *opening*:: regex that defines the region start text *closing*:: regex that defines the region end text *recurse*:: regex that defines the text that matches recursively an end token into the region The *recurse* option is useful for regions that can be nested, for example the following contruct: ---------- %sh{ ... } ---------- accepts nested braces scopes ('{ ... }') so the following string is valid: ---------------------- %sh{ ... { ... } ... } ---------------------- This region can be defined with: ------------------------ shell_expand %sh\{ \} \{ ------------------------ Regions are used in the region highlighters which can take any number of regions. The following command: ------------------------------------------------------------------------------ add-highlighter regions ... ------------------------------------------------------------------------------ defines multiple regions in which other highlighters can be added as follows: ----------------------------------------------- add-highlighter -group / ... ----------------------------------------------- Regions are matched using the left-most rule: the left-most region opening starts a new region. When a region closes, the closest next opening start another region. That matches the rule governing most programming language parsing. Regions also supports a *-default * switch to define the default region, when no other region matches the current buffer range. If the *-match-capture* switch is passed, then region closing and recurse matches are considered valid for a given region opening match only if they matched the same content for the capture 1. Most programming languages can then be properly highlighted using a region highlighter as root: ----------------------------------------------------------------- add-highlighter regions -default code \ string \ comment add-highlighter -group /code ... add-highlighter -group /string ... add-highlighter -group /comment ... ----------------------------------------------------------------- Shared Highlighters ------------------- Highlighters are often defined for a specific filetype, and it makes then sense to share the highlighters between all the windows on the same filetypes. A shared highlighter can be defined with the following command: ---------------------------------------- add-highlighter -group / ... ---------------------------------------- When the group switch values starts with a '/', it references a group in the shared highlighters, rather than the window highlighters. The common case would be to create a named shared group, and then fill it with highlighters: -------------------------------------- add-highlighter -group / group add-highlighter -group /name regex ... -------------------------------------- It can then be referenced in a window using the ref highlighter. -------------------------- add-highlighter ref -------------------------- The ref can reference any named highlighter in the shared namespace.