私は通常、バージョン管理を介してファイルシステムで更新されるファイルで作業します。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
(詳細については、マニュアルを参照してください)。もう1つの不愉快な点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)
これは、jsscのように、自動修正モードを有効にしてjsファイルの多くのチェックを行うときに役立ちます。
あなたは使用することができます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
。複雑なわけではありませんが、何かを正確にコピーする場合は、ソースを指すのが一般的です。