All Projects → jupyter-vim → Jupyter Vim

jupyter-vim / Jupyter Vim

Licence: other
Make Vim talk to Jupyter kernels

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Jupyter Vim

vim-jukit
Jupyter-Notebook inspired Neovim/Vim Plugin
Stars: ✭ 55 (-71.65%)
Mutual labels:  jupyter, vim-plugin
Enterprise gateway
A lightweight, multi-tenant, scalable and secure gateway that enables Jupyter Notebooks to share resources across distributed clusters such as Apache Spark, Kubernetes and others.
Stars: ✭ 412 (+112.37%)
Mutual labels:  hacktoberfest, jupyter
Ipython
Official repository for IPython itself. Other repos in the IPython organization contain things like the website, documentation builds, etc.
Stars: ✭ 15,107 (+7687.11%)
Mutual labels:  hacktoberfest, jupyter
Vim Startify
🔗 The fancy start screen for Vim.
Stars: ✭ 4,479 (+2208.76%)
Mutual labels:  hacktoberfest, vim-plugin
Vimwiki
Personal Wiki for Vim
Stars: ✭ 6,970 (+3492.78%)
Mutual labels:  hacktoberfest, vim-plugin
Pai
Resource scheduling and cluster management for AI
Stars: ✭ 2,223 (+1045.88%)
Mutual labels:  hacktoberfest, jupyter
Rigel
🌌 Colorscheme for vim, terminal, vscode and slack - based on the star Rigel ✨.
Stars: ✭ 324 (+67.01%)
Mutual labels:  hacktoberfest, vim-plugin
Wowchemy Hugo Modules
🔥 Hugo website builder, Hugo themes & Hugo CMS. No code, build with widgets! 创建在线课程,学术简历或初创网站。
Stars: ✭ 6,093 (+3040.72%)
Mutual labels:  hacktoberfest, jupyter
Nbstripout
strip output from Jupyter and IPython notebooks
Stars: ✭ 738 (+280.41%)
Mutual labels:  hacktoberfest, jupyter
Sqlcell
SQLCell is a magic function for the Jupyter Notebook that executes raw, parallel, parameterized SQL queries with the ability to accept Python values as parameters and assign output data to Python variables while concurrently running Python code. And *much* more.
Stars: ✭ 145 (-25.26%)
Mutual labels:  hacktoberfest, jupyter
Nlp profiler
A simple NLP library allows profiling datasets with one or more text columns. When given a dataset and a column name containing text data, NLP Profiler will return either high-level insights or low-level/granular statistical information about the text in that column.
Stars: ✭ 181 (-6.7%)
Mutual labels:  hacktoberfest, jupyter
Jupyterhub Deploy Teaching
Reference deployment of JupyterHub and nbgrader on a single server
Stars: ✭ 194 (+0%)
Mutual labels:  jupyter
Api
API for Current cases and more stuff about COVID-19 and Influenza
Stars: ✭ 2,323 (+1097.42%)
Mutual labels:  hacktoberfest
Aaru
Aaru Data Preservation Suite
Stars: ✭ 193 (-0.52%)
Mutual labels:  hacktoberfest
Laravel Datatables Buttons
jQuery DataTables Buttons Plugin for Laravel.
Stars: ✭ 192 (-1.03%)
Mutual labels:  hacktoberfest
Linux
Linux kernel variant from Analog Devices; see README.md for details
Stars: ✭ 194 (+0%)
Mutual labels:  hacktoberfest
Opencast
The free and open source solution for automated video capture and distribution at scale.
Stars: ✭ 194 (+0%)
Mutual labels:  hacktoberfest
Bootstrap Italia
Bootstrap Italia è un tema Bootstrap 4 conforme alle linee guida di design per i servizi web della PA
Stars: ✭ 193 (-0.52%)
Mutual labels:  hacktoberfest
Agents.jl
Agent-based modeling framework in Julia
Stars: ✭ 189 (-2.58%)
Mutual labels:  hacktoberfest
Add Event To Calendar Docs
📅 Docs how to generate links to add events to online calendar services
Stars: ✭ 193 (-0.52%)
Mutual labels:  hacktoberfest

Jupyter-Vim

A two-way integration between Vim and Jupyter. Develop code on a Jupyter notebooke without leaving the terminal. Send lines from Vim to a jupyter qtconsole. Have a MATLAB-like "cell-mode".

Currently Python and Julia kernels are supported, and more languages are on the way.

Video demo

Installation of the plugin

To install this plugin, you should use one of the following methods.

On Windows, replace in the next sections the Unix directories with the following:

  • On Vim:

    • ~/.vim -> %USERPROFILE%\vimfiles
    • ~/.vimrc -> %USERPROFILE%\_vimrc
  • On Nvim:

    • ~/.local/share/nvim/site -> %USERPROFILE%\AppData\Local\nvim

Or other directories if you have configured/installed Vim/Nvim differently.

Vim 8 package manager

mkdir -p ~/.vim/pack/git-plugins/start
git clone --depth 1 https://github.com/jupyter-vim/jupyter-vim.git ~/.vim/pack/git-plugins/start/jupyter-vim

NeoVim

mkdir -p ~/.local/share/nvim/site/pack/git-plugins/start
git clone --depth 1 https://github.com/jupyter-vim/jupyter-vim.git ~/.local/share/nvim/site/pack/git-plugins/start/jupyter-vim

Pathogen

cd ~/.vim/bundle
git clone https://github.com/jupyter-vim/jupyter-vim.git

Vundle

Plugin 'jupyter-vim/jupyter-vim'

Vim-Plug

Plug 'jupyter-vim/jupyter-vim'

Vim+Python configuration

In order for this plugin to work, you must have Jupyter installed in the Python environment that vim's pythonx command uses. There are several possible strategies here.

Install jupyter into system python

When Vim is using your system python (the default on linux), you can just install Jupyter using a package manager. For example, on Ubuntu 18.04 and later:

$ sudo apt install jupyter jupyter-core

Alternatively, you can use pip:

$ sudo pip install jupyter

Dynamic mode

When Vim is compiled with Python in dynamic mode (+python3/dyn), you can point to the Python interpreter you wish to use in your .vimrc:

if has('nvim')
    let g:python3_host_prog = '/path/to/python/bin/python3'
else
    set pyxversion=3

    " OSX
    set pythonthreedll=/Library/Frameworks/Python.framework/Versions/3.6/Python

    " Windows
    set pythonthreedll=python37.dll
    set pythonthreehome=C:\Python37
endif

Make sure to point it to a Python installation that has Jupyter installed.

Virtual environments

If either:

  • you use a Python environment manager such as virtualenv, and thus need Jupyter to be present no matter which environment is loaded from the shell you open vim from, or
  • you only use one Python environment but you don't want to install Jupyter system-wide for whatever reason,

then the easiest way to meet the Jupyter requirement is to configure vim to load a designated virtualenv at startup. This is just to allow vim to call the Jupyter client; you can run your Jupyter server in whatever Python environment you want. From Vim, run:

:pythonx import sys; print(sys.version)

This will tell you whether pythonx is using Python 2 or Python 3. (Or, see :help python_x if you'd like to tweak your pythonx settings.) Create a virtualenv with that python version, for example

$ virtualenv -p /usr/bin/python2.7 /path/to/my/new/vim_virtualenv

or

$ virtualenv -p /usr/bin/python3 /path/to/my/new/vim_virtualenv

and then install Jupyter in that environment:

$ source /path/to/my/new/vim_virtualenv/bin/activate
$ pip install jupyter

Finally, tell vim to load this virtualenv at startup by adding these lines to your vimrc:

" Always use the same virtualenv for vim, regardless of what Python
" environment is loaded in the shell from which vim is launched
let g:vim_virtualenv_path = '/path/to/my/new/vim_virtualenv'
if exists('g:vim_virtualenv_path')
    pythonx import os; import vim
    pythonx activate_this = os.path.join(vim.eval('g:vim_virtualenv_path'), 'bin/activate_this.py')
    pythonx with open(activate_this) as f: exec(f.read(), {'__file__': activate_this})
endif

Jupyter configuration

First, we need to configure the jupyter console and qtconsole clients to display output from other clients.

The config files can be found in in ~/.jupyter, if they don't exist yet you can generate them with:

$ jupyter console --generate-config
$ jupyter qtconsole --generate-config

Now you need to uncomment and change the following config options to True.

For qtconsole:

c.ConsoleWidget.include_other_output = True

For console:

c.ZMQTerminalInteractiveShell.include_other_output = True

Usage

To begin a session:

$ jupyter qtconsole &  # open a jupyter console window
$ vim <your_script>.py

In vim: :JupyterConnect

Then, use :JupyterRunFile, or :[range]JupyterSendRange to execute lines of code!

Code will be sent and executed as expected in the graphical jupyter qtconsole. However, in the console version jupyter console, the result will only show after you press the Enter key.

By default, the following keybindings are defined:

" Run current file
nnoremap <buffer> <silent> <localleader>R :JupyterRunFile<CR>
nnoremap <buffer> <silent> <localleader>I :PythonImportThisFile<CR>

" Change to directory of current file
nnoremap <buffer> <silent> <localleader>d :JupyterCd %:p:h<CR>

" Send a selection of lines
nnoremap <buffer> <silent> <localleader>X :JupyterSendCell<CR>
nnoremap <buffer> <silent> <localleader>E :JupyterSendRange<CR>
nmap     <buffer> <silent> <localleader>e <Plug>JupyterRunTextObj
vmap     <buffer> <silent> <localleader>e <Plug>JupyterRunVisual

nnoremap <buffer> <silent> <localleader>U :JupyterUpdateShell<CR>

" Debugging maps
nnoremap <buffer> <silent> <localleader>b :PythonSetBreak<CR>

Set let g:jupyter_mapkeys = 0 in your .vimrc to prevent the default keybindings from being made.

Info

Once we fell in love with Vim, we couldn't bear having to jump back and forth between the ipython/jupyter console and editor anymore. We modeled this simple interface off of the ideas in vim-ipython, but have pared down many of the features, like the replication of the Jupyter console in a vim buffer, to make the plugin much more 'lightweight'.

Still a work in progress!

Troubleshooting

  • Make sure that you are running Vim 8 or higher with Python 3 support.
  • When on windows, you are probably running 64-bit Python. Make sure you also run a 64-bit version of Vim (the default install is 32-bit!).

Contributing

Please feel free to raise issues and pull requests on the github repository.

Credits

We owe significant thanks to the original developer of this plugin: Paul Ivanov. It is far easier to update something that already works well than to forge a new path from scratch.

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].