Zwykle pracuję na plikach, które są aktualizowane w systemie plików za pomocą kontroli wersji. Jaki jest szybki sposób na ponowne załadowanie pliku bez konieczności ponownego ładowania pliku C-x C-f
i pytania, czy chcę go ponownie załadować?
Zwykle pracuję na plikach, które są aktualizowane w systemie plików za pomocą kontroli wersji. Jaki jest szybki sposób na ponowne załadowanie pliku bez konieczności ponownego ładowania pliku C-x C-f
i pytania, czy chcę go ponownie załadować?
Odpowiedzi:
M-x revert-buffer
zrobi dokładnie to, co chcesz. Nadal poprosi o potwierdzenie.
Inną opcją (moją ulubioną) jest poniższa funkcja:
;; 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)
.
Jest też to, auto-revert-mode
co robi to automatycznie i przekazuje informacje zwrotne.
Z ciągu dokumentów:
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.
Inna opcja, z której korzystam, jest find-alternate-file
związana C-x C-v
. Spowoduje to otwarcie pliku przy użyciu bieżącego bufora.
Domyślnie wskazuje plik, w którym aktualnie się znajdujesz, więc możesz po prostu wpisać, C-x C-v RET
aby ponownie załadować plik. Nie wyświetli monitu, chyba że bufor zawiera niezapisane dane.
Niektóre tryby nietekstowe, takie jak image-mode
(używane do renderowania zdjęć, plików PDF, plików svg ... itd.), I dired
mają revert-buffer
na g
celu szybszy dostęp.
C-x C-v
.
Emacs nazywa to reverting
.
Możesz przywrócić bieżący plik za pomocą M-x revert-buffer
. To monituje o potwierdzenie, czy plik został zmodyfikowany, czy nie, z wyjątkiem plików pasujących do wzorów wymienionych w zmiennej revert-without-query
(szczegółowe informacje można znaleźć w instrukcji). Inną sporadyczną uciążliwością revert-buffer
jest to, że resetuje tryb plików do domyślnych.
Korzystam z następującej funkcji, aby przywrócić wiązkę plików podaną według nazwy. Jeśli plik nie zostanie otwarty w jakimś buforze, zostanie zignorowany.
(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)))))))
Typowym przypadkiem użycia tej funkcji jest po zaktualizowaniu plików z kontroli wersji. Służy emacsclient
do wywoływania revert-files
wszystkich plików, które zostały zaktualizowane, lub (jest to łatwiejsze i tylko nieco wolniejsze) dla wszystkich plików objętych aktualizacją. Wywołuję następujący skrypt powłoki, przekazując mu pliki jako argumenty:
#! /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)"
Przykład użycia:
svn update
find -name .svn -prune -o -type f -exec emacsclient-revert {} +
możesz także włączyć tryb globalnego automatycznego przywracania, jak pokazano poniżej
(global-auto-revert-mode 1)
jest to pomocne, gdy wykonujesz wiele kontroli plików js z włączonym trybem automatycznej naprawy, np. w jssc.
Możesz użyć find-alternate-file
, który jest C-x C-vdomyślnie związany, i po prostu wpisać RETw wierszu polecenia, aby ponownie załadować plik.
Dla użytkowników spacemacs: SPC b R
( spacemacs/safe-revert-buffer
).
Aby pominąć potwierdzenie, inne odpowiedzi już to obejmują, chociaż zgadzam się z innymi, że prawdopodobnie nie jest dobrym pomysłem powiązanie tego z kluczem.
Magit automatycznie zarządza odwracaniem plików, rozwiązując w ten sposób główny problem. Korzystasz również z jego innych funkcji.
Oto dokumenty dotyczące dostosowywania ustawień, które Cię interesują:
Jeśli pozostaniesz przy Magit, pamiętaj, aby włączyć wszystkie 3 globalne tryby WIP (Work In Progress), aby uniknąć utraty pracy.
W ten sposób możesz wykonywać akcje kontroli wersji w Emacsie za pomocą Magit i całkowicie unikać pierwotnego problemu.
misc-cmds.el
. Nie chodzi o to, że jest to skomplikowane, ale kiedy kopiujesz coś dokładnie , powszechną uprzejmością jest wskazanie źródła.