Home Explore Blog CI



neovim

8th chunk of `runtime/doc/api.txt`
e70485a819a92f6a18b68bd4e72e83929622e7fe9f079fe90000000100000fa9
 'height': 2, 'col': 0,
        \ 'row': 1, 'anchor': 'NW', 'style': 'minimal'}
    let win = nvim_open_win(buf, 0, opts)
    " optional: change highlight, otherwise Pmenu is used
    call nvim_set_option_value('winhl', 'Normal:MyHighlight', {'win': win})
<

==============================================================================
Extended marks                       *api-extended-marks* *extmarks* *extmark*

Extended marks (extmarks) represent buffer annotations that track text changes
in the buffer. They can represent cursors, folds, misspelled words, anything
that needs to track a logical location in the buffer over time. |api-indexing|

Extmark position works like a "vertical bar" cursor: it exists between
characters. Thus, the maximum extmark index on a line is 1 more than the
character index: >

     f o o b a r      line contents
     0 1 2 3 4 5      character positions (0-based)
    0 1 2 3 4 5 6     extmark positions (0-based)

Extmarks have "forward gravity": if you place the cursor directly on an
extmark position and enter some text, the extmark migrates forward. >

     f o o|b a r      line (| = cursor)
          3           extmark

     f o o z|b a r    line (| = cursor)
            4         extmark (after typing "z")

If an extmark is on the last index of a line and you input a newline at that
point, the extmark will accordingly migrate to the next line: >

     f o o z b a r|   line (| = cursor)
                  7   extmark

     f o o z b a r    first line
                      extmarks (none present)
     |                second line (| = cursor)
     0                extmark (after typing <CR>)


Example:

Let's set an extmark at the first row (row=0) and third column (column=2).
|api-indexing| Passing id=0 creates a new mark and returns the id: >

      01 2345678
    0 ex|ample..
        ^ extmark position
<
>vim
    let g:mark_ns = nvim_create_namespace('myplugin')
    let g:mark_id = nvim_buf_set_extmark(0, g:mark_ns, 0, 2, {})
<
We can get the mark by its id: >vim

    echo nvim_buf_get_extmark_by_id(0, g:mark_ns, g:mark_id, {})
    " => [0, 2]

We can get all marks in a buffer by |namespace| (or by a range): >vim

    echo nvim_buf_get_extmarks(0, g:mark_ns, 0, -1, {})
    " => [[1, 0, 2]]

Deleting all surrounding text does NOT remove an extmark! To remove extmarks
use |nvim_buf_del_extmark()|. Deleting "x" in our example: >

      0 12345678
    0 e|ample..
       ^ extmark position
<
>vim
    echo nvim_buf_get_extmark_by_id(0, g:mark_ns, g:mark_id, {})
    " => [0, 1]
<
    Note: Extmark "gravity" decides how it will shift after a text edit.
          See |nvim_buf_set_extmark()|

Namespaces allow any plugin to manage only its own extmarks, ignoring those
created by another plugin.

Extmark positions changed by an edit will be restored on undo/redo. Creating
and deleting extmarks is not a buffer change, thus new undo states are not
created for extmark changes.

==============================================================================
Global Functions                                                  *api-global*

nvim_chan_send({chan}, {data})                              *nvim_chan_send()*
    Send data to channel `id`. For a job, it writes it to the stdin of the
    process. For the stdio channel |channel-stdio|, it writes to Nvim's
    stdout. For an internal terminal instance (|nvim_open_term()|) it writes
    directly to terminal output. See |channel-bytes| for more information.

    This function writes raw data, not RPC messages. If the channel was
    created with `rpc=true` then the channel expects RPC messages, use
    |vim.rpcnotify()| and |vim.rpcrequest()| instead.

    Attributes: ~
        |RPC| only
        Lua |vim.api| only
        Since: 0.5.0

    Parameters: ~
      • {chan}  id of the channel
      • {data}  data to write. 8-bit clean: can contain NUL bytes.

nvim_create_buf({listed}, {scratch})                       *nvim_create_buf()*
    Creates a new, empty, unnamed

Title: Extended Marks and Global Functions in Nvim API
Summary
This section describes extended marks (extmarks), how they track text changes in a buffer, and their behavior with text insertion and deletion. It provides examples of setting, getting, and deleting extmarks. It also describes global functions, particularly `nvim_chan_send()`, for sending data to channels, and `nvim_create_buf()`, for creating new buffers.