回答:
を使用<C-a>
して、すべての試合を完了することができます。したがって、タイプして:bd *.xml
からを<C-a>
押すと、vimはへのコマンドを完了し:bd file1.xml file2.xml file3.xml
ます。
vim-rsi
インストールした場合(私は、* nixのすべての人にとって必要なものだと思います)、<C-a>
コマンドラインで元の方法で作業を行うには、<C-x>
<C-a>
代わりに使用する必要があります。
代わりに使用することもできます:
:.,$-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>
ために使用されるのは、1つのファイルのみオートコンプリートされます。
あなたはただ使うことができます:
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>
すべての一致を一度に追加します。