Закрытие файлов в Vim из каталога и его подкаталогов - PullRequest
1 голос
/ 01 апреля 2009

Есть ли способ в vim закрыть все файлы (буферы, давайте не будем вдаваться в это) из некоторого каталога и его подкаталогов?

Ответы [ 2 ]

8 голосов
/ 01 апреля 2009

Поместите следующее в ваш .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

чтобы закрыть буферы, имена которых соответствуют переданным регулярным выражениям.

Это означает, что для закрытия всех файлов из определенной папки вы можете использовать

:CloseBuffers workspace/cpp
:CloseBuffers /home/my/project

Чтобы закрыть все файлы из текущего каталога и всех его подкаталогов

:exec "CloseBuffers ".getcwd()
4 голосов
/ 02 апреля 2009

Вы можете сделать это довольно кратко:

: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

и т.д.. и т.д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...