Je travaille généralement sur des fichiers mis à jour dans le système de fichiers via le contrôle de version. Quel est un moyen rapide de recharger un fichier sans avoir à C-x C-f
le sauvegarder à nouveau et être demandé si je veux le recharger?
Je travaille généralement sur des fichiers mis à jour dans le système de fichiers via le contrôle de version. Quel est un moyen rapide de recharger un fichier sans avoir à C-x C-f
le sauvegarder à nouveau et être demandé si je veux le recharger?
Réponses:
M-x revert-buffer
fera exactement ce que vous voulez. Il faudra toujours demander une confirmation.
Une autre option (ma préférée) est la fonction ci-dessous:
;; 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)
.
Il y a aussi auto-revert-mode
qui le fait automatiquement et vous donne des commentaires.
De la chaîne de documentation:
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.
Une autre option, que j'utilise, est find-alternate-file
liée à C-x C-v
. Cela ouvre un fichier réutilisant votre tampon actuel.
Par défaut, il pointe vers le fichier sur lequel vous vous trouvez, vous pouvez donc simplement taper C-x C-v RET
pour recharger votre fichier. Il ne vous demandera pas à moins que votre tampon contienne des données non sauvegardées.
Certains modes non textuels, tels que image-mode
(utilisés pour le rendu des images, pdfs, svgs, etc.) dired
sont revert-buffer
liés à g
un accès plus rapide.
C-x C-v
.
Emacs appelle cela reverting
.
Vous pouvez inverser le fichier actuel avec M-x revert-buffer
. Ceci vous demande de confirmer si le fichier a été modifié ou non, sauf pour les fichiers qui correspondent aux modèles listés dans la variable revert-without-query
(voir le manuel pour plus de détails). Un autre inconvénient occasionnel revert-buffer
est qu'il réinitialise le mode de fichier sur le mode par défaut.
J'utilise la fonction suivante pour retourner un tas de fichiers, donnés par nom. Si un fichier n'est pas ouvert dans un tampon, il est ignoré.
(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 cas d'utilisation typique de cette fonction est après la mise à jour des fichiers à partir du contrôle de version. Permet emacsclient
d’appeler revert-files
tous les fichiers mis à jour ou (c’est plus facile et à peine plus lent) sur tous les fichiers concernés par la mise à jour. J'appelle le script shell suivant en lui transmettant les fichiers comme arguments:
#! /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)"
Exemple d'utilisation:
svn update
find -name .svn -prune -o -type f -exec emacsclient-revert {} +
vous pouvez également activer le mode global-auto-revert comme indiqué ci-dessous
(global-auto-revert-mode 1)
Ceci est utile lorsque vous effectuez de nombreuses vérifications de vos fichiers js avec le mode de correction automatique activé, comme dans jssc.
Vous pouvez utiliser find-alternate-file
ce qui est lié C-x C-vpar défaut et simplement taper RETà l'invite pour recharger le fichier.
Pour les utilisateurs de spacemacs: SPC b R
( spacemacs/safe-revert-buffer
).
Pour éviter la confirmation, d’autres réponses traitent déjà de cette question, bien que je convienne avec d’autres que ce n’est probablement pas une bonne idée de la lier à une clé.
Magit gère automatiquement les réversions de fichiers, résolvant ainsi votre problème principal. Vous bénéficiez également de ses autres fonctionnalités.
Voici la documentation pour peaufiner les paramètres qui vous intéressent:
Si vous vous en tenez à Magit, veillez également à activer les 3 modes globaux WIP (travail en cours) pour éviter de perdre du travail.
Vous pouvez ainsi effectuer des actions de contrôle de version dans Emacs avec Magit et éviter votre problème d'origine.
misc-cmds.el
. Non pas que cela soit compliqué, mais lorsque vous copiez quelque chose exactement, il est de la politesse habituelle de pointer vers la source.