답변:
<C-a>
모든 경기를 완료 하는 데 사용할 수 있습니다 . 따라서 입력 :bd *.xml
한 다음을 누르면 <C-a>
vim이 명령을 완료합니다 :bd file1.xml file2.xml file3.xml
.
다음을 대신 사용할 수도 있습니다.
:.,$-bd[elete] " to delete buffers from the current one to last but one
:%bd[elete] " to delete all buffers
이것을 사용할 수 있습니다.
: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>)
glob()
하드 드라이브에있는 기존 파일 만 제공하고 열린 버퍼는 제공하지 않습니다.
fnameescape()
버퍼 이름을 잊어 버렸습니다 .
c:/Program files/foo.bar
, 심지어 foo.bar.foo
그것은 완벽했다. fnameescape()
버퍼 이름을 사용하면 필요할 수 있습니다. 하지만 버퍼 이름이 주어진 표현식과 일치하는지 확인하고 있습니다 \.{ext}$
.-버퍼 번호를 : bd`에 제공합니다. 정규식 일치를 위해 아무것도 이스케이프 할 이유가 없습니다.
아래 스크립트를 시도하십시오. 예는 "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없이 동일 (Luc Hermitte의 요청에 따라 아래 주석 참조)
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
:bufdo
그것이 현재 창을 엉망으로 만들기 때문에 좋아하지 않는다 .
나도 항상이 기능이 필요했습니다. 이것이 내 vimrc에있는 솔루션입니다.
function! GetBufferList()
return filter(range(1,bufnr('$')), 'buflisted(v:val)')
endfunction
function! GetMatchingBuffers(pattern)
return filter(GetBufferList(), 'bufname(v:val) =~ a:pattern')
endfunction
function! WipeMatchingBuffers(pattern)
let l:matchList = GetMatchingBuffers(a:pattern)
let l:count = len(l:matchList)
if l:count < 1
echo 'No buffers found matching pattern ' . a:pattern
return
endif
if l:count == 1
let l:suffix = ''
else
let l:suffix = 's'
endif
exec 'bw ' . join(l:matchList, ' ')
echo 'Wiped ' . l:count . ' buffer' . l:suffix . '.'
endfunction
command! -nargs=1 BW call WipeMatchingBuffers('<args>')
자, 난 그냥 할 수있는 :BW regex
예를 들어, ( :BW \.cpp$
자신의 경로 이름에 그 패턴과 일치하는 모든 일치하는 버퍼를 닦아냅니다.
삭제보다는 닦아하려는 경우, 당신은 물론 대체 할 수 exec 'bw ' . join(l:matchList, ' ')
와exec 'bd ' . join(l:matchList, ' ')
:badd
, :bdelete
, :bufdo
, :bn
...)
TAB
Vim 7.4.282부터는 모든 파일을 자동 완성하는 데
사용<c-a>
하는 파일 하나만 자동 완성됩니다 .
다음을 사용할 수 있습니다.
bd filetype
그런 다음 <c-a>
지정된 파일 유형의 모든 열린 파일을 쉽게 완성 하는 데 사용 하십시오.
예를 들어 1.xml, 2.xml, 3.xml 및 4.xml이있는 경우 다음을 수행 할 수 있습니다.
bd xml
그런 다음 <c-a>
vim은 다음과 같이 자동 완성됩니다.
bd 1.xml 2.xml 3.xml 4.xml
Enter를 눌러 명령을 완료 할 수 있습니다.
위에서 언급 한 파일 중 하나를 변경 한 경우 다음을 수행해야합니다.
bd! xml
<tab>
사용하면 일치 항목을 순환하고 명령 줄에 단일 항목을 입력하고<C-a>
모든 일치 항목을 한 번에 추가 할 수 있습니다.