从目录及其子目录中关闭Vim中的文件

时间:2009-04-01 15:53:42

标签: vim

在vim中是否有办法从某个目录及其子目录中关闭所有文件(缓冲区,让我们不进入)?

2 个答案:

答案 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

等。等