Home Explore Blog CI



neovim

3rd chunk of `runtime/doc/channel.txt`
044bdc8b993625e5b90d92679ab643b6cf82a13c9fbca5700000000100000939
 TTY, or if Nvim is |--headless| it uses default values: >vim
    :echo system('nvim --headless +"te stty -a" +"sleep 1" +"1,/^$/print" +q')

==============================================================================
3. Communicating with msgpack RPC			      *channel-rpc*

When channels are opened with the `rpc` option set to true, the channel can be
used for remote method calls in both directions, see |msgpack-rpc|. Note that
rpc channels are implicitly trusted and the process at the other end can
invoke any |API| function!

==============================================================================
4. Standard IO channel					    *channel-stdio*

Nvim uses stdin/stdout to interact with the user over the terminal interface
(TUI). If Nvim is |--headless| the TUI is not started and stdin/stdout can be
used as a channel. See also |--embed|.

Call |stdioopen()| during |startup| to open the stdio channel as |channel-id| 1.
Nvim's stderr is always available as |v:stderr|, a write-only bytes channel.

Example: >vim
    func! OnEvent(id, data, event)
      if a:data == [""]
        quit
      end
      call chansend(a:id, map(a:data, {i,v -> toupper(v)}))
    endfunc
    call stdioopen({'on_stdin': 'OnEvent'})
<
Put this in `uppercase.vim` and run:  >bash
    nvim --headless --cmd "source uppercase.vim"

==============================================================================
5. Using a prompt buffer				*prompt-buffer*

If you want to type input for the job in a Vim window you have a few options:
- Use a normal buffer and handle all possible commands yourself.
  This will be complicated, since there are so many possible commands.
- Use a terminal window.  This works well if what you type goes directly to
  the job and the job output is directly displayed in the window.
  See |terminal|.
- Use a window with a prompt buffer. This works well when entering a line for
  the job in Vim while displaying (possibly filtered) output from the job.

A prompt buffer is created by setting 'buftype' to "prompt". You would
normally only do that in a newly created buffer.

The user can edit and enter one line of text at the very last line of the
buffer.  When pressing Enter in the prompt line the callback set with
|prompt_setcallback()| is invoked.  It would normally send the line to a job.
Another callback would receive the output

Title: Nvim Channels: RPC, Standard IO, and Prompt Buffer
Summary
This section describes msgpack RPC via Nvim channels, emphasizing the trust relationship. It explains how standard input/output can be used as a channel, particularly in headless mode, providing an example. Additionally, it introduces prompt buffers, which allow users to type input for jobs within a Vim window, triggered by pressing Enter.