Dengan asumsi saya memiliki banyak file yang dibuka sebagai buffer di Vim. File-file tersebut memiliki *.cpp
, *.h
dan beberapa diantaranya *.xml
. Saya ingin menutup semua file XML dengan :bd *.xml
. Namun, Vim tidak mengizinkan ini (E93: Lebih dari satu pertandingan ...).
Apakah ada cara untuk melakukan ini?
PS Saya tahu itu :bd file1 file2 file3
berhasil. Jadi, dapatkah saya mengevaluasi *.xml
ke file1.xml file2.xml file3.xml
?
<tab>
hanya memungkinkan Anda untuk menelusuri pertandingan, meletakkan satu entri pada baris perintah,<C-a>
menambahkan semua pertandingan sekaligus.vim-rsi
menginstal (menurut saya, ini harus dimiliki oleh semua orang di * nix), untuk mendapatkan<C-a>
pekerjaan dengan cara asli di baris perintah, Anda harus menggunakan<C-x>
<C-a>
sebagai gantinya.Akan menghapus rentang buffer dari 3 hingga 5.
sumber
Anda juga dapat menggunakan alternatif menggunakan:
sumber
Anda bisa menggunakan ini.
Seharusnya cukup mudah menambahkannya ke perintah.
sumber
glob()
hanya akan memberi Anda file yang sudah ada (di hard drive Anda), dan tidak membuka buffer.fnameescape()
nama buffer.c:/Program files/foo.bar
, dan bahkanfoo.bar.foo
dan itu bekerja dengan sempurna.fnameescape()
mungkin diperlukan jika saya menggunakan nama buffer. Tapi saya hanya memeriksa apakah nama buffer cocok dengan ekspresi yang diberikan:\.{ext}$
- Saya memberikan nomor buffer ke: bd`. Saya tidak punya alasan untuk menghindari apa pun untuk pencocokan ekspresi reguler.Coba script di bawah ini. Contohnya adalah untuk "txt", ubah sesuai kebutuhan, misalnya menjadi "xml". Buffer yang dimodifikasi tidak dihapus. Tekan \ bd untuk menghapus buffer.
[Sunting] Sama tanpa: bufdo (seperti yang diminta oleh Luc Hermitte, lihat komentar di bawah)
sumber
:bufdo
karena itu mengacaukan jendela saat ini.Saya juga membutuhkan fungsi ini sepanjang waktu. Ini adalah solusi yang saya miliki di vimrc saya.
Sekarang, saya bisa melakukannya
:BW regex
(misalnya:BW \.cpp$
dan menghapus semua buffer yang cocok yang memiliki pola yang cocok di nama jalur mereka.Jika Anda ingin menghapus daripada menghapus, tentu saja Anda bisa menggantinya
exec 'bw ' . join(l:matchList, ' ')
denganexec 'bd ' . join(l:matchList, ' ')
sumber
:badd
,:bdelete
,:bufdo
,:bn
...)Sangat sederhana: gunakan
:bd[elete]
perintah. Misalnya,:bd[elete] buf#1 buf#5 buf#3
akan menghapus buffer 1, 3, dan 5.sumber
Anda bisa menggunakan:
lalu gunakan saja
<c-a>
untuk memfasilitasi penyelesaian semua file terbuka dari jenis file yang ditentukan.misalnya, Anda memiliki 1.xml, 2.xml, 3.xml, dan 4.xml, Anda dapat melakukan:
lalu tekan
<c-a>
vim akan melengkapi otomatis untuk Anda sebagai berikut:
Anda tinggal menekan enter untuk menyelesaikan perintah.
jika Anda telah membuat perubahan pada salah satu file yang disebutkan di atas, jangan lupa lakukan:
sumber