3

我使用这个命令 :!g++ % -g -lm && a.exe & pause 结果出现在一个新的命令提示符中。我正在使用 gvim7.3。我怎样才能让 VIM 在同一个窗口中显示结果(水平分割)?提前致谢。

4

3 回答 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 回答