Я зазвичай працюю над файлами, які оновлюються у файловій системі за допомогою контролю версій. Який швидкий спосіб перезавантажити файл, не C-x C-f
потребуючи його знову і запитання, чи хочу я його перезавантажити?
Я зазвичай працюю над файлами, які оновлюються у файловій системі за допомогою контролю версій. Який швидкий спосіб перезавантажити файл, не C-x C-f
потребуючи його знову і запитання, чи хочу я його перезавантажити?
Відповіді:
M-x revert-buffer
зробить саме те, що ви хочете. Він все одно попросить підтвердження.
Ще один варіант (мій улюблений) - це наступна функція:
;; 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)
.
Також є те, auto-revert-mode
що робить це автоматично і дає вам відгуки.
З рядка 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.
Інший варіант, який я використовую, find-alternate-file
пов'язаний C-x C-v
. Це відкриє файл, який повторно використовує поточний буфер.
За замовчуванням він вказує на файл, в якому ви зараз перебуваєте, тож ви можете просто ввести, C-x C-v RET
щоб перезавантажити файл. Він не підкаже, якщо у вашому буфері немає збережених даних.
Деякі нетекстові режими , такі як image-mode
(використовувані для рендеринга зображень, PDF, SVGs ... і т.д.) і dired
які revert-buffer
зобов'язані g
для більш швидкого доступу.
C-x C-v
.
Emacs називає це reverting
.
Ви можете відновити поточний файл за допомогою M-x revert-buffer
. Це вимагає підтвердити, змінили файл чи ні, за винятком файлів, які відповідають шаблонам, переліченим у змінній revert-without-query
(детальну інформацію див. У посібнику). Іншим випадком роздратування revert-buffer
є те, що він скидає режим файлів до типового.
Я використовую наступну функцію, щоб повернути купу файлів, заданих іменем. Якщо файл не відкривається в якомусь буфері, він ігнорується.
(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)))))))
Типовий випадок використання цієї функції - після оновлення файлів із контролю версій. Використовуйте emacsclient
для виклику revert-files
всіх оновлених файлів або (це простіше і лише трохи повільніше) на всіх файлах, які стосуються оновлення. Я називаю такий скрипт оболонки, передаючи йому файли як аргументи:
#! /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)"
Приклад використання:
svn update
find -name .svn -prune -o -type f -exec emacsclient-revert {} +
ви також можете ввімкнути режим глобального автоматичного повернення, як показано нижче
(global-auto-revert-mode 1)
це корисно, коли ви робите багато перевірок ваших js-файлів із увімкненим режимом автоматичного виправлення, як у jssc.
Ви можете використовувати find-alternate-file
, до якого прив’язаний C-x C-vза замовчуванням, і просто просто ввести RETпідказку, щоб перезавантажити файл.
Для користувачів Spacemacs: SPC b R
( spacemacs/safe-revert-buffer
).
Для пропуску підтвердження інші відповіді вже охоплюють це, хоча я погоджуюся з іншими, що, мабуть, це не дуже гарна ідея прив’язувати це до ключа.
Magit автоматично управляє реверсією файлів для вас, вирішуючи тим самим основну проблему. Ви також виграєте від інших його можливостей.
Ось документи для налаштування параметрів, які вас цікавлять:
Якщо ви дотримуєтесь програми Magit, також не забудьте включити всі 3 глобальних режими WIP (Work In Progress), щоб уникнути втрати роботи.
Таким чином, ви можете виконувати дії з контролю версій всередині Emacs за допомогою Magit і взагалі уникати початкової проблеми.
misc-cmds.el
. Мало того, що це складно, але коли ви щось точно копіюєте, то люб’язно вказуйте на джерело.