Vim - simpan dan tutup buffer dalam satu perintah

25

Saya memiliki banyak file teks dalam direktori dan saya tahu saya harus mengedit masing-masing indiviudaly.

Saya mulai dengan garis commend

vim *.txt

yang membuka file sebagai buffer terpisah di vim dan membuat saya mencari di yang pertama. Saya mengeditnya - lalu saya gunakan ': w' untuk menyimpannya dan ': bd' untuk menutup buffer dan pindah ke yang berikutnya.

Ini ': w: bd' untuk menyimpan dan menutup buffer terasa lama bagi saya, dan saya curiga ada cara yang lebih vim untuk melakukannya - apa rekomendasi cara untuk menyimpan dan menutup buffer yang sedang Anda kerjakan dalam sekali gerakan?

Joe
sumber
Cara saya yang disarankan adalah dengan hanya pindah ke :nextbuffer dan menulis / tutup semuanya setelah tugas Anda selesai :wqa. Ini mengandaikan bahwa Anda miliki :set hiddendi ~/.vimrc.
romainl

Jawaban:

22

Saat meneruskan file ke Vim pada command-line, mereka tidak hanya dibuka di buffer, tetapi juga mengisi daftar argumen . Oleh karena itu, Anda dapat menggunakan perintah seperti :nextdan :firstuntuk menavigasi melalui mereka (dan :argdountuk pemrosesan batch, yang bisa menjadi trik bagus). Perintah yang saya sarankan untuk pertanyaan Anda adalah :wnext(bentuk pendek :wn), yang :writemerupakan buffer saat ini dan kemudian pergi ke yang :next.

Anda tidak perlu :bdeletebuffer secara eksplisit , terutama tidak ketika Anda meluncurkan Vim dari command-line dengan satu set file dan kemudian berhenti ketika selesai. (Satu-satunya pengecualian yang dapat saya pikirkan adalah membongkar file besar untuk menghemat memori sistem, atau menggunakan kembali contoh GVIM tunggal untuk banyak pengeditan yang berbeda.)

Namun, jika Anda benar-benar menginginkan ini, cukup tentukan perintah khusus, mis

:command Wd write|bdelete
Ingo Karkat
sumber
5
Anda telah menyebutkan dua metode untuk mencapai apa yang diminta OP, tapi yang kedua tidak jelas: :w|bd.
Jonno
-> Ini memiliki keuntungan menyesuaikan pendekatan yang digunakan OP, meskipun saya setuju :nextlebih masuk akal dalam beberapa kasus.
Jonno
4

Meskipun saya setuju bahwa Anda tidak harus menghapus buffer terbuka yang saat ini tidak Anda gunakan, saya suka menghapusnya karena saya memiliki garis tab vim-airline yang aktif, yang menampilkan semua buffer terbuka sepanjang waktu di bagian atas jendela. Saya memiliki yang berikut ini di .vimrc:

nnoremap qq :w\|bd<cr>

qq menyimpan dan menutup buffer saat ini, tetapi juga mengacaukan fungsi "record macro" dari vim (yang saya tidak keberatan).

apostl3pol
sumber
2
Built-in ZZdatang ke pikiran, tetapi akhirnya menabung dan berhenti sepenuhnya dari Vim, bukan hanya menghapus buffer. Huruf kecil zzmungkin merupakan pemetaan alternatif yang menarik, bagi siapa saja yang menemukan makro lebih berharga daripada memusatkan tampilan pada garis kursor saat ini.
8bittree
1
Baru-baru ini saya mengubahnya Q, setelah menyadari betapa berharganya rekaman dalam Vim.
apostl3pol