Genellikle dosya sisteminde güncellenen dosyalar üzerinde sürüm kontrolü ile çalışıyorum. Bir C-x C-f
dosyayı tekrar kullanmak zorunda kalmadan yeniden yüklemek ve yeniden yüklemek isteyip istemediğim sorulmasının hızlı bir yolu nedir ?
Genellikle dosya sisteminde güncellenen dosyalar üzerinde sürüm kontrolü ile çalışıyorum. Bir C-x C-f
dosyayı tekrar kullanmak zorunda kalmadan yeniden yüklemek ve yeniden yüklemek isteyip istemediğim sorulmasının hızlı bir yolu nedir ?
Yanıtlar:
M-x revert-buffer
tam olarak ne istersen onu yapacağım. Yine de onay isteyecektir.
Başka bir seçenek (favorim) aşağıdaki işlevdir:
;; 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)
.
Ayrıca auto-revert-mode
otomatik olarak yapan ve size geri bildirim veren de var.
Doc dizesinden:
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.
Kullandığım başka bir seçenek de buna find-alternate-file
bağlı C-x C-v
. Bu, mevcut tamponunuzu yeniden kullanan bir dosya açar.
Varsayılan olarak, o anda bulunduğunuz dosyayı gösterir; böylece C-x C-v RET
dosyanızı yeniden yüklemek için yazabilirsiniz . Tamponunuzda kaydedilmemiş veriler olmadıkça sorulmaz.
Bazı metin dışı modlar image-mode
(resim, pdfs, svgs, vb. Oluşturmak için kullanılır) ve daha hızlı erişim için dired
buna revert-buffer
bağlı g
.
C-x C-v
.
Emacs bunu çağırıyor reverting
.
Geçerli dosyayı ile geri alabilirsiniz M-x revert-buffer
. Bu, değişkende listelenen desenlerle eşleşen dosyalar haricinde, dosyanın değiştirilip değiştirilmediğini onaylamanızı ister revert-without-query
(ayrıntılar için kılavuza bakınız). Bir başka zaman zaman rahatsızlığı da revert-buffer
, dosya modunu varsayılan ayarlara getirmesidir.
Aşağıdaki işlevi, ada göre verilen bir sürü dosyayı geri almak için kullanıyorum. Bir dosya bir arabellekte açılmazsa, dikkate alınmaz.
(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)))))))
Bu fonksiyon için tipik bir kullanım örneği, dosyaları sürüm kontrolünden güncelledikten sonra. Güncelleştirilen tüm dosyalarda emacsclient
arama yapmak revert-files
için kullanın veya güncellemeyle ilgili tüm dosyalarda (bu daha kolay ve sadece biraz daha yavaş). Dosyaları şu argüman olarak ileterek aşağıdaki kabuk betiğini çağırıyorum:
#! /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)"
Kullanım örneği:
svn update
find -name .svn -prune -o -type f -exec emacsclient-revert {} +
ayrıca genel-otomatik geri döndürme modunu aşağıda gösterildiği gibi etkinleştirebilirsiniz.
(global-auto-revert-mode 1)
Bu, jssc'nizde olduğu gibi otomatik düzeltme kipinin etkin olduğu js dosyalarınızı çokça kontrol ettiğinizde yararlıdır.
Varsayılan find-alternate-file
olarak bağlı olan kullanabilirsiniz ve dosyayı yeniden yüklemek için C-x C-vsadece RETkomut istemine basmanız yeterlidir .
Boşluk kullanıcıları için: SPC b R
( spacemacs/safe-revert-buffer
).
Onayı atlamak için, diğer cevaplar zaten bunu kapsıyor, ancak diğerleri ile bir anahtara bağlamanın muhtemelen iyi bir fikir olmadığı konusunda hemfikirim.
Magit sizin için dosya revizyonlarını otomatik olarak yöneterek temel probleminizi çözer. Ayrıca diğer özelliklerinden de faydalanırsınız.
İşte dokümanlar verdiği için ilgilendiğiniz ayarları:
Magit'e bağlı kalırsanız, iş kaybını önlemek için 3 global WIP modunun da (Work In Progress) etkinleştirildiğinden emin olun .
Böylece, Magac ile Emacs içindeki sürüm kontrolü işlemlerini gerçekleştirebilir ve orijinal probleminizi tamamen önleyebilirsiniz.
misc-cmds.el
. Bu karmaşık değil, ancak bir şeyi tam olarak kopyaladığınızda , kaynağa işaret etmek ortak bir nezakettir.