MJ - The below script (based on Slime.vim ) defines some key bindings to execute contents of the current selection, paragraph or buffer in Vim in a running wish process using DDE. This is ideal for interactive developing where you can immediately test your changes.
Put the following somewhere as a vim plugin:
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let s:current_dir=expand("<sfile>:p:h") function Send_to_Tcl(text) if has('win32') || has('win64') let s:tcl_file = s:current_dir . "/ipc-win.tcl" if !exists("g:tcl_ipc_initialized") tcl package require dde let g:tcl_ipc_initialized = 1 endif let running = 0 tcl ::vim::command "let running = [expr {[dde services TclEval vimsh] ne ""}]" if !running execute "silent !cmd /c start wish " . s:tcl_file else tcl dde eval vimsh [::vim::expr a:text] endif endif endfunction """""""""""""""""""""""""""""""""""""""""""""""""""""""""""" vmap <C-c><C-c> "ry :call Send_to_Tcl(@r)<CR> nmap <C-c><C-c> vip<C-c><C-c> nmap <C-c><C-b> :call Send_to_Tcl(join(getline(1,'$'), "\n"))<CR>
Put the following script in ipc-win.tcl in the same directory as the plugin file:
package require dde dde servername -handler callback vimsh interp create slave wm title . vimsh proc callback {text} { if {[catch {slave eval $text} result details]} { console show puts stderr [dict get $details -errorinfo] } }
That's it, now C-c C-c will send the current selection (or the paragraph if there is no selection) and C-c C-b will send the whole buffer. If an error occurs in the sent script the console will be popped up and the full error trace will be shown.
Of course this requires a Vim built with Tcl support (if_tcl) and wish in the path.