Cukup sering saya bekerja dengan file yang dikontrol versi, sehingga dimungkinkan untuk membuat perubahan di luar Vim.
Apa cara cepat untuk memuat ulang file tanpa harus menutup dan membuka kembali Vim? Dan adakah cara untuk melakukan ini secara otomatis?
file-operations
load
Kevin Brown
sumber
sumber
" Compare buffer with saved version
nnoremap gd :DiffSaved<CR>
:h vim-faq
dan cari/reload
. Tag yang sulit diingat adalah:h faq-5.8
.Jawaban:
Perintah yang Anda inginkan adalah
:e
(kependekan dari:edit
). Jika Anda menggunakannya:edit!
akan membuang perubahan lokal dan memuat ulang.Anda juga dapat melakukan vim secara otomatis dengan
set autoread
vimrc Anda.sumber
autoread
.:bufdo :e
atau:bufdo :e!
:
adalah opsional::bufdo e
akan bekerja sama.Dalam banyak kasus,
set autoread
tidak akan berfungsi karena jawaban ini menjelaskan:Acara fokus akan memicu
autoread
, tetapi ini tidak ditangkap kecuali menggunakangvim
. Jadi, jika menjalankan polosvim
di dalam jendela terminal atau tmux, instal plugin vim-tmux-focus-events .Pada versi tmux> 1.9, Anda harus menambahkan
.tmux.conf
:Untuk kebaikan tambahan, menambahkan hal berikut ke
vimrc
pemicu keinginan Andaautoread
saat mengganti buffer di dalam saat berada di dalam vim:sumber
Jika Anda pernah menjalankan perintah eksternal dari Vim yang memodifikasi buffer saat ini, Anda mungkin telah memperhatikan bahwa itu meminta Anda untuk memuat ulang file karena perubahan telah dibuat ke disk. Anda sebenarnya dapat menjalankan prompt ini menggunakan
:checktime
perintah.sumber
Plugin yang bagus untuk meningkatkan
autoread
https://github.com/djoshea/vim-autoreadsumber
Saya memiliki masalah dalam melihat isi file, memperbarui file secara eksternal, menampilkan file yang diubah dan memiliki opsi untuk mengeditnya saat diperlukan. Saya menyelesaikannya dengan opsi server Vim / baris perintah jarak jauh, terinspirasi oleh jawaban ini .
Dengan perintah berikut, file dapat dimuat ulang melalui perintah eksternal. Pertama, buka file yang dimaksud dengan Vim, sambil memulai contoh server.
Mari kita asumsikan file telah diubah secara eksternal, misalnya oleh a
echo "Curiouser and curiouser" >> /tmp/alice.log
. Bila perlu, kirim perintah ke instance server untuk memuat ulang file. Perintah ini akan selesai dengan cepat dan tidak menelurkan editor baru.Jika file yang dibuka diubah dalam Vim dan secara eksternal, akan ada konflik saat memuat ulang (pesan peringatan akan muncul). Untuk itu keputusan harus dibuat: Biarkan saja dan simpan perubahan di Vim, atau buang perubahan lokal dan paksa muat ulang .
Perintah di
--remote-send
atas membutuhkan pemuatan manual. Namun, perintah itu dapat diikat ke loop sederhana, menggunakan Bash'sfor
/while
, atau menggunakan one-liner yang rusak di Linux / Unix:Meskipun tidak diuji, saya yakin sesuatu seperti ini dapat direalisasikan di PowerShell juga.
Di Linux / Unix pendekatan yang digerakkan oleh peristiwa dapat diwujudkan dengan mendengarkan acara sistem file menggunakan misalnya perpustakaan inotify , jika Anda tidak menggunakan sistem file yang terlalu gila. Secara pribadi saya suka menggunakan alat entr banyak, yang tampaknya termasuk dalam distribusi Linux utama. Lalu saya mendapatkan:
sumber