Codi es un scratchpad (piense en ello como un bloc de notas) interactivo para hackers, con una interfaz similar a la de Numi. Abre un panel sincronizado con tu buffer principal que muestra los resultados de la evaluación de cada línea mientras escribes (con NeoVim o Vim con +job
y +channel
, de forma asíncrona). Es extensible a casi cualquier lenguaje que proporcione un REPL (Read-eval-print loop) (intérprete interactivo).
Lenguajes con soporte incorporado: Python, JavaScript, CoffeeScript, Haskell, PureScript, Ruby, OCaml, R, Clojure/ClojureScript, PHP, Lua, C++, Julia, Elm, Elixir, TypeScript, Mathjs.
Pull requests para soportar nuevos lenguajes.
Para más información, consulta la documentación.
Instalación
Utiliza tu gestor de paquetes favorito (vim-plug, Vundle, pathogen.vim), o añade este directorio a tu ruta de ejecución de Vim.
Por ejemplo, si utilizas vim-plug, añade la siguiente línea a ~/.vimrc
:
Plug 'metakirby5/codi.vim'
Por ejemplo, instalación de Vim-Plug (en caso no lo tengas):
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
Ahora que tienes el gestor de plugins instalado, puedes seleccionar los plugins que quieres instalar en tu vim.
touch ~/.vimrc
vim ~/.vimrc
call plug#begin()
Plug 'metakirby5/codi.vim'
call plug#end()
:PlugInstall
Dependencias
- OS X o Linux (¡el soporte de Windows será pronto!)
- Vim 7.4 (con
+job
y+channel
para la evaluación asíncrona) o NeoVim (todavía en su infancia – ¡por favor, informe de los errores!) uname
- Si no utiliza NeoVim,
script
(BSD o Linux, la página man debería decir al menos 2013)
Cada intérprete depende también de su REPL. Estos se cargan bajo demanda. Por ejemplo, si sólo quieres usar el intérprete Python Codi, no necesitarás ghci
.
Dependencias del intérprete por defecto:
- Python:
python
- JavaScript:
node
- CoffeeScript:
coffee
- Haskell:
ghci
(tenga mucho cuidado con la evaluación perezosa) - PureScript
pulp psci
- Ruby:
irb
- OCaml:
ocaml
- R:
R
- Clojure:
planck
- PHP:
psysh
- Lua:
lua
- C++:
cling
- Julia:
julia
- Elm:
elm
- Elixir:
iex
- TypeScript:
tsun
- Mathjs:
mathjs
Uso
Codi
activa Codi para el búfer actual, utilizando el tipo de archivo proporcionado o el tipo de archivo del búfer.Codi!
desactiva Codi para el búfer actual.Codi!!
alterna el Codi para el búfer actual, utilizando el tipo de archivo proporcionado o el tipo de archivo del búfer.
Wrapper de Shell
Una buena manera de utilizar Codi es a través de un envoltorio de shell que puede pegar en su ~/.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" "$@"
}
Opciones
g:codi#interpreters
es una lista de intérpretes definidos por el usuario. Consulta la documentación para más información.g:codi#aliases
es una lista de alias de tipos de archivo de intérpretes definidos por el usuario. Consulta la documentación para más información.
Las siguientes opciones también pueden establecerse por intérprete a través de g:codi#interpreters
:
g:codi#autocmd
determina qué autocomandos activan las actualizaciones. Consulta la documentación para más información.g:codi#width
es el ancho de la división de Codi.g:codi#rightsplit
es si el Codi aparece o no en el lado derecho.g:codi#rightalign
es si se alinea o no a la derecha el buffer Codi.g:codi#autoclose
es si se cierra o no Codi cuando se cierra el buffer asociado.g:codi#raw
es si se muestran o no los resultados del intérprete sin formato de alineación (útil para la depuración).g:codi#sync
es si se fuerza o no la ejecución sincrónica. No hay razón para tocar esto a menos que quieras comparar async con sync.
Autocomandos
CodiEnterPre
,CodiEnterPost
: Cuando un panel Codi entra.CodiUpdatePre
,CodiUpdatePost
: Cuando un panel Codi se actualiza.CodiLeavePre
,CodiLeavePost
: Cuando un panel Codi sale.
FAQ
Codi no pretende ser un sustituto de la ejecución real de tu programa; no soporta nada más que lo que soporta el REPL subyacente. Esta es la razón por la que los pragmas del lenguaje Haskell no funcionan y las declaraciones de OCaml deben terminar con ;;
.
La causa de este problema es aún desconocida, pero ocurre con poca frecuencia. Consulta :h codi-introduction-warnings
para más información.
Verifica :h codi-introduction-gotchas
.
codi.vim (este enlace se abre en una nueva ventana) por metakirby5 (este enlace se abre en una nueva ventana)
:notebook_with_decorative_cover: The interactive scratchpad for hackers.