Segarkan semua file dalam buffer dari disk di vim


124

Perintah untuk menyegarkan file dari versi di disk adalah :e!

Bagaimana saya bisa melakukan hal yang sama untuk semua file di buffer?

Latar belakang: Saya membutuhkannya karena saya menggunakan git dengan banyak cabang dengan satu vim terbuka yang berisi buffer. Saat saya melakukan pembayaran di cabang, saya ingin mendapatkan penyegaran vim.

Jawaban:


87

Baca dokumentasi untuk bufdo, itu harus melakukan apa yang Anda inginkan.


33
ok bagus jadi,: bufdo e! akan melakukan itu. Tapi ada prompt Load (Y / N) setiap saat. Bagaimana saya bisa menyingkirkannya?
odwl

21
Gunakan set noconfirmsebelum menggunakan bufdoperintah ( set confirmsetelah itu dapat digunakan kembali).
pmf

22
bufdo eanehnya meninggalkan semua buffer tidak disorot sintaks
Steven Lu

4
@StevenLu Periksa jawaban PaulFenney di bawah ini.
DBedrenko

12
Mengapa orang-orang memilih ini? Ini bukan hanya bukan jawaban, tetapi arah yang Anda tuju berarti penyorotan sintaks Anda dinonaktifkan setelah memuat ulang.
Dmitry Minkovsky

120

The :checkt[ime]perintah dirancang untuk tujuan ini.

Ini akan meminta Anda untuk memuat ulang semua buffer yang telah berubah; jika Anda ingin melewatkan prompt, Anda dapat melakukannya :set autoreadsebelumnya (Anda masih akan mendapatkan prompt tentang buffer dengan perubahan lokal yang belum disimpan).

Ini juga menghindari masalah penyorotan sintaks yang disebutkan oleh Steven Lu pada jawaban yang diterima; :bufdomematikan penyorotan sintaks menurut desain .

Ditemukan melalui: http://vim.1045645.n5.nabble.com/Bug-report-bufdo-e-breaking-syntax-highlighting-on-displayed-buffers-tp1209995p1209998.html


19

Inilah yang akhirnya saya masukkan ke .vimrc saya:

fun! PullAndRefresh()
  set noconfirm
  !git pull
  bufdo e!
  set confirm
endfun

nmap <leader>gr call PullAndRefresh()

7

Dari :help autoread:

Ketika sebuah file terdeteksi telah diubah di luar Vim dan belum diubah di dalam Vim, otomatis membacanya lagi. Ketika file telah dihapus, ini tidak dilakukan.

Jika, seperti saya, Anda hanya ingin selalu memuat ulang buffer yang sudah basi-tapi-tidak diubah secara pasif , maka sepertinya ini harus menyelesaikan pekerjaan.

Namun detail terakhirnya adalah ketika vim memperhatikan buffer yang sudah lama. Itu bisa dipaksakan checktime. Jika Anda telah menyiapkan acara fokus , maka kami dapat menjalankannya checktimekapan pun kami mendapatkan fokus seperti:

set autoread
autocmd FocusGained * checktime

Jawaban ini juga memiliki beberapa detail menarik.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.