Skip to content
Go to file


lint tests license

__   _ _______  _____  _______ _______  ______ _______
| \  | |______ |     |    |    |______ |_____/ |  |  |
|  \_| |______ |_____|    |    |______ |    \_ |  |  |

Use the same terminal for everything. The main reason for this plugin is to reuse the terminal easily. All commands open a terminal if one does not already exist. REPL commands open a terminal and the proper REPL if not already opened.

  • Neovim/Vim terminal helper functions/commands.
  • Wraps REPLs to receive current file, line or selection.
  • Multiple terminal support:
    • many-terms


Vundle/Plug.vim/minpac/any other

You can install this plugin using any vim plugin manager by using the path on GitHub for this repository:

[Plugin|Plug|...] 'kassio/neoterm'

See the your plugin manager documentation for more information.


For installation without a package manager, you can clone this Git repository into a bundle directory as with pathogen, and add the repository to your runtime path yourself. First clone the repository:

cd ~/.vim/bundle
git clone

Then, modify your ~/.vimrc file to add this plugin to your runtime path:

set nocompatible
filetype off

let &runtimepath.=',~/.vim/bundle/neoterm'

filetype plugin on

You can add the following line to generate documentation tags automatically, if you don't have something similar already, so you can use the :help command to consult neoterm's online documentation:

silent! helptags ALL

Windows OS

For Windows users, replace usage of the Unix ~/.vim directory with %USERPROFILE%\_vim, or another directory if you have configured Vim differently. On Windows, your ~/.vimrc file will be similarly stored in %USERPROFILE%\_vimrc.

Default behaviour

Neoterm's default behavior is to create a new buffer on the current window when opening a neoterm. You can change this with g:neoterm_default_mod. Check the documentation for more information.

Send commands to a neoterm window

  • :T {command}: Opens a terminal, or use an opened terminal, and runs the given command within a terminal.
  • :Tmap {command}: maps a given command to g:neoterm_automap_keys.

Multiple neoterm windows commands

  • :3T {command}: Will send the command to neoterm-3.

useful mappings:

I like to set some mappings to make me more productive.

" 3<leader>tl will clear neoterm-3.
nnoremap <leader>tl :<c-u>exec v:count.'Tclear'<cr>

test libs (removed on 05/Feb/2017)

This feature was removed on 05/Feb/2017, please consider using vim-test with neoterm strategy to replace this feature.


  • TREPLSendFile: sends the current file to a REPL in a terminal.
  • TREPLSendLine: sends the current line to a REPL in a terminal.
  • TREPLSendSelection: sends the selection to a REPL in a terminal.
  • <Plug>(neoterm-repl-send): sends with text-objects or motions, or sends the selection to a REPL in a terminal.
  • <Plug>(neoterm-repl-send-line): sends the current line to a REPL in a terminal.

Supported REPLs

  • Clojure: lein repl
  • Elixir: iex and iex -S mix (if config/config.exs exists)
  • GNU Octave: octave
    • For Octave 4.0.0 and later, you can enable Qt widgets (dialogs, plots, etc.) using g:neoterm_repl_octave_qt = 1
  • Haskell: ghci
  • Idris: idris
  • JavaScript: node
  • Java: java
  • Julia: julia
  • LFE: lfe
  • Lua with lua and luap.
  • MATLAB: matlab -nodesktop -nosplash
  • PARI/GP: gp
  • PHP: g:neoterm_repl_php and psysh and php
  • Python: ipython, jupyter console and python
  • R / R Markdown: R
  • Racket: racket
  • Rails: bundle exec rails console
  • Ruby: pry and irb
  • Rust: evcxr
  • SML: rlwrap sml or sml
  • Scala: sbt console
  • TCL: tclsh


Most standard file extensions for the above REPLs are picked up by Neovim/Vim's default filetype plugins. However, there are two exceptions:

  • Julia .jl files, which are detected as filetipe=lisp
  • Idris .idr, .lidr files which are not recognised as any filetype
  • LFE .lfe files, which are not recognized as any filetype

To fix this, either install a suitable plugin for the language or add something like the following to your init.vim:

au VimEnter,BufRead,BufNewFile *.jl set filetype=julia
au VimEnter,BufRead,BufNewFile *.idr set filetype=idris
au VimEnter,BufRead,BufNewFile *.lidr set filetype=lidris
au VimEnter,BufRead,BufNewFile *.lfe set filetype=lfe

If you want to use the jupyter console REPL present on your path, you can use this configuration in your init.vim:

function! Chomp(string)
    return substitute(a:string, '\n\+$', '', '')
let g:neoterm_repl_python = Chomp(system('which jupyter')) . ' console'





Wrapper of some vim/neovim's :terminal functions.





No releases published

Sponsor this project

Learn more about GitHub Sponsors


No packages published
You can’t perform that action at this time.