spacevim/bundle/nvim-yarp/README.md
JIe 2bb7059579
Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
init
2024-08-21 14:17:26 +08:00

121 lines
2.4 KiB
Markdown

# Yet Another Remote Plugin Framework for Neovim
This is my attempt on writing a remote plugin framework without
`:UpdateRemotePlugins`.
## Requirements
- `has('python3')`
- For Vim 8:
- [roxma/vim-hug-neovim-rpc](https://github.com/roxma/vim-hug-neovim-rpc)
- `g:python3_host_prog` pointed to your python3 executable, or `echo
exepath('python3')` is not empty.
- [pynvim](https://github.com/neovim/pynvim) (`pip3
install pynvim`)
## Use case
- [shougo/deoplete.nvim](https://github.com/shougo/deoplete.nvim)
- [ncm2/ncm2](https://github.com/ncm2/ncm2) and most of its plugins
## Usage
pythonx/hello.py
```python
import vim, time
def greet():
time.sleep(3)
vim.command('echo "Hello world"')
```
plugin/hello.vim
```vim
" Create a python3 process running the hello module. The process is lazy load.
let s:hello = yarp#py3('hello')
com HelloSync call s:hello.request('greet')
com HelloAsync call s:hello.notify('greet')
" You could type :Hello greet
com -nargs=1 Hello call s:hello.request(<f-args>)
```
## Debugging
Add logging settigns to your vimrc. Log files will be generated with prefix
`/tmp/nvim_log`. An alternative is to export environment variables before
starting vim/nvim.
```vim
let $NVIM_PYTHON_LOG_FILE="/tmp/nvim_log"
let $NVIM_PYTHON_LOG_LEVEL="DEBUG"
```
## Example for existing neovim rplugin porting to Vim 8
More realistic examples could be found at
[nvim-typescript#84](https://github.com/mhartington/nvim-typescript/pull/84),
[deoplete#553](https://github.com/Shougo/deoplete.nvim/pull/553),
[callmekohei/quickdebug](https://github.com/callmekohei/quickdebug).
Now let's consider the following simple rplugin.
After `UpdateRemotePlugins` and restarting neovim, you get `foobar` by `:echo
Bar()`.
```python
# rplugin/python3/foo.py
import pynvim
@pynvim.plugin
class Foo(object):
def __init__(self, vim):
self._vim = vim
@pynvim.function("Bar", sync=True)
def bar(self, args):
return 'hello' + str(args)
```
For working on Vim 8, you need to add these two files:
```vim
" plugin/foo.vim
if has('nvim')
finish
endif
let s:foo = yarp#py3('foo_wrap')
func! Bar(v)
return s:foo.call('bar',a:v)
endfunc
```
```python
# pythonx/foo_wrap.py
from foo import Foo as _Foo
import vim
_obj = _Foo(vim)
def bar(*args):
return _obj.bar(args)
```
How to use
```
$ vim
: echo bar('world')
hello('world',)
```