如何运行g ++并在VIM中以水平分割显示结果

时间:2012-06-01 23:59:12

标签: vim g++

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

3 个答案:

答案 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>