मैं किसी फ़ाइल को एक बफर में कैसे लोड करूं?


110

मैं आमतौर पर फाइलों पर काम करता हूं जो संस्करण नियंत्रण के माध्यम से फाइल सिस्टम में अपडेट किए जाते हैं। फ़ाइल को फिर से फ़ाइल किए बिना पुनः लोड करने का एक त्वरित तरीका क्या है C-x C-fऔर पूछा जा रहा है कि क्या मैं इसे फिर से लोड करना चाहता हूं?

जवाबों:


117

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))

8
आपने लाइब्रेरी का हवाला दिया होगा कि वह कोड इस प्रकार है misc-cmds.el:। नहीं यह जटिल है, लेकिन जब आप कुछ नकल वास्तव में यह स्रोत को इंगित करने के आम शिष्टाचार है।
ड्रू

3
क्षमा याचना! मैं, अपने आप को, मुझे यकीन नहीं था कि मुझे वह स्निपेट कहां से मिला। मुझे कम से कम फ़ंक्शन नाम को गुगना चाहिए और इसके स्रोत को खोजने का प्रयास करना चाहिए ताकि मैं इसे यहां क्रेडिट कर सकूं। अद्यतन मैंने अपने द्वारा कॉपी की गई सभी चीजों के स्रोतों का उल्लेख किया है; : बस नहीं यकीन है कि के बारे में इस एक था github.com/kaushalmodi/.emacs.d/blob/master/setup-files/...
कौशल मोदी

4
मैं इस समारोह की सिफारिश नहीं करूंगा। किसी संशोधित फ़ाइल पर गलती से उपयोग करना बहुत खतरनाक है।
गाइल्स

2
@ मैं सहमत हूँ, बड़ी शक्ति के साथ बड़ी जिम्मेदारी आती है। मैं बाध्यकारी के लिए एक आसान करने के लिए बाध्य नहीं होगा।
कौशल मोदी

6
मेरा यह वेरिएंट केवल पुष्टि के लिए संकेत देगा यदि बफर संशोधित किया गया है, का उपयोग कर (revert-buffer t (not (buffer-modified-p)) t)
ग्लूकोज

55

ऐसा भी है auto-revert-modeजो इसे स्वचालित रूप से करता है और आपको प्रतिक्रिया देता है।

डॉक्टर स्ट्रिंग से:

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.

50

एक अन्य विकल्प, जिसका मैं उपयोग करता हूं, के लिए find-alternate-fileबाध्य है C-x C-v। यह आपके वर्तमान बफ़र का पुन: उपयोग करने वाली फ़ाइल खोलता है।

डिफ़ॉल्ट रूप से, यह उस फ़ाइल की ओर इशारा करता है, जिस पर आप वर्तमान में हैं, इसलिए आप C-x C-v RETअपनी फ़ाइल को पुनः लोड करने के लिए टाइप कर सकते हैं । यह तब तक संकेत नहीं देगा जब तक कि आपके बफ़र ने डेटा को सहेज नहीं लिया है।

जैसे कुछ गैर-पाठ मोड image-modeऔर (प्रतिपादन चित्र, pdf, SVGs ... आदि के लिए प्रयोग किया जाता) diredहै revert-bufferकरने के लिए बाध्य gतेज़ पहुंच के लिए।


3
यह मेरा नया जाना है। इसका उल्लेख करने के लिए धन्यवाद।
ramsey_tm 15

मैं अपने .emacs में एक (ffap-bindings) था जो बाध्यकारी को बदलने के लिए लगता है C-x C-v
ychaouche

यह बहुत अच्छा है, धन्यवाद! सरल और प्रभावी। Btw, कैसे Emacs नोटिस करने के लिए वर्तमान फ़ाइल बदल गया? उदाहरण के लिए GUI मोड में VIM ऐप के फोकस होने पर फ़ाइल परिवर्तन को स्वचालित रूप से पता लगाता है (इसे बैकग्राउंड से स्विच किया जाता है)।
मैटो

यह स्वीकृत उत्तर होना चाहिए।
तून क्ले

10

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 {} +

इन दिनों, के रूप में @webappzero उसके जवाब में कहते हैं, MAGIT फ़ाइल को वापस लाने में समस्या के इस हिस्से दर्द को हल करती है
Croad Langshan

8

आप नीचे दिखाए अनुसार वैश्विक-ऑटो-रिवर्ट-मोड भी सक्षम कर सकते हैं

(global-auto-revert-mode 1)

यह तब मददगार होता है, जब आप अपने js फाइलों की बहुत सारी जाँचें ऑटो-फिक्स मोड से सक्षम करते हैं, जैसे jssc में।


7

revert-bufferहै। लेकिन मुझे कुछ प्रतिक्रिया देना पसंद है।

मैं अपने में निम्नलिखित है .emacs

(global-set-key (kbd "C-c r") (lambda ()
                                (interactive)
                                (revert-buffer t t t)
                                (message "buffer is reverted")))

3

आप उपयोग कर सकते हैं find-alternate-file, जो C-x C-vडिफ़ॉल्ट रूप से बाध्य है , और RETफ़ाइल को पुनः लोड करने के लिए बस प्रॉम्प्ट पर टाइप करें ।


3

Spacemacs उपयोगकर्ताओं के लिए: SPC b R( spacemacs/safe-revert-buffer)।

पुष्टिकरण को छोड़ देने के लिए, अन्य उत्तर पहले से ही कवर कर लेते हैं, हालांकि मैं दूसरों से सहमत हूं कि यह एक कुंजी को बांधने के लिए एक अच्छा विचार नहीं है।


2

मैगिट स्वचालित रूप से आपके लिए फ़ाइल रिवर्सल का प्रबंधन करता है, इस प्रकार आपकी मूल समस्या को हल करता है। आप इसकी अन्य विशेषताओं से भी लाभान्वित होते हैं।

यहां उन सेटिंग्स को ट्विक करने के लिए डॉक्स दिए गए हैं जिनमें आप रुचि रखते हैं:

यदि आप मैगिट के साथ चिपके रहते हैं, तो काम खोने से बचने के लिए सभी 3 वैश्विक डब्ल्यूआईपी मोड (वर्क इन प्रोग्रेस) को सक्षम करना सुनिश्चित करें ।

आप इस प्रकार मैगिट के साथ Emacs के अंदर संस्करण-नियंत्रण क्रिया कर सकते हैं और अपनी मूल समस्या से पूरी तरह बच सकते हैं।


1
कृपया मुझे बताएं कि क्या यह मददगार है।
webappzero

इस उत्तर में अधिक उत्थान होना चाहिए! स्पष्ट नहीं होने की स्थिति में: WIP मोड अच्छे हो सकते हैं (मैं वर्तमान में उनका उपयोग नहीं करता), लेकिन वे इसके लिए कड़ाई से आवश्यक नहीं हैं ताकि आपके लिए समस्या का हल हो सके।
क्रोड लैंगशान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.