Bagaimana saya bisa memuat ulang semua buffer sekaligus?

20

Saat mengerjakan cabang fitur di git, saya sering harus menyimpan perubahan saya untuk melakukan perbaikan bug ke cabang utama. Ketika saya selesai mengerjakan perubahan, saya git stash pop, yang memperbarui cap waktu pada file.

Meskipun file tersebut identik, pada saat saya mencoba menyimpan, saya mendapatkan:

PERINGATAN: File telah diubah sejak membacanya !!!

Apakah Anda benar-benar ingin menulis kepadanya (y / n)?

Saya tidak ingin memuat ulang file secara otomatis setiap kali itu berubah pada disk, hanya ketika saya git stash pop.

Saat ini, saya memuat ulang setiap buffer secara manual ( :e). Apakah ada cara saya bisa melakukan ini dalam satu perintah?

hajar
sumber

Jawaban:

26

Lihat :help bufdoapa yang ingin Anda lakukan. Ini akan menjalankan perintah di setiap buffer dalam daftar buffer. Sebagai contoh:

:bufdo e

Anda mungkin juga ingin melihat :help noconfirmuntuk menonaktifkan dialog konfirmasi sebelum mengeluarkan bufdoperintah

:set noconfirm

dan mengaktifkannya kembali setelah bufdoperintah.

:set confirm
Matius S
sumber
1
Untuk kekuatan, cobalah: :bufdo! e.
kenorb
dan tanpa mencetak pesan di layar: diam! bufdo e
Werner
11

Anda dapat melakukan ini dengan :checktimeperintah. Dari dokumen :

:checkt[ime]        Check if any buffers were changed outside of Vim.
                    This checks and warns you if you would end up with two
                    versions of a file.

Perintah akan menanyakan apa yang harus dilakukan untuk setiap buffer file yang timestamp-nya telah berubah. Untuk menonaktifkan ini untuk file yang belum berubah, Anda dapat :set autoreadmemaksa vim untuk memuatnya kembali. vim akan menanyakan Anda apakah konten antara buffer dan file pada disk telah berubah.

Anda dapat mengatur peta seperti berikut ini untuk kemudahan penggunaan:

nnoremap <F5> :checktime<CR>
tokoyami
sumber
Berikut adalah beberapa informasi bonus yang tidak benar-benar bagian dari jawabannya: Bagi saya, di OpenSUSE, gvim (GTK GUI untuk vim) melakukan ini secara otomatis ketika mendapatkan fokus. Saya tidak benar-benar tahu mengapa ia melakukannya dan saya belum memeriksa sistem lain tetapi saya pikir ini mungkin berguna sebagai tambahan. Mungkin seseorang bisa mengonfirmasi?
tokoyami
Ini sangat membantu! Apa yang saya lakukan pada akhirnya adalah mengintegrasikan perintah ini sebagai bagian dari pintasan pemindahan tab saya. yaitunnoremap tl :tabnext<CR>:checktime<CR>
cr8ivecodesmith
1
@tokoyami, fitur yang Anda miliki gvimmungkin terkait dengan FocusGainedacara di vim. Anda dapat menemukan beberapa informasi terkait di sini - unix.stackexchange.com/a/383044/99801 .
Victor Yarema