DEV Community

Roberto Barbosa
Roberto Barbosa

Posted on • Edited on

18 1

How to run Python on Neovim like Jupyter

I am a Code Editor guy, and I am a Terminal Guy. I try all of the Editors from SublimeText VSCode to PyCharm and I keep coming back to Vim/Neovim.

Because I work on AI/ML there's no way to not develop in Python and not be confronted with people demo'ing code with Jupyter Notebooks. I confess that is really cool.

So, I went on the journey to figure out to solve this missing feature on Neovim.

So, for a start, I will show how to do it with LazyVim as it's package manager could not be easier to get stuff started for someone willing to try Neovim for a spin.

Neovim Installation



brew install neovim@0.9.0


Enter fullscreen mode Exit fullscreen mode

Other Requirements

  • Git
  • Python

If you don't have it yet install them (or just stop here 😁):



brew install git
brew install python@3.11


Enter fullscreen mode Exit fullscreen mode

Install Lazyim

Backup Old Config

If you already have another installation, do some backups:



# required
mv ~/.config/nvim ~/.config/nvim.bak

# optional but recommended
mv ~/.local/share/nvim ~/.local/share/nvim.bak
mv ~/.local/state/nvim ~/.local/state/nvim.bak
mv ~/.cache/nvim ~/.cache/nvim.bak


Enter fullscreen mode Exit fullscreen mode

Download the lazyvim starter, and don't be surprised how *fast & furious" the installation is:



git clone https://github.com/LazyVim/starter ~/.config/nvim


Enter fullscreen mode Exit fullscreen mode

Now, take the neovim to a spin, hold your seat and run:



nvim


Enter fullscreen mode Exit fullscreen mode

Install Plugin to Run Code

After a successful install of Lazyvim, exit and let's add a plugin:



cd ~/.config/nvim
nvim .


Enter fullscreen mode Exit fullscreen mode

Create a file ('a' command on the File Browser) on folder lua/plugins/code-runner.lua



return {
  "hkupty/iron.nvim",
  config = function(plugins, opts)
    local iron = require("iron.core")

    iron.setup({
      config = {
        -- Whether a repl should be discarded or not
        scratch_repl = true,
        -- Your repl definitions come here
        repl_definition = {
          python = {
            -- Can be a table or a function that
            -- returns a table (see below)
            command = { "python" },
          },
        },
        -- How the repl window will be displayed
        -- See below for more information
        repl_open_cmd = require("iron.view").right(60),
      },
      -- Iron doesn't set keymaps by default anymore.
      -- You can set them here or manually add keymaps to the functions in iron.core
      keymaps = {
        send_motion = "<space>rc",
        visual_send = "<space>rc",
        send_file = "<space>rf",
        send_line = "<space>rl",
        send_mark = "<space>rm",
        mark_motion = "<space>rmc",
        mark_visual = "<space>rmc",
        remove_mark = "<space>rmd",
        cr = "<space>r<cr>",
        interrupt = "<space>r<space>",
        exit = "<space>rq",
        clear = "<space>rx",
      },
      -- If the highlight is on, you can change how it looks
      -- For the available options, check nvim_set_hl
      highlight = {
        italic = true,
      },
      ignore_blank_lines = true, -- ignore blank lines when sending visual select lines
    })

    -- iron also has a list of commands, see :h iron-commands for all available commands
    vim.keymap.set("n", "<space>rs", "<cmd>IronRepl<cr>")
    vim.keymap.set("n", "<space>rr", "<cmd>IronRestart<cr>")
    vim.keymap.set("n", "<space>rF", "<cmd>IronFocus<cr>")
    vim.keymap.set("n", "<space>rh", "<cmd>IronHide<cr>")
  end,
}


Enter fullscreen mode Exit fullscreen mode

Save a exit the file <space>qq

Test Code Runner

Open a python file test.py:



name = "AIOPS Again"
print(f"Hello, {name}")

name = "Another AIOPS"
print(f"Hello, {name}")


Enter fullscreen mode Exit fullscreen mode

Type <space>r and ENTER and you should have the code execution window on the right side:

Neovim Menu

If you to execute the code you have several options:

  1. Execute Line by Line <space>rl
  2. Execute Selected Lines <space>rc
  3. Execute the all file <space>rf

Try to execute a selection of line, by selecting some lines:

Lines of Code Selected on Neovim

And them send the code to the runner:

Code Execution Result

In reality this plugin can run whatever you want:

Runtime selection

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more