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!)unamescript (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:
pythonnodecoffeeghci (be really careful with lazy evaluation!)pulp psciirbocamlRplanckpsyshluaclingjuliaelmiextsunmathjsCodi [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