我经常要擦除所有加载了给定扩展名的缓冲区(通常是补丁生成的.rej文件)。只是这样做:如果有多个匹配,bw [!] * .rej会抱怨。有没有人有任何好的建议?目前我要么重复使用:bw * .rej + tab-complete,或者,如果有很多缓冲区,请使用:ls和:bw按数字组合一组缓冲区。
答案 0 :(得分:1)
vim中的Globbing有点困难(除了文件系统上的文件)。因此,最好的方法似乎是将通配符转换为正则表达式,然后检查缓冲区列表中的每个缓冲区以查看它是否匹配。像这样:
" A command to make invocation easier
command! -complete=buffer -nargs=+ BWipe call BWipe(<f-args>)
function! BWipe(...)
let bufnames = []
" Get a list of all the buffers
for bufnumber in range(0, bufnr('$'))
if buflisted(bufnumber)
call add(bufnames, bufname(bufnumber))
endif
endfor
for argument in a:000
" Escape any backslashes, dots or spaces in the argument
let this_argument = escape(argument, '\ .')
" Turn * into .* for a regular expression match
let this_argument = substitute(this_argument, '\*', '.*', '')
" Iterate through the buffers
for buffername in bufnames
" If they match the provided regex and the buffer still exists
" delete the buffer
if match(buffername, this_argument) != -1 && bufexists(buffername)
exe 'bwipe' buffername
endif
endfor
endfor
endfunction
可以用作:
:BWipe *.rej
或:
:BWipe *.c *.h
答案 1 :(得分:0)
顺便说一下,我最终选择了一种非常低技术的解决方案(我个人喜欢尽可能少地修改vim,这样我就可以在任何机器上使用了):
我添加了一个映射:
:map&lt; C-f&gt; :bw * .rej
然后我反复按 c为C-f是氟烃基; &LT;标签&gt; &LT; CR&GT;
答案 2 :(得分:0)
即将到来,但对我有用,有很多文件:
答案 3 :(得分:0)
执行 CTRL-A
以在光标前插入模式的所有匹配项。见:help c_CTRL-A
。例如,如果您加载了文件 a.rej
、b.rej
和 c.rej
,则执行
:bw *.rej<C-A>
会给你留下
:bw a.rej b.rej c.rej
然后您可以按 Enter 键擦除这些缓冲区。