Как удалить несколько буферов в Vim?

Принятие у меня есть несколько файлов, открытых как буферы в Vim. Файлы имеют *.cpp, *.h и некоторые *.xml. Я хочу закрыть все XML-файлы с :bd *.xml. Однако Vim не позволяет это (E93: больше чем одно соответствие...).

Там какой-либо путь состоит в том, чтобы сделать это?

P.S. Я знаю это :bd file1 file2 file3 работы. Так могу я так или иначе оценивать *.xml кому: file1.xml file2.xml file3.xml?

110
задан T Zengerink 23 January 2013 в 14:56
поделиться

2 ответа

Вы можете использовать это.

:exe 'bd '. join(filter(map(copy(range(1, bufnr('$'))), 'bufname(v:val)'), 'v:val =~ "\.xml$"'), ' ')

Его должно быть довольно легко добавить в команду.

function! s:BDExt(ext)
  let buffers = filter(range(1, bufnr('$')), 'buflisted(v:val) && bufname(v:val) =~ "\.'.a:ext.'$"')
  if empty(buffers) |throw "no *.".a:ext." buffer" | endif
  exe 'bd '.join(buffers, ' ')
endfunction

command! -nargs=1 BDExt :call s:BDExt(<f-args>)
5
ответ дан 24 November 2019 в 03:13
поделиться

Попробуйте сценарий, указанный ниже. Пример для "txt", при необходимости измените его, например в "xml". Модифицированные буферы не удаляются. Нажмите \ bd, чтобы удалить буферы.

map <Leader>bd :bufdo call <SID>DeleteBufferByExtension("txt")

function!  <SID>DeleteBufferByExtension(strExt)
   if (matchstr(bufname("%"), ".".a:strExt."$") == ".".a:strExt )
      if (! &modified)
         bd
      endif
   endif
endfunction

[Изменить] То же самое без: bufdo (по просьбе Люка Эрмитта, см. Комментарий ниже)

map <Leader>bd :call <SID>DeleteBufferByExtension("txt")

function!  <SID>DeleteBufferByExtension(strExt)
   let s:bufNr = bufnr("$")
   while s:bufNr > 0
       if buflisted(s:bufNr)
           if (matchstr(bufname(s:bufNr), ".".a:strExt."$") == ".".a:strExt )
              if getbufvar(s:bufNr, '&modified') == 0
                 execute "bd ".s:bufNr
              endif
           endif
       endif
       let s:bufNr = s:bufNr-1
   endwhile
endfunction
5
ответ дан 24 November 2019 в 03:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: