The interactive scratchpad for hackers.
Using Codi as a Python scratchpad through the shell wrapper
Codi is an interactive scratchpad for hackers, with a similar interface to Numi. It opens a pane synchronized to your main buffer which displays the results of evaluating each line as you type (with NeoVim or Vim with +job
and +channel
, asynchronously). It's extensible to nearly any language that provides a REPL (interactive interpreter)!
Languages with built-in support: Python, JavaScript, CoffeeScript, Haskell, PureScript, Ruby, OCaml, R, Clojure/ClojureScript, PHP, Lua, C++, Julia, Elm, Elixir, TypeScript, Mathjs
Pull requests for new language support welcome!
Note: without async support, evaluation will trigger on cursor hold rather than text change.
For more information, check out the documentation. Watch a screencast!
Use your favorite package manager (vim-plug, Vundle, pathogen.vim), or add this directory to your Vim runtime path.
For example, if you're using vim-plug, add the following line to ~/.vimrc
:
Plug 'metakirby5/codi.vim'
+job
and +channel
for asynchronous evaluation) or NeoVim (still in its infancy - please report bugs!)uname
script
(BSD or Linux, man page should say at least 2013)Each interpreter also depends on its REPL. These are loaded on-demand. For example, if you only want to use the Python Codi interpreter, you will not need ghci
.
Default interpreter dependencies:
python
node
coffee
ghci
(be really careful with lazy evaluation!)pulp psci
irb
ocaml
R
planck
psysh
lua
cling
julia
elm
iex
tsun
mathjs
Codi [filetype]
activates Codi for the current buffer, using the provided filetype or the buffer's filetype.Codi!
deactivates Codi for the current buffer.Codi!! [filetype]
toggles Codi for the current buffer, using the provided filetype or the buffer's filetype.A nice way to use Codi is through a shell wrapper that you can stick in your ~/.bashrc
:
# Codi # Usage: codi [filetype] [filename] codi() { local syntax="${1:-python}" shift vim -c \ "let g:startify_disable_at_vimenter = 1 |\ set bt=nofile ls=0 noru nonu nornu |\ hi ColorColumn ctermbg=NONE |\ hi VertSplit ctermbg=NONE |\ hi NonText ctermfg=0 |\ Codi $syntax" "[email protected]" }
g:codi#interpreters
is a list of user-defined interpreters. See the documentation for more information.g:codi#aliases
is a list of user-defined interpreter filetype aliases. See the documentation for more information.The below options can also be set on a per-interpreter basis via g:codi#interpreters
:
g:codi#autocmd
determines what autocommands trigger updates. See the documentation for more information.g:codi#width
is the width of the Codi split.g:codi#rightsplit
is whether or not Codi spawns on the right side.g:codi#rightalign
is whether or not to right-align the Codi buffer.g:codi#autoclose
is whether or not to close Codi when the associated buffer is closed.g:codi#raw
is whether or not to display interpreter results without alignment formatting (useful for debugging).g:codi#sync
is whether or not to force synchronous execution. No reason to touch this unless you want to compare async to sync.CodiEnterPre
, CodiEnterPost
: When a Codi pane enters.CodiUpdatePre
, CodiUpdatePost
: When a Codi pane updates.CodiLeavePre
, CodiLeavePost
: When a Codi pane leaves.;;
.:h codi-introduction-warnings
for more information.:h codi-introduction-gotchas
.Original repository: https://github.com/metakirby5/codi.vim