UNPKG

@chemzqm/neovim

Version:

NodeJS client API for vim9 and neovim

108 lines (69 loc) 2.89 kB
# neovim-client <a href="https://github.com/neoclide/neovim/actions"><img alt="Actions" src="https://img.shields.io/github/actions/workflow/status/neoclide/neovim/ci.yml?style=flat-square&branch=neoclide"></a> Fork of [neovim/node-client](https://github.com/neovim/node-client) which works on both vim9 and neovim. Currently works on node >= 8. This module is used by [coc.nvim](https://github.com/neoclide/coc.nvim), you can use this module to create extension for vim9 and neovim, but it's recommended to build extension for coc.nvim. ## Build from source code Git clone then run `npm install`. ## API ```typescript import {attach, NeovimClient} from '@chemzqm/neovim' // attach option could be ReadableStream & WritableStream or ChildProcess or socket string const nvim: NeovimClient = attach({ reader: process.stdin, writer: process.stdout }) // current buffer object let buf = await nvim.buffer // current window object let win = await nvim.window // current tabpage object let tabpage = await nvim.tabpage ``` ## Debug on vim9 Build this module from source code, in root of project folder, start the server by command: `vim -u mini.vim`. Checkout the vim9's log file by `:Openlog` command. Checkout log of node-client by open the file `$XDG_RUNTIME_DIR/node-client.log`. To change the behavior, change the file `mini.vim` and `./bin/server.js` which are used for test purpose. ## Debugging / troubleshooting Default location for log file would be `$XDG_RUNTIME_DIR/node-client.log`. Use `$NODE_CLIENT_LOG_FILE` to specify full path of the log. Use `$NODE_CLIENT_LOG_LEVEL` to specify the log level, which default to `info`, could also be `debug` or `trace`. Use `let g:node_client_debug = 1` in vim9 to enable logfile of vim9, use `:call nvim#rpc#open_log()` to open vim9 logfile. ### Usage through node REPL The feature need build this module from source code. #### Connect to neovim First, start Nvim with a known address (or use the \$NVIM_LISTEN_ADDRESS of a running instance): NVIM_LISTEN_ADDRESS=/tmp/nvim nvim In another terminal, cd to root of this module then start node REPL by: NVIM_LISTEN_ADDRESS=/tmp/nvim node connect to Nvim: ```javascript let nvim // `scripts/nvim` will detect if `NVIM_LISTEN_ADDRESS` is set and use that unix socket const nvim = require('./scripts/nvim') vim.command('vsp') ``` #### Connect to vim9 First start node repl by `NVIM_REMOTE_ADDRESS=/tmp/client-vim.sock node` command. Start remote server by javascript: ```javascript const nvim = await require('./scripts/vim') ``` the command to start vim will be printed to stdout. In other terminal and inside this project folder, run command: ```sh NVIM_REMOTE_ADDRESS=/tmp/client-vim.sock vim -c 'source start.vim' ``` `start.vim` add the project directory to vim's `runtimepath` and connect to the server. Not work on windows yet. ## LICENSE MIT