我使用这个命令:!g ++%-g -lm&& a.exe&暂停 结果出现在新的命令提示符中。我正在使用gvim7.3。如何让VIM在同一窗口中显示结果(水平分割)? 提前谢谢。
答案 0 :(得分:2)
:make then:copen应该做的伎俩。您也可以使用以下命令关闭窗口:cclose。
答案 1 :(得分:1)
试试这个:
:new +r\ !g++\ #\ -g\ -lm
打开一个新的“窗口”并将g ++命令的输出读入其中。请注意,您需要使用#而不是%,因为您已切换到新缓冲区。
我不确定如何获得&&工作,所以我只想创建一个编译和执行的脚本。
你可能也想做“set nomod”,这样就可以关闭那个窗口而不保存文件。
答案 2 :(得分:0)
从我的.vimrc
,一个类似于你想要的功能。我使用vim而不是gvim,所以希望它仍然使用相同的工作目录约定。您需要使用filetype
插件才能使自动命令工作(该函数调用<F6>
,因此请注意这一点)。如果存在编译错误,则切换到quickfix模式。它还运行程序,输入文件是一个存在(应该是显而易见的如何删除该功能)。非常多的工作正在进行中,欢迎提出意见!
function! MakeAndRun()
w
let progName = expand('%:r')
if filereadable(progName . '.in')
let shCmd = 'time ./' . progName . ' < ' . progName . '.in 2>&1'
else
let shCmd = 'time ./' . progName . ' 2>&1'
endif
execute "normal \<F6>"
call setqflist([])
redraw | echo 'Compiling ' . progName
silent! belowright new Run\ results
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap nonumber
autocmd WinEnter <buffer> if winnr('$') == 1 | :q! | endif
execute 'silent %! make ' . progName
if v:shell_error
setlocal buftype=quickfix
cbuffer
execute 'wincmd p'
setlocal statusline=%qRun\ results
else
resize 4
redraw | echo 'Running program...<CTRL-C> to abort'
execute 'silent $read !'. shCmd
endif
normal gg
execute 'resize ' . min([12, line('$')+1])
execute 'wincmd p'
endfunction
autocmd FileType cpp nnoremap <buffer> <F5> :call MakeAndRun()<CR>
autocmd FileType cpp nnoremap <buffer> <silent> <F6> :if bufexists('Run results')\
\| execute bufwinnr('^Run results$') . 'wincmd w'\
\| :q!\
\| endif<CR>
autocmd FileType cpp imap <buffer> <F5> <C-O><F5>
autocmd FileType cpp imap <buffer> <F6> <C-O><F6>