Di solito lavoro su file che vengono aggiornati nel file system tramite il controllo della versione. Qual è un modo rapido per ricaricare un file senza doverlo C-x C-f
ripetere e chiedermi se voglio ricaricarlo?
Di solito lavoro su file che vengono aggiornati nel file system tramite il controllo della versione. Qual è un modo rapido per ricaricare un file senza doverlo C-x C-f
ripetere e chiedermi se voglio ricaricarlo?
Risposte:
M-x revert-buffer
farà esattamente quello che vuoi. Chiederà comunque conferma.
Un'altra opzione (la mia preferita) è la seguente funzione:
;; 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)
.
C'è anche quello auto-revert-mode
che lo fa automaticamente e ti dà feedback.
Dalla stringa 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.
Un'altra opzione, che uso, è find-alternate-file
destinata a C-x C-v
. Questo apre un file riutilizzando il buffer corrente.
Per impostazione predefinita, punta al file in cui ti trovi attualmente, quindi puoi semplicemente digitare C-x C-v RET
per ricaricare il file. Non verrà richiesto a meno che nel buffer non siano presenti dati non salvati.
Alcune modalità non testuali come image-mode
(utilizzate per il rendering di immagini, pdf, svg ... ecc.) E dired
sono revert-buffer
vincolate a g
un accesso più rapido.
C-x C-v
.
Emacs chiama questo reverting
.
È possibile ripristinare il file corrente con M-x revert-buffer
. Ciò richiede la conferma se il file è stato modificato o meno, ad eccezione dei file che corrispondono ai modelli elencati nella variabile revert-without-query
(vedere il manuale per i dettagli). Un altro fastidio occasionale di revert-buffer
è che ripristina la modalità file ai valori predefiniti.
Uso la seguente funzione per ripristinare un mucchio di file, dato per nome. Se un file non viene aperto in un buffer, viene ignorato.
(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)))))))
Un caso d'uso tipico di questa funzione è dopo l'aggiornamento dei file dal controllo versione. Utilizzare emacsclient
per chiamare revert-files
tutti i file che sono stati aggiornati o (è più semplice e solo leggermente più lento) su tutti i file interessati dall'aggiornamento. Chiamo il seguente script di shell, passandogli i file come argomenti:
#! /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)"
Esempio di utilizzo:
svn update
find -name .svn -prune -o -type f -exec emacsclient-revert {} +
puoi anche abilitare la modalità di ripristino automatico globale come mostrato di seguito
(global-auto-revert-mode 1)
questo è utile quando fai molti controlli dei tuoi file js con la modalità di correzione automatica abilitata, come in jssc.
È possibile utilizzare find-alternate-file
, che è associato per C-x C-vimpostazione predefinita, e semplicemente digitare RETal prompt per ricaricare il file.
Per gli utenti di spacemacs: SPC b R
( spacemacs/safe-revert-buffer
).
Per saltare la conferma, altre risposte lo coprono già, anche se concordo con gli altri sul fatto che probabilmente non è una buona idea associarlo a una chiave.
Magit gestisce automaticamente le reversioni dei file, risolvendo così il tuo problema principale. Approfitti anche delle sue altre funzionalità.
Ecco i documenti per modificare le impostazioni che ti interessano:
Se rimani con Magit, assicurati anche di abilitare tutte e 3 le modalità WIP globali (Work In Progress) per evitare di perdere il lavoro.
È quindi possibile eseguire azioni di controllo della versione all'interno di Emacs con Magit ed evitare del tutto il problema originale.
misc-cmds.el
. Non che sia complicato, ma quando si copia esattamente qualcosa è cortesia comune puntare alla fonte.