Vim程序执行的新窗口,类似于cwindow
我正在使用Vim编辑/编译单个cpp文件makepgr=g++\-g\%,并希望理想地使用F6这样的快捷键执行生成的二进制文件。然后,所需的行为是打开一个新窗口,类似于:cwindow,具有固定的最大高度(比如20行),其中包含程序输出。我也希望能够关闭这个窗口再次与另一个快捷键如F7 作为奖励,最好在windows标题/状态中显示程序的执行时间Vim程序执行的新窗口,类似于cwindow,vim,execution,Vim,Execution,我正在使用Vim编辑/编译单个cpp文件makepgr=g++\-g\%,并希望理想地使用F6这样的快捷键执行生成的二进制文件。然后,所需的行为是打开一个新窗口,类似于:cwindow,具有固定的最大高度(比如20行),其中包含程序输出。我也希望能够关闭这个窗口再次与另一个快捷键如F7 作为奖励,最好在windows标题/状态中显示程序的执行时间 编辑:我所说的二进制文件是非交互式的!他们通常读取一些输入文件,进行数据操作,将结果写入其他文件,并在执行此操作时有一些输出。我不确定这是否有任何帮助
编辑:我所说的二进制文件是非交互式的!他们通常读取一些输入文件,进行数据操作,将结果写入其他文件,并在执行此操作时有一些输出。我不确定这是否有任何帮助,因为您正在询问有关vim的信息: 我对如何解决这个问题的第一个想法是使用GNU屏幕。原因不是vim不能做到这一点,而是vim不能完全用作终端仿真器,所以运行一些交互式程序不起作用。Plus屏幕相对容易配置
当然,我会为该任务编写一个专门的屏幕配置。我不确定这是否有任何帮助,因为您正在询问vim: 我对如何解决这个问题的第一个想法是使用GNU屏幕。原因不是vim不能做到这一点,而是vim不能完全用作终端仿真器,所以运行一些交互式程序不起作用。Plus屏幕相对容易配置
当然,我会为该任务编写一个专门的屏幕配置。您可以将输入重定向到quickfix窗口,类似于:make works: :cex systemexpand%:r..exe 您可以使用:colder和:cnewer浏览快速修复历史记录
我意识到这并不完全是您想要的,但希望它足够有用。您可以将输入重定向到quickfix窗口,类似于:make works: :cex systemexpand%:r..exe 您可以使用:colder和:cnewer浏览快速修复历史记录 我意识到这并不完全是您想要的,但希望它足够有用。添加到vimrc:
map <F6> :tabnew<CR>:.!ls -la<CR>
您甚至可以为该选项卡命名:
map <F6> :tabnew myprog<CR>:.!./myprog<CR>
用您喜欢的任何其他数字替换5。还加
map <F7> :tabclose<CR>
可以通过按F7关闭选项卡
另外,您可以将硬编码的myprog名称替换为expand%:r..exe for Windows,或者如前所述,仅扩展%:r for*nix。添加到vimrc:
map <F6> :tabnew<CR>:.!ls -la<CR>
您甚至可以为该选项卡命名:
map <F6> :tabnew myprog<CR>:.!./myprog<CR>
用您喜欢的任何其他数字替换5。还加
map <F7> :tabclose<CR>
可以通过按F7关闭选项卡
另外,您可以将硬编码的myprog名称替换为expand%:r..exe for Windows,也可以像前面所说的那样将%:r for*nix展开。这个小脚本应该可以实现以下功能:
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插件——理解起来相当简单。
您可以修改窗口大小首选项的“拆分”命令。这个小脚本应该可以实现以下功能:
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插件——理解起来相当简单。
您可以修改窗口大小首选项的拆分命令。这当然是可行的。然而,我希望避免在vim和其他一些程序/控制台之间切换,即使在屏幕上也是如此。当然,这是一种可行的方法。然而,我希望避免在vim和其他一些程序/控制台(甚至在屏幕上)之间切换。是否可能有类似于quickfix窗口的其他命名窗口,我可以将输出重定向到这些窗口?是否可能有类似于quickfix窗口的其他命名窗口,我可以将输出重定向到这些窗口?这是一个好的开始。当我按照您的描述运行F6时,它将始终打开一个新窗口,而不是刷新旧窗口。这个问题能解决吗?另外:“拆分”案例的F7替代方案是什么?这是一个良好的开端。当我按照您的描述运行F6时,它将始终打开一个新窗口,而不是刷新旧窗口。这个问题能解决吗?另外:“拆分”案例的F7替代方案是什么?太好了,谢谢!不过有一件小事:如何在执行二进制文件之前刷新缓冲区/窗口,以便多次点击F6只会给出一个输出将nmap更改为nmap:call Open\u output\u windowggdG:r!%:r、 exe会成功的。太好了,谢谢!不过有一件小事:如何在执行二进制文件之前刷新缓冲区/窗口,以便多次点击F6只会给出一个输出将nmap更改为nmap:call Open\u output\u windowggdG:r!%:r、 exe可以做到这一点。