Create, use, and remove an interactive REPL within Neovim 0.5.0+.
Consult your package manager's documentation. Neovim REPL is a normal Neovim package.
:Repl
or:ReplOpen
: open a terminal and run the repl provided as the argument.- without argument: open the default shell which is configured by filetype.
:Repl env $env_name
: open a python shell with the environment of$env_name
, only support for Conda.:Repl arg
: open the default shell and exec thearg
command.:ReplClose
: close the REPL, if open.:ReplToggle
: if REPL is open, close it. If REPL is closed, open it using either the filetype associated REPL or the configured default REPL.:ReplClear
: clear the REPL, if open.:ReplRunCell
: will run the cell under the cursor and the cursor will jump to next cell.:ReplSendArgs
: will send the arguments passed to the command directly to the REPL.
Several pluggable, dot-repeatable mappings are provided.
<Plug>ReplSendLine
send the current line to the REPL.<Plug>ReplSendCell
send the current cell to the REPL.<Plug>ReplSendVisual
send the visual selection to the REPL.
The user should map these pluggable mappings. Example mappings in config using vim filetype:
nmap <Leader>rc <Plug>ReplSendCell
nmap <Leader>rr <Plug>ReplSendLine
xmap <Leader>r <Plug>ReplSendVisual
-
g:repl_filetype_commands
: map Neovim file types to REPL. E.g., if you automatically want to run aipython
REPL for python file types and a "node" REPL for JavaScript file types, your configuration might look like this:let g:repl_filetype_commands = { \ 'bash': 'bash', \ 'javascript': 'node', \ 'haskell': 'ghci', \ 'python': 'ipython --quiet --no-autoindent -i -c "%config InteractiveShell.ast_node_interactivity=\"last_expr_or_assign\""', \ 'r': 'R', \ 'sh': 'sh', \ 'vim': 'nvim --clean -ERM', \ 'zsh': 'zsh', \ }
-
g:repl_default
: set the default REPL if no configured REPL is found ing:repl_filetype_commands
. Defaults to&shell
. -
g:repl_split
: set the REPL window position.vertical
andhorizontal
respect the user-configured globalsplitright
andsplitbottom
settings.'bottom'
'top'
'left'
'right'
'horizontal'
'vertical'
(default)
If split bottom is preferred, then add below line to configuration.
let g:repl_split = 'bottom'
-
g:repl_height
: set REPL window's height (number of lines) ifg:repl_split
set'bottom'
/'top'
. Defaultsplit
equally. -
g:repl_width
: set REPL window's width (number of columns) ifg:repl_split
set'left'
/'right'
. Defaultvsplit
equally.
Cells are denoted by full-line comments that begin with the characters %%
.
Comments are identified by your buffer's filetype's 'commentstring'
.
See some examples below:
# %%
print("I am the first cell")
print("I am still the first cell")
# %% anything can follow
print("I am the second cell")
print("I am still the second cell")
print("I am still, still the second cell")
# %%
print("I am the third cell")
-- %%
putStrLn "I am the first cell"
putStrLn "I am still the first cell"
-- %% anything can follow
putStrLn "I am the second cell"
putStrLn "I am still the second cell"
putStrLn "I am still, still the second cell"
-- %%
putStrLn "I am the third cell"
From within Neovim, type:
:help repl
One such error might be a IndentError
. This has to do with quirks related to the default Python interpreter. To get around this, use ipython
as your default interpreter for Python files.
Terminal:
pip install ipython
init.vim
:
" init.vim
let g:repl_filetype_commands = {'python': 'ipython --no-autoindent'}
If you find yourself in Terminal mode, use <C-\><C-n>
instead of <Esc>
to return to Normal mode.
Type :help Terminal-mode
and :help CTRL-\_CTRL-N
for more information.