• Stars
    star
    228
  • Rank 175,267 (Top 4 %)
  • Language
    Vim Script
  • License
    MIT License
  • Created about 7 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Yet Another Remote Plugin Framework for Neovim

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
    • g:python3_host_prog pointed to your python3 executable, or echo exepath('python3') is not empty.
    • pynvim (pip3 install pynvim)

Installation

With Vim-Plug, use:

    " Required for vim 8
    Plug 'roxma/vim-hug-neovim-rpc'
    " Install this plugin
    Plug 'roxma/nvim-yarp', { 'do': 'pip install -r requirements.txt' }

Use case

Usage

pythonx/hello.py

import vim, time
def greet():
    time.sleep(3)
    vim.command('echo "Hello world"')

plugin/hello.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.

let $NVIM_PYTHON_LOG_FILE="/tmp/nvim_log"
let $NVIM_PYTHON_LOG_LEVEL="DEBUG"

Options

let s:yarp.on_load = function('your_handler')

A handler that is called after your python module is loaded. It is not considered ready for request or notification from vimscript during loading stage. s:yarp.request and s:yarp.notify internally wait until on_load before sending actual request and notification.

Methods

call s:yarp.reqeust({event}, [, {args}...])

Similiar to :help rpcrequest. It sends a request to the rpc channel and returns the result of your python method.

call s:yarp.rpcnotify({event}, [, {args}...])

Similiar to :help rpcnotify. It sends a notification to the rpc channel and returns immediately.

call s:yarp.error(msg)

Print error message.

call s:yarp.warn(msg)

Print warning message.

Example for existing neovim rplugin porting to Vim 8

More realistic examples could be found at nvim-typescript#84, deoplete#553, callmekohei/quickdebug.

Now let's consider the following simple rplugin.

After UpdateRemotePlugins and restarting neovim, you get foobar by :echo Bar().

# 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:

" 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
# 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',)

More Repositories

1

nvim-completion-manager

⚠️ PLEASE USE https://github.com/ncm2/ncm2 INSTEAD
Python
927
star
2

vim-tmux-clipboard

seamless integration for vim and tmux's clipboard
Vim Script
272
star
3

vim-hug-neovim-rpc

EXPERIMENTAL
Python
219
star
4

easymake

A handy makefile for simple C/C++ applications
Makefile
136
star
5

vim-paste-easy

Automatically set paste for you
Vim Script
99
star
6

SMS-Forward

A very simple Android SMS forwardning APP. [NOT MAINTAINING]
Java
79
star
7

cpp_learn

PHP
69
star
8

LanguageServer-php-neovim

Vim Script
39
star
9

ncm-clang

DEPRECATED use https://github.com/ncm2/ncm2-pyclang instead
Python
29
star
10

envrc-rs

Auto source bash .envrc of your workspace
Rust
29
star
11

python-support.nvim

[DEPRECATED] use a single command :PythonSupportInit to initialize python support for neovim.
Vim Script
25
star
12

nvim-cm-tern

Python
24
star
13

SimpleAutoComplPop

Please use https://github.com/ncm2/ncm2 instead
Vim Script
22
star
14

nvim-cm-racer

Neovim/vim8 completion for rust
Python
17
star
15

vim-window-resize-easy

Vim Script
17
star
16

ncm-phpactor

USE https://github.com/phpactor/ncm2-phpactor FOR NCM2!
Python
13
star
17

ncm-github

[DEPRECATED] use https://github.com/ncm2/ncm2-github instead
Python
11
star
18

vim-syntax-compl-pop

Vim Script
9
star
19

vim-encode

Provides simple stirng encode/escape functionality inside vim
Vim Script
8
star
20

ncm-rct-complete

rcodetools source for nvim-completion-manager
Python
4
star
21

nvim-ascript

Vim Script
3
star
22

ncm-flow

flow completion source for nvim-completion-manager
Python
2
star
23

nvim-cm-php-language-server

Vim Script
2
star
24

aps-agent

Application Performance Statistics
C++
1
star
25

tmux-yank.el

Emacs Lisp
1
star
26

modus-themes

Forked from https://gitlab.com/protesilaos/modus-themes
Emacs Lisp
1
star
27

ncm-elm-oracle

elm-oracle source for nvim-completion-manager
Python
1
star
28

stm32f1-blinky

A Minimal Project Template for STM32F10x Development on Linux
C
1
star