首页 > 解决方案 > 在 VIM 中为同一命令重用旧缓冲区以进行竞争性编程

问题描述

最近我接触了 VIM,并多次尝试将它用于竞争性编程。所以我尝试了谷歌的东西来获取信息,直到现在我已经从其他人的 .vimrc 收集了代码,同时避免使用插件(出于某些特定原因)。所以最后我现在正在使用我从Mr.Michael Lan那里借来的一个相当不错的编译功能。现在我的 .vimrc 的一部分看起来像这样:

function! TermWrapper(command) abort
    if !exists('g:split_term_style') | let g:split_term_style = 'vertical' | endif
    if g:split_term_style ==# 'vertical'
        let buffercmd = 'vnew'
    elseif g:split_term_style ==# 'horizontal'
        let buffercmd = 'new'
    else
        echoerr 'ERROR! g:split_term_style is not a valid value (must be ''horizontal'' or ''vertical'' but is currently set to ''' . g:split_term_style . ''')'
        throw 'ERROR! g:split_term_style is not a valid value (must be ''horizontal'' or ''vertical'')'
    endif
    exec buffercmd
    if exists('g:split_term_resize_cmd')
        exec g:split_term_resize_cmd
    endif
    exec 'term ' . a:command
    exec 'setlocal nornu nonu'
    exec 'startinsert'
    autocmd BufEnter <buffer> startinsert
endfunction

let g:split_term_style = 'vertical'
let g:split_term_resize_cmd = 'vertical resize 80'

command! -nargs=0 CompileAndRun call TermWrapper(printf('g++ -std=c++11 %s && ./a.out', expand('%')))
autocmd FileType cpp nnoremap <leader>fw :CompileAndRun<CR>

如您所见,如果我尝试:CompileAndRun,它将在我的屏幕右侧打开一个新缓冲区,运行.cpp文件等......但是我遇到了一个问题。如果您:CompileAndRun第二次尝试,它将打开一个新的缓冲区来运行而不是使用旧的缓冲区,我觉得这很烦人(如果您的主cpp文件的屏幕越来越小,这会让您感到烦恼,尤其是在跑步比赛中我是对的吗?)。而且我不认为手动删除这些缓冲区是一种选择,因为它不是很方便。所以你们中的任何人都可以帮助我应对这项繁琐的任务。请记住,我仍然想继续使用该:CompileAndRun命令,并且只想重复使用上一个命令打开的缓冲区。

标签: neovim

解决方案


推荐阅读