在vim中是否有办法从某个目录及其子目录中关闭所有文件(缓冲区,让我们不进入)?
答案 0 :(得分:8)
将以下内容放入.vimrc或vim插件文件夹中的某个自定义文件中。
function! s:close_buffers(name_regexp)
for buffer_number in range(1, bufnr('$'))
if !buflisted(buffer_number)
continue
endif
let name = fnamemodify(bufname( buffer_number ), ':p')
if name =~ a:name_regexp
exec 'bdelete '.buffer_number
endif
endfor
endfunction
command! -nargs=1 CloseBuffers call s:close_buffers(<f-args>)
使用
之类的命令:CloseBuffers include
:CloseBuffers in.*e
关闭名称匹配的缓冲区,传递regexp。
这意味着要关闭某个文件夹中的所有文件,您可以使用
:CloseBuffers workspace/cpp
:CloseBuffers /home/my/project
关闭当前目录和所有子目录中的所有文件
:exec "CloseBuffers ".getcwd()
答案 1 :(得分:4)
你可以这么简洁地做到这一点:
:silent! bufdo if expand('%')=~"some_regex"|bd|endif
或者如果你想要绝对路径名而不是相对路径:
:silent! bufdo if expand('%:p')=~"some_regex"|bd|endif
或者如果您希望它以交互方式提示您使用正则表达式,您可以将其设置为映射:
:let regex=input("> ")|silent! bufdo if expand('%:p')=~regex|bd|endif
等。等