Saya biasanya bekerja pada file yang diperbarui dalam sistem file melalui kontrol versi. Apa cara cepat untuk memuat ulang file tanpa harus ke C-x C-f
file lagi dan ditanya apakah saya ingin memuat ulang?
Saya biasanya bekerja pada file yang diperbarui dalam sistem file melalui kontrol versi. Apa cara cepat untuk memuat ulang file tanpa harus ke C-x C-f
file lagi dan ditanya apakah saya ingin memuat ulang?
Jawaban:
M-x revert-buffer
akan melakukan apa yang Anda inginkan. Masih akan meminta konfirmasi.
Pilihan lain (favorit saya) adalah fungsi di bawah ini:
;; Source: http://www.emacswiki.org/emacs-en/download/misc-cmds.el
(defun revert-buffer-no-confirm ()
"Revert buffer without confirmation."
(interactive)
(revert-buffer :ignore-auto :noconfirm))
(revert-buffer t (not (buffer-modified-p)) t)
.
Ada juga auto-revert-mode
yang melakukannya secara otomatis dan memberi Anda umpan balik.
Dari string doc:
auto-revert-mode is an interactive autoloaded compiled Lisp function
in `autorevert.el'.
(auto-revert-mode &optional ARG)
Toggle reverting buffer when the file changes (Auto Revert mode).
With a prefix argument ARG, enable Auto Revert mode if ARG is
positive, and disable it otherwise. If called from Lisp, enable
the mode if ARG is omitted or nil.
Auto Revert mode is a minor mode that affects only the current
buffer. When enabled, it reverts the buffer when the file on
disk changes.
Use `global-auto-revert-mode' to automatically revert all buffers.
Use `auto-revert-tail-mode' if you know that the file will only grow
without being changed in the part that is already in the buffer.
Opsi lain, yang saya gunakan, find-alternate-file
terikat C-x C-v
. Ini membuka file menggunakan kembali buffer Anda saat ini.
Secara default, ini menunjuk ke file Anda saat ini, sehingga Anda bisa mengetik C-x C-v RET
untuk memuat ulang file Anda. Ini tidak akan diminta kecuali buffer Anda memiliki data yang belum disimpan.
Beberapa mode non-teks seperti image-mode
(yang digunakan untuk rendering gambar, PDF, svgs ... dll) dan dired
telah revert-buffer
terikat g
untuk akses lebih cepat.
C-x C-v
.
Emacs menyebut ini reverting
.
Anda dapat mengembalikan file saat ini dengan M-x revert-buffer
. Ini meminta konfirmasi apakah file telah dimodifikasi atau belum, kecuali untuk file yang cocok dengan pola yang tercantum dalam variabel revert-without-query
(lihat manual untuk detail). Gangguan sesekali lainnya revert-buffer
adalah bahwa ia mengatur ulang mode file ke default.
Saya menggunakan fungsi berikut untuk mengembalikan banyak file, yang diberikan namanya. Jika file tidak dibuka di beberapa buffer, file itu diabaikan.
(defun revert-files (&rest files)
"Reload all specified files from disk.
Only files that are currently visited in some buffer are reverted.
Do not ask confirmation unless the buffer is modified."
(save-excursion
(let ((revert-without-query '("")))
(dolist (file-name files)
(message "Considering whether to revert file %s" file-name)
(let ((buf (find-buffer-visiting file-name)))
(when buf
(message "Reverting file in buffer %s" (buffer-name buf))
(set-buffer buf)
(revert-buffer t nil t)))))))
Kasus penggunaan umum untuk fungsi ini adalah setelah memperbarui file dari kontrol versi. Gunakan emacsclient
untuk memanggil revert-files
semua file yang telah diperbarui, atau (ini lebih mudah, dan hanya sedikit lebih lambat) pada semua file yang terkait dengan pembaruan. Saya memanggil skrip shell berikut, meneruskannya file sebagai argumen:
#! /bin/sh
# Similar to gnuclient, but call `revert-files' on the files.
files=
## Find a way to convert a path to absolute. Bizarre OSes such as Windows
## require special cases. We also try to detect non-filenames such as URIs.
case `uname -s` in
CYGWIN*)
absolute_path () {
cygpath -a -w -- "$1"
};;
*)
wd="`pwd -P 2>/dev/null || pwd`"
absolute_path () {
case "$1" in
/*) printf '%s' "$1";; # ordinary absolute path
*:/*)
if expr "z$1" : 'z[0-9A-Z_a-z][-.0-9@A-Z_a-z]*:/.*'; then
printf '%s' "$1" # URI or machine:/some/path
else
printf '%s' "$wd/$1" # default to a relative path
fi;;
*) printf '%s' "$wd/$1";; # default to a relative path
esac
};;
esac
for x; do
files="$files \"`absolute_path "$x" | sed 's/[\\\\\\\"]/\\\\&/g'`\""
done
exec emacsclient -e "(revert-files$files)"
Contoh penggunaan:
svn update
find -name .svn -prune -o -type f -exec emacsclient-revert {} +
Anda juga dapat mengaktifkan global-auto-revert-mode seperti yang ditunjukkan di bawah ini
(global-auto-revert-mode 1)
ini berguna ketika Anda melakukan banyak pemeriksaan file js Anda dengan mode perbaikan otomatis diaktifkan, seperti di jssc.
Anda dapat menggunakan find-alternate-file
, yang terikat C-x C-vsecara default, dan cukup ketik RETpada prompt untuk memuat ulang file.
Untuk pengguna spacemacs: SPC b R
( spacemacs/safe-revert-buffer
).
Untuk melewatkan konfirmasi, jawaban lain sudah mencakup itu, meskipun saya setuju dengan yang lain bahwa itu mungkin bukan ide yang baik untuk mengikat itu ke kunci.
Magit mengelola pengembalian file untuk Anda secara otomatis, sehingga menyelesaikan masalah inti Anda. Anda juga mendapat manfaat dari fitur lainnya.
Berikut adalah dokumen untuk mengubah pengaturan yang Anda minati:
Jika Anda tetap menggunakan Magit, pastikan juga untuk mengaktifkan ketiga mode WIP global (Work In Progress) untuk menghindari kehilangan pekerjaan.
Dengan demikian Anda dapat melakukan tindakan kontrol versi di dalam Emacs dengan Magit dan menghindari masalah asli Anda sekaligus.
misc-cmds.el
. Bukannya rumit, tetapi ketika Anda menyalin sesuatu dengan tepat, itu adalah hak umum untuk menunjuk ke sumbernya.