"silent exec "ecl (load \"" . $VIMRUNTIME . "/if_ecl.lisp\")" "silent function! s:New_tmp_lisp_buffer( name, modifiable, listed ) if -1 == bufnr( a:name ) silent exec "new" a:name else silent exec "sb" bufnr( a:name ) endif let bufnr = bufnr( "%" ) silent setlocal bufhidden=hide buftype=nofile filetype=lisp noswapfile let &l:buflisted = a:listed let &l:modifiable = a:modifiable close return bufnr endfunction let g:slime_output_buffer = s:New_tmp_lisp_buffer ("--debug-sv--", 1, 1) let g:slim_vim_buffer = s:New_tmp_lisp_buffer ("--slim-vim-debug--", 1, 0) let g:slim_vim_inspect_buffer = s:New_tmp_lisp_buffer ("--slim-vim-inspect--", 1, 0) let g:slim_vim_repl_buffer = s:New_tmp_lisp_buffer ("--slim-vim-repl--", 1, 1) let g:slim_vim_error_buffer = s:New_tmp_lisp_buffer ("--slim-vim-errors--", 1, 0) "function! ECLSlime_find_paren( recursive, ... ) " let recurs = '' " if a:recursive > 0 " let recurs = 'r' " endif " " let dir = '' " if a:0 > 0 " let dir = a:1 " endif " " call searchpair( "(", '', ")", dir . recurs . "W", "ECLIn_comment_or_string()" ) "endfunction "function! ECLIn_comment_or_string() " let line = getline( "." ) " if line =~ '[";]' " let cur_syn_name = synIDattr( synID( line("."), col("."), 0 ), "name" ) " if cur_syn_name == "lispComment" " \ || cur_syn_name == "lispString" " return 1 " endif " endif " return 0 "endfunction "function! ECLSlime_append_to_buffer( bufnr, text, fresh_line ) " let text = a:text " " silent exec "sb" a:bufnr " "silent normal G$ " if a:fresh_line && virtcol( "." ) > 1 " let text = "\n" . text " endif " " "let old_modif = &l:modifiable " setl modifiable " " let old_paste = &paste " set paste " " silent exec "normal GA\=text\" " "silent normal G$ " " set nopaste " " "let &l:modifiable = old_modif " let &paste = old_paste " " silent close "endfunction "function! ECLSlime_append_output (text, fresh_line) " call ECLSlime_append_to_buffer (g:slime_output_buffer, a:text, a:fresh_line) "endfunction function! s:SlimVim_main_mappings () " x is eval (Slime = C-M-x) " Mnemonic eXecute nmap x :ecl (vim-slime::slime-eval-defun) " X is eval only the next outer form (Slime = C-x C-e) " Mnemonic eXecute nmap X :ecl (vim-slime::slime-eval-last-expression) " c compile and load file nmap c :ecl (vim-slime::slime-compile-file t) " C compile file nmap C :ecl (vim-slime::slime-compile-file nil) " sc is connect to a running Swank instance (Slime = M-x slime) " Mnemonic SlimeConnect nmap sc :ecl (vim-slime::slime-connect) " sd is disconnect from a running Swank instance " Mnemonic SlimeDisconnect nmap sd :ecl (slime::disconnect) " i is inspect the word under the cursor nmap i :ecl (vim-slime::slime-inspect) " Mapping for echoing the arglist imap :ecl (vim-slime::slime-echo-current-arglist)a " Send an interrupt to the Swank backend nmap b :ecl (slime:send-sigint) " macroexpand-1 the form under point nmap m :ecl (vim-slime::slime-macroexpand-1) " macroexpand-all the form under point nmap M :ecl (vim-slime::slime-macroexpand-all) endfunction " need to have 2 status lines set cmdheight=2 " Stash the original buffer let s:old_buffer = bufnr ("%") " Keymappings for the REPL buffer, many are the same as Lisp buffers buffer --slim-vim-repl-- nmap :ecl (vim-slime::repl-handle-enter-key) " Mapping for echoing the arglist imap :ecl (vim-slime::slime-echo-current-arglist :repl t)a nmap i :ecl (vim-slime::slime-inspect) " Send an interrupt to the Swank backend nmap b :ecl (slime:send-sigint) " macroexpand-1 the form under point nmap m :ecl (vim-slime::slime-macroexpand-1) " macroexpand-all the form under point nmap M :ecl (vim-slime::slime-macroexpand-all) " Keymappings for the debug buffer buffer --slim-vim-debug-- nmap 0 :ecl (slime::sldb-invoke-restart 0) nmap 1 :ecl (slime::sldb-invoke-restart 1) nmap 2 :ecl (slime::sldb-invoke-restart 2) nmap 3 :ecl (slime::sldb-invoke-restart 3) nmap 4 :ecl (slime::sldb-invoke-restart 4) nmap 5 :ecl (slime::sldb-invoke-restart 5) nmap 6 :ecl (slime::sldb-invoke-restart 6) nmap 7 :ecl (slime::sldb-invoke-restart 7) nmap 8 :ecl (slime::sldb-invoke-restart 8) nmap 9 :ecl (slime::sldb-invoke-restart 9) nmap :ecl (interface::sldb-handle-enter-key) " Inspector mappings buffer --slim-vim-inspect-- nmap :ecl (interface::inspector-handle-enter-key) nmap l :ecl (interface::slime-inspector-pop) nmap q :ecl (interface::slime-inspector-quit) " Change back to the original buffer exec "buffer" s:old_buffer " Mappings below here are very temporary nmap 3 :ecl (vim-slime::slime-connect) nmap r0 :ecl (slime::sldb-invoke-restart 0) nmap r1 :ecl (slime::sldb-invoke-restart 1) nmap r2 :ecl (slime::sldb-invoke-restart 2) nmap r3 :ecl (slime::sldb-invoke-restart 3) " Only one function at the moment, but more later. " NOTE: Only do stuff here directly related to ecl-slime, i.e. do not "set " lisp" or "set syntax=lisp", etc. If users want to do general Lisp-related " stuff, they can create their own autocommands in their own .vimrc. function! s:SlimVim_bufread() call s:SlimVim_main_mappings() exec "set efm=%f>%l>%m" endfunction augroup slim_vim au! autocmd BufNewfile,BufRead *.lisp,*.lsp,*.cl,*.lml,*.asd call s:SlimVim_bufread() autocmd VimLeave * ecl (slime::disconnect t) augroup END if exists("$ECL_SLIME_PATH") let s:cwd = getcwd() exec "cd" $ECL_SLIME_PATH ecl (load "ecl-slime-loader.lisp") exec "cd" s:cwd else echoerr "Environment variable ECL_SLIME_PATH isn't set !" endif command! Slime :ecl (vim-slime::slime-connect) doautoall slim_vim BufRead