我使用这个命令 :!g++ % -g -lm && a.exe & pause 结果出现在一个新的命令提示符中。我正在使用 gvim7.3。我怎样才能让 VIM 在同一个窗口中显示结果(水平分割)?提前致谢。
问问题
558 次
3 回答
2
:make 然后 :copen 应该可以解决问题。您也可以使用 :cclose 关闭窗口。
于 2012-06-02T00:10:51.563 回答
1
尝试这个:
:new +r\ !g++\ #\ -g\ -lm
这会打开一个新的“窗口”并将 g++ 命令的输出读入其中。请注意,您需要使用 # 而不是 % 因为您已切换到新缓冲区。
我不确定如何让 && 工作,所以我只需要创建一个可以编译和执行的脚本。
您可能还想执行“设置 nomod”,这样您就可以在不保存文件的情况下关闭该窗口。
于 2012-06-02T00:20:16.990 回答
0
从 my .vimrc
,一个功能类似于您想要的功能。我使用 vim 而不是 gvim,所以希望它仍然对工作目录使用相同的约定。您需要使用该filetype
插件才能使自动命令正常工作(该函数调用该插件,<F6>
因此请注意这一点)。如果出现编译错误,这将切换到快速修复模式。它还运行带有输入文件的程序(存在一个输入文件)(应该很明显如何删除该功能)。非常正在进行中的工作,因此欢迎发表评论!
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>
于 2012-06-02T03:40:51.090 回答