我正在使用Vim编辑/编译单个cpp
文件(makepgr=g++\ -g\ %
),并且希望使用像 F6 这样的快捷键理想地执行生成的二进制文件。然后,打开一个类似于:cwindow
的新窗口,其中包含一个固定的最大高度(比如20行),其中包含程序输出。我还希望能够使用另一个短信来关闭此窗口,例如 F7 。
作为奖励,将程序的执行时间显示在windows title / status中会很棒。
编辑:我说的二进制文件是非交互式的!他们主要读取一些输入文件,进行数据操作,将结果写入其他文件,并在这样做时输出一些。答案 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
替换为split
或vsplit
,以允许水平或垂直分割窗口。想要拆分窗口小吗?使用
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
我意识到这并不是你想要的,但希望它足够接近有用。