github

metakirby5 / codi.vim

  • вторник, 16 августа 2016 г. в 03:13:01
https://github.com/metakirby5/codi.vim

VimL
📔 The interactive scratchpad for hackers.



codi.vim

The interactive scratchpad for hackers.

Codi Screenshot

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 (if Vim has +job and +channel, asynchronously). It's extensible to nearly any language that provides a REPL (interactive interpreter)!

Languages with built-in support: Python, JavaScript, Haskell, Ruby, OCaml, R

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!

Installation

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'

Dependencies

Asynchronous evaluation requires +job and +channel.

Command line utilities (BSD and Linux are both fine): script, uname.

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: python
  • JavaScript: node
  • Haskell: ghci (be really careful with lazy evaluation!)
  • Ruby: irb
  • OCaml: ocaml
  • R: R

Usage

  • 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.

Shell wrapper

A nice way to use Codi is through a shell wrapper that you can stick in your ~/.bashrc:

# Codi
# Usage: codi [filetype] [filename]
codi() {
  vim $2 -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 ${1:-python}"
}

Options

  • 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.
  • 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.

Autocommands

  • CodiEnterPre, CodiEnterPost: When a Codi pane enters.
  • CodiUpdatePre, CodiUpdatePost: When a Codi pane updates.
  • CodiLeavePre, CodiLeavePost: When a Codi pane leaves.

FAQ

  • Why doesn't X work in Codi, when it works in a normal source file?
    • Codi is not meant to be a replacement for actually running your program; it supports nothing more than what the underlying REPL supports. This is why Haskell language pragmas don't work and OCaml statements must end with ;;.

Thanks to

  • @DanielFGray and @purag for testing, feedback, and suggestions
  • @Joaquin-V for helping me discover critical bugs with vanilla settings
  • Everyone who has reported an issue or sent in a pull request :)