Skip to content

Instantly share code, notes, and snippets.

@a13xb
Created June 27, 2013 02:21
Show Gist options
  • Save a13xb/5873488 to your computer and use it in GitHub Desktop.
Save a13xb/5873488 to your computer and use it in GitHub Desktop.
Quickly evaluate C and Python code in the current buffer (Shift + Enter).
let s:buf_nr = -1
function! EvalView()
if !bufexists(s:buf_nr)
leftabove vnew
file `="[Eval]"`
let s:buf_nr = bufnr('%')
elseif bufwinnr(s:buf_nr) == -1
leftabove vsplit
exe s:buf_nr . 'buffer'
delete _
elseif bufwinnr(s:buf_nr) != bufwinnr('%')
exe bufwinnr(s:buf_nr) . 'wincmd w'
endif
setlocal bufhidden=delete
setlocal buftype=nofile
setlocal noswapfile
setlocal nobuflisted
setlocal modifiable
setlocal nocursorline
setlocal nocursorcolumn
setlocal iskeyword+=:
setlocal iskeyword-=-
au BufHidden <buffer> call let <SID>buf_nr = -1
endfunction
function! PyEval()
let l:w = winnr()
silent let l:script = join(getline(0, "$"), "\n")
silent let l:content = system("cat<<'EOF' | python3\n" . l:script . "\nEOF\n")
"silent! let content = system('python solve.py < sample.in')
silent! call EvalView()
setlocal modifiable
silent! %d _
silent! put! =content
silent! normal gg
setlocal nomodifiable
exe l:w . 'wincmd w'
endfunction
function! CEval()
let l:w = winnr()
silent let l:script = join(getline(0, "$"), "\n")
silent let l:content = system("rm -f /tmp/ceval")
silent let l:content = system("cat<<'EOF' | gcc -std=c99 -Wall -Werror -xc -O3 -o /tmp/ceval - && /tmp/ceval\n" . l:script . "\nEOF\n")
silent! call EvalView()
setlocal modifiable
silent! %d _
silent! put! =content
silent! normal gg
setlocal nomodifiable
exe l:w . 'wincmd w'
endfunction
au FileType python map <buffer> <S-cr> :call PyEval()<CR>
au FileType c map <buffer> <S-cr> :call CEval()<CR>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment