Vim程序执行的新窗口,类似于cwindow

时间:2011-03-21 13:53:09

标签: vim execution

我正在使用Vim编辑/编译单个cpp文件(makepgr=g++\ -g\ %),并且希望使用像 F6 这样的快捷键理想地执行生成的二进制文件。然后,打开一个类似于:cwindow的新窗口,其中包含一个固定的最大高度(比如20行),其中包含程序输出。我还希望能够使用另一个短信来关闭此窗口,例如 F7

作为奖励,将程序的执行时间显示在windows title / status中会很棒。

编辑:我说的二进制文件是非交互式的!他们主要读取一些输入文件,进行数据操作,将结果写入其他文件,并在这样做时输出一些。

4 个答案:

答案 0 :(得分:3)

这个小脚本应该可以解决问题:

let s:title="ProgramOutput"

function! Open_output_window()
    let winnr = bufwinnr(s:title)
    if winnr != -1
        exe winnr . 'wincmd w'
        return
    endif

    let bufnr = bufnr(s:title)
    if(bufnr == -1)
        let wcmd = s:title
    else
        let wcmd = '+buffer' . bufnr
    endif

    exe 'silent! botright vertical 80 split ' .wcmd

    silent! setlocal buftype=nofile
    silent! setlocal noswapfile
    silent! setlocal nobuflisted
endfunction

function! Close_output_window()
    let winnr = bufwinnr(s:title)
    if winnr != -1
        exe winnr . 'wincmd w'
        close
    endif
endfunction

nmap <F6> <ESC>:call Open_output_window()<CR>:r ! %:r.exe<CR>
nmap <F5> <ESC>:call Close_output_window()<CR>

这些代码大部分都来自taglist.vim插件 - 它的理解起来相当简单。 您可以修改窗口大小首选项的split命令。

答案 1 :(得分:1)

我不确定这是否有用,因为你问的是vim:

我第一次想到如何解决这个问题就是使用GNU屏幕。原因不是,vim无法做到这一点,但vim并不完全可用作终端模拟器,因此运行一些交互式程序不起作用。 Plus屏幕相对容易配置。

我当然会为该任务编写专门的屏幕配置。

答案 2 :(得分:1)

添加到vimrc:

 map <F6> :tabnew<CR>:.!ls -la<CR>

打开vim并按 F6 。您应该在新选项卡中看到命令ls -la的输出。现在,如果这对您有用,那么您可以更改它(用您的可执行文件的名称替换myprog):

 map <F6> :tabnew<CR>:.!./myprog<CR>

您甚至可以为此标签指定名称:

 map <F6> :tabnew myprog<CR>:.!./myprog<CR>

不喜欢标签?将tabnew替换为splitvsplit,以允许水平或垂直分割窗口。想要拆分窗口小吗?使用

 map <F6> :5split myprog<CR>:.!./myprog<CR>

5替换为您喜欢的任何其他号码。还要添加

 map <F7> :tabclose<CR>

通过按 F7 来关闭标签。

P.S。您可以将硬编码的myprog名称替换为expand("%:r").".exe"(对于Windows),或仅替换为expand("%:r")(对于* nix)。

答案 3 :(得分:0)

您可以将输入重定向到quickfix窗口(类似于:make的工作方式):
:cex system(expand("%:r").".exe")

您可以使用:colder:cnewer

浏览quickfix历史记录

我意识到这并不是你想要的,但希望它足够接近有用。