如何删除Vim中的所有空缓冲区?
我现在有120个缓冲器在Vim中打开。大约50%的缓冲区是空文件。我想以某种方式使用如何删除Vim中的所有空缓冲区?,vim,Vim,我现在有120个缓冲器在Vim中打开。大约50%的缓冲区是空文件。我想以某种方式使用:bufdo关闭所有空缓冲区的命令。我有没有办法说: :bufdo! ‹cmd› 其中嫀cmd›是一个条件命令,如果当前缓冲区的长度/大小为零,则该命令将删除当前缓冲区。我唯一能想到的是创建一个 报告缓冲区是否为空。大概是这样的: function! BufferIsEmpty() return line('$') == 1 && getline(1) == '' endfunctio
:bufdo代码>关闭所有空缓冲区的命令。我有没有办法说:
:bufdo! ‹cmd›
其中嫀cmd›
是一个条件命令,如果当前缓冲区的长度/大小为零,则该命令将删除当前缓冲区。我唯一能想到的是创建一个
报告缓冲区是否为空。大概是这样的:
function! BufferIsEmpty()
return line('$') == 1 && getline(1) == ''
endfunction
因为它不允许影响缓冲区列表
一个:bufdo
-参数命令(请参见:help:bufdo
),我们有
使用更加冗长但相当简单的Vim脚本
下面的函数枚举所有现有缓冲区编号并删除
那些没有名称(显示为[无名称]
的
接口)或任何未保存的更改。后一个条件是有保证的
通过调用:bdelete
命令而不使用尾随
代码>签名,在这种情况下,将跳过修改的缓冲区
function! DeleteEmptyBuffers()
let [i, n; empty] = [1, bufnr('$')]
while i <= n
if bufexists(i) && bufname(i) == ''
call add(empty, i)
endif
let i += 1
endwhile
if len(empty) > 0
exe 'bdelete' join(empty)
endif
endfunction
请注意,bufexists()
在此处更改为bufloaded()
。它是
必要的,因为可以只获取这些文件的内容
加载的缓冲区;对于卸载的缓冲区getbufline()
返回
一个空列表,无论其内容如何。我一直在使用以下函数来完成此工作:
function! s:CleanEmptyBuffers()
let buffers = filter(range(1, bufnr('$')), 'buflisted(v:val) && empty(bufname(v:val)) && bufwinnr(v:val)<0 && !getbufvar(v:val, "&mod")')
if !empty(buffers)
exe 'bw ' . join(buffers, ' ')
endif
endfunction
函数!s:CleanEmptyBuffers()
让buffers=filter(range(1,bufnr('$),'buflisted(v:val)&&empty(bufname(v:val))&&bufwinnr(v:val)类似条件:line2byte(line(“$”)+1)@ZyX:Why不line2byte(line('$)<2
?@ibvim-u NONE-N-N-c'调用setline(“,”abc”);echo line2byte(line(“$”)“
注意:bufdo
-参数命令不能添加或删除缓冲区(请参见:help:bufdo
)。
function! s:CleanEmptyBuffers()
let buffers = filter(range(1, bufnr('$')), 'buflisted(v:val) && empty(bufname(v:val)) && bufwinnr(v:val)<0 && !getbufvar(v:val, "&mod")')
if !empty(buffers)
exe 'bw ' . join(buffers, ' ')
endif
endfunction