diff --git a/README.md b/README.md index d0ff65f..db31d6b 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ Run `:Repl` without saving the code on a file. * JavaScript * Clojure * Idris +* Racket ## Installation diff --git a/autoload/repl.vim b/autoload/repl.vim index 7e19b2c..cf41152 100644 --- a/autoload/repl.vim +++ b/autoload/repl.vim @@ -24,6 +24,8 @@ function! repl#run_repl() abort call repl#clojure#open_repl() elseif &filetype ==# 'idris' call repl#idris#open_repl() + elseif &filetype ==# 'scheme' + call repl#scheme#open_repl() else call repl#echo_error("Sorry, repl.vim didn't support this filetype") endif diff --git a/autoload/repl/scheme.vim b/autoload/repl/scheme.vim new file mode 100644 index 0000000..b6d4de6 --- /dev/null +++ b/autoload/repl/scheme.vim @@ -0,0 +1,21 @@ +scriptencoding utf-8 + +function! repl#scheme#open_repl() abort + if &modified + let l:module_file = tempname() . '.rkt' + call writefile(getline(1, expand('$')), l:module_file) + else + let l:module_file = expand('%:p') + endif + + let l:repl = repl#get_filetype_repl('scheme') + let l:exec_name = split(l:repl['repl'], ' ')[0] + if !executable(l:exec_name) + call repl#echo_error(printf("You don't have repl: '%s'", l:exec_name)) + return + endif + let l:args = printf('%s -f %s %s', l:repl['repl'], l:module_file, l:repl['opt']) + let l:vimshell_interactive = ':VimShellInteractive' . printf("--split='%s'", g:repl_split_command) + execute l:vimshell_interactive l:args +endfunction + diff --git a/plugin/repl.vim b/plugin/repl.vim index b671bf2..00688dc 100644 --- a/plugin/repl.vim +++ b/plugin/repl.vim @@ -36,6 +36,10 @@ let g:repl#default_filetype_repl = { \ 'idris' : { \ 'repl' : 'idris', \ 'opt' : '' +\ }, +\ 'scheme' : { +\ 'repl' : 'racket', +\ 'opt' : '-i' \ } \}