139 lines
5.0 KiB
Plaintext
139 lines
5.0 KiB
Plaintext
|
*textprop.txt* For Vim version 8.1. Last change: 2019 Jan 08
|
||
|
|
||
|
|
||
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||
|
|
||
|
|
||
|
Displaying text with properties attached. *text-properties*
|
||
|
|
||
|
THIS IS UNDER DEVELOPMENT - ANYTHING MAY STILL CHANGE *E967*
|
||
|
|
||
|
What is not working yet:
|
||
|
- Adjusting column/length when inserting text
|
||
|
- Text properties spanning more than one line
|
||
|
- prop_find()
|
||
|
- callbacks when text properties are outdated
|
||
|
|
||
|
|
||
|
1. Introduction |text-prop-intro|
|
||
|
2. Functions |text-prop-functions|
|
||
|
3. When text changes |text-prop-changes|
|
||
|
|
||
|
|
||
|
{Vi does not have text properties}
|
||
|
{not able to use text properties when the |+textprop| feature was
|
||
|
disabled at compile time}
|
||
|
|
||
|
==============================================================================
|
||
|
1. Introduction *text-prop-intro*
|
||
|
|
||
|
Text properties can be attached to text in a buffer. They will move with the
|
||
|
text: If lines are deleted or inserted the properties move with the text they
|
||
|
are attached to. Also when inserting/deleting text in the line before the
|
||
|
text property. And when inserting/deleting text inside the text property, it
|
||
|
will increase/decrease in size.
|
||
|
|
||
|
The main use for text properties is to highlight text. This can be seen as a
|
||
|
replacement for syntax highlighting. Instead of defining patterns to match
|
||
|
the text, the highlighting is set by a script, possibly using the output of an
|
||
|
external parser. This only needs to be done once, not every time when
|
||
|
redrawing the screen, thus can be much faster, after the initial cost of
|
||
|
attaching the text properties.
|
||
|
|
||
|
Text properties can also be used for other purposes to identify text. For
|
||
|
example, add a text property on a function name, so that a search can be
|
||
|
defined to jump to the next/previous function.
|
||
|
|
||
|
A text property is attached at a specific line and column, and has a specified
|
||
|
length. The property can span multiple lines.
|
||
|
|
||
|
A text property has these fields:
|
||
|
"id" a number to be used as desired
|
||
|
"type" the name of a property type
|
||
|
|
||
|
|
||
|
Property Types ~
|
||
|
*E971*
|
||
|
A text property normally has the name of a property type, which defines
|
||
|
how to highlight the text. The property type can have these entries:
|
||
|
"highlight" name of the highlight group to use
|
||
|
"priority" when properties overlap, the one with the highest
|
||
|
priority will be used.
|
||
|
"start_incl" when TRUE inserts at the start position will be
|
||
|
included in the text property
|
||
|
"end_incl" when TRUE inserts at the end position will be
|
||
|
included in the text property
|
||
|
|
||
|
|
||
|
Example ~
|
||
|
|
||
|
Suppose line 11 in a buffer has this text (excluding the indent):
|
||
|
|
||
|
The number 123 is smaller than 4567.
|
||
|
|
||
|
To highlight the numbers in this text: >
|
||
|
call prop_type_add('number', {'highlight': 'Constant'})
|
||
|
call prop_add(11, 12, {'length': 3, 'type': 'number'})
|
||
|
call prop_add(11, 32, {'length': 4, 'type': 'number'})
|
||
|
|
||
|
Try inserting or deleting lines above the text, you will see that the text
|
||
|
properties stick to the text, thus the line number is adjusted as needed.
|
||
|
|
||
|
Setting "start_incl" and "end_incl" is useful when white space surrounds the
|
||
|
text, e.g. for a function name. Using false is useful when the text starts
|
||
|
and/or ends with a specific character, such as the quote surrounding a string.
|
||
|
|
||
|
func FuncName(arg) ~
|
||
|
^^^^^^^^ property with start_incl and end_incl set
|
||
|
|
||
|
var = "text"; ~
|
||
|
^^^^^^ property with start_incl and end_incl not set
|
||
|
|
||
|
Nevertheless, when text is inserted or deleted the text may need to be parsed
|
||
|
and the text properties updated. But this can be done asynchronously.
|
||
|
|
||
|
==============================================================================
|
||
|
2. Functions *text-prop-functions*
|
||
|
|
||
|
Manipulating text property types:
|
||
|
|
||
|
prop_type_add({name}, {props}) define a new property type
|
||
|
prop_type_change({name}, {props}) change an existing property type
|
||
|
prop_type_delete({name} [, {props}]) delete a property type
|
||
|
prop_type_get([{name} [, {props}]) get property type values
|
||
|
prop_type_list([{props}]) get list of property types
|
||
|
|
||
|
|
||
|
Manipulating text properties:
|
||
|
|
||
|
prop_add({lnum}, {col}, {props}) add a text property
|
||
|
prop_clear({lnum} [, {lnum-end} [, {bufnr}]])
|
||
|
remove all text properties
|
||
|
prop_find({props} [, {direction}]) search for a text property
|
||
|
prop_list({lnum} [, {props}) text properties in {lnum}
|
||
|
prop_remove({props} [, {lnum} [, {lnum-end}]])
|
||
|
remove a text property
|
||
|
|
||
|
==============================================================================
|
||
|
3. When text changes *text-prop-changes*
|
||
|
|
||
|
Vim will do its best to keep the text properties on the text where it was
|
||
|
attached. When inserting or deleting text the properties after the change
|
||
|
will move accordingly.
|
||
|
|
||
|
When text is deleted and a text property no longer includes any text, it is
|
||
|
deleted. However, a text property that was defined as zero-width will remain,
|
||
|
unless the whole line is deleted.
|
||
|
|
||
|
When using replace mode, the text properties stay on the same character
|
||
|
positions, even though the characters themselves change.
|
||
|
|
||
|
|
||
|
When text property columns are not updated ~
|
||
|
|
||
|
- When setting the line with |setline()| or through an interface, such as Lua,
|
||
|
Tcl or Python.
|
||
|
|
||
|
|
||
|
vim:tw=78:ts=8:noet:ft=help:norl:
|