All Projects → neovim → Pynvim

neovim / Pynvim

Licence: apache-2.0
Python client and plugin host for Nvim

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Pynvim

Girlscript chennai website
An open source project for creating a website that shall serve as a template for various chapters of GirlScript Foundation
Stars: ✭ 27 (-96.83%)
Mutual labels:  hacktoberfest
Matrix
#matrix is the online open-source workplace inspired in sococo.com for distributed teams to have the experience of work together each day, side-by-side. No matter where team members might be. Working in an online workplace is even more productive when people are feeling in the same space.
Stars: ✭ 847 (-0.47%)
Mutual labels:  hacktoberfest
Lozad.js
🔥 Highly performant, light ~1kb and configurable lazy loader in pure JS with no dependencies for responsive images, iframes and more
Stars: ✭ 6,932 (+714.57%)
Mutual labels:  hacktoberfest
Awesome Sdn
A awesome list about Software Defined Network (SDN)
Stars: ✭ 841 (-1.18%)
Mutual labels:  hacktoberfest
Refreshversions
Life is too short to google for dependencies and versions
Stars: ✭ 841 (-1.18%)
Mutual labels:  hacktoberfest
Laminas Code
Extensions to the PHP Reflection API, static code scanning, and code generation
Stars: ✭ 844 (-0.82%)
Mutual labels:  hacktoberfest
Red Dashboard
An easy-to-use interactive web dashboard to control your Redbot.
Stars: ✭ 26 (-96.94%)
Mutual labels:  hacktoberfest
Trivy
Scanner for vulnerabilities in container images, file systems, and Git repositories, as well as for configuration issues
Stars: ✭ 9,673 (+1036.66%)
Mutual labels:  hacktoberfest
Attention Ocr
A Tensorflow model for text recognition (CNN + seq2seq with visual attention) available as a Python package and compatible with Google Cloud ML Engine.
Stars: ✭ 844 (-0.82%)
Mutual labels:  hacktoberfest
Kudo
Kubernetes Universal Declarative Operator (KUDO)
Stars: ✭ 849 (-0.24%)
Mutual labels:  hacktoberfest
Hawkpost
Generate links that users can use to submit messages encrypted with your public key.
Stars: ✭ 843 (-0.94%)
Mutual labels:  hacktoberfest
Elyra
Elyra extends JupyterLab Notebooks with an AI centric approach.
Stars: ✭ 839 (-1.41%)
Mutual labels:  hacktoberfest
Android Image Picker
Image Picker for Android 🤖
Stars: ✭ 847 (-0.47%)
Mutual labels:  hacktoberfest
Mysqlconnector
Async MySQL Connector for .NET and .NET Core
Stars: ✭ 942 (+10.69%)
Mutual labels:  hacktoberfest
Platform
Reactive libraries for Angular
Stars: ✭ 7,020 (+724.91%)
Mutual labels:  hacktoberfest
Stay Focused
A brain computer interface app to help you stay focused!
Stars: ✭ 27 (-96.83%)
Mutual labels:  hacktoberfest
Azure Sdk For Go
Microsoft Azure SDK for Go
Stars: ✭ 847 (-0.47%)
Mutual labels:  hacktoberfest
Vscode Debug Visualizer
An extension for VS Code that visualizes data during debugging.
Stars: ✭ 7,116 (+736.19%)
Mutual labels:  hacktoberfest
Openebs
Leading Open Source Container Attached Storage, built using Cloud Native Architecture, simplifies running Stateful Applications on Kubernetes.
Stars: ✭ 7,277 (+755.11%)
Mutual labels:  hacktoberfest
Ember Cli Fastboot
Server-side rendering for Ember.js apps
Stars: ✭ 849 (-0.24%)
Mutual labels:  hacktoberfest

Pynvim: Python client to Neovim

Build Status Documentation Status Code coverage

Pynvim implements support for python plugins in Nvim. It also works as a library for connecting to and scripting Nvim processes through its msgpack-rpc API.

Install

Supports python 2.7, and 3.4 or later.

pip2 install pynvim
pip3 install pynvim

If you only use one of python2 or python3, it is enough to install that version. You can install the package without being root by adding the --user flag.

Anytime you upgrade Neovim, make sure to upgrade pynvim as well:

pip2 install --upgrade pynvim
pip3 install --upgrade pynvim

Alternatively, the master version could be installed by executing the following in the root of this repository:

pip2 install .
pip3 install .

Python Plugin API

Pynvim supports python remote plugins (via the language-agnostic Nvim rplugin interface), as well as Vim plugins (via the :python[3] interface). Thus when pynvim is installed Neovim will report support for the +python[3] Vim feature.

The rplugin interface allows plugins to handle vimL function calls as well as defining commands and autocommands, and such plugins can operate asynchronously without blocking nvim. For details on the new rplugin interface, see the Remote Plugin documentation.

Pynvim defines some extensions over the vim python API:

  • Builtin and plugin vimL functions are available as nvim.funcs
  • API functions are available as vim.api and for objects such as buffer.api
  • Lua functions can be defined using vim.exec_lua and called with vim.lua
  • Support for thread-safety and async requests.

See the Python Plugin API documentation for usage of this new functionality.

Development

Use (and activate) a local virtualenv.

python3 -m venv env36
source env36/bin/activate

If you change the code, you must reinstall for the changes to take effect:

pip install .

Use pytest to run the tests. Invoking with python -m prepends the current directory to sys.path (otherwise pytest might find other versions!):

python -m pytest

For details about testing and troubleshooting, see the development documentation.

Usage from the Python REPL

A number of different transports are supported, but the simplest way to get started is with the python REPL. 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, connect a python REPL to Nvim (note that the API is similar to the one exposed by the python-vim bridge):

>>> from pynvim import attach
# Create a python API session attached to unix domain socket created above:
>>> nvim = attach('socket', path='/tmp/nvim')
# Now do some work. 
>>> buffer = nvim.current.buffer # Get the current buffer
>>> buffer[0] = 'replace first line'
>>> buffer[:] = ['replace whole buffer']
>>> nvim.command('vsplit')
>>> nvim.windows[1].width = 10
>>> nvim.vars['global_var'] = [1, 2, 3]
>>> nvim.eval('g:global_var')
[1, 2, 3]

You can embed Neovim into your python application instead of connecting to a running Neovim instance.

>>> from pynvim import attach
>>> nvim = attach('child', argv=["/bin/env", "nvim", "--embed", "--headless"])
  • The --headless argument tells nvim not to wait for a UI to connect.
  • Alternatively, use --embed without --headless if your client is a UI and you want nvim to wait for your client to nvim_ui_attach before continuing startup.

See the tests for more examples.

Release

  1. Create a release commit with title Pynvim x.y.z
    • list significant changes in the commit message
    • bump the version in pynvim/util.py and setup.py (3 places in total)
  2. Make a release on GitHub with the same commit/version tag and copy the message.
  3. Run scripts/disable_log_statements.sh
  4. Run python setup.py sdist
    • diff the release tarball dist/pynvim-x.y.z.tar.gz against the previous one.
  5. Run twine upload -r pypi dist/pynvim-x.y.z.tar.gz
    • Assumes you have a pypi account with permissions.
  6. Run scripts/enable_log_statements.sh or git reset --hard to restore the working dir.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].