neovim - 在 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
命令,并且只想重复使用上一个命令打开的缓冲区。
解决方案
推荐阅读
- laravel - 不能在刀片模板中使用 OR
- c# - 使用关键字 this. 实现构造函数有什么区别?
- c - execvp ls: 无法访问' ': 没有这样的文件或目录
- java - 不同包中的实体创建“引用未知实体”(多数据源场景)
- arrays - 使用 Matlab 获取矩阵中的唯一值
- php - 在 add_action 函数中使用 apply_filters 而不应用过滤器更改
- c - 在while循环中编辑int时C中的分段错误错误
- matlab - %A*算法中用于评估的临时矩阵
- c# - 选择堆积条形图显示的查询
- encoding - 这是什么类型的编码,它翻译成什么?}(]&[([%!"=))%%!")"