আমি কীভাবে কোনও বাফারে একটি ফাইল পুনরায় লোড করব?


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

আমার .emacs এ আমার একটি (ffap-bindings) ছিল যা মনে হয় এর বাইন্ডিং পরিবর্তন করে C-x C-v
ychaouche

এটি দুর্দান্ত, ধন্যবাদ! সহজ এবং কার্যকর। বিটিডব্লিউ, বর্তমান ফাইলটি ইমেক্সকে কীভাবে লক্ষ্য করা যায়? উদাহরণস্বরূপ, জিইউআই মোডে থাকা ভিআইএম অ্যাপ্লিকেশনটির ফোকাস হয়ে গেলে স্বয়ংক্রিয়ভাবে একটি ফাইল পরিবর্তন সনাক্ত করে (এটি ব্যাকগ্রাউন্ড থেকে স্যুইচ করা হয়)।
মাটো

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
টুন ক্লেস

10

ইমাকস এটিকে কল করে 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 ফাইল-প্রত্যাবর্তন সমস্যা এই অংশ থাকুন solves
Croad Langshan

8

আপনি নীচে প্রদর্শিত হিসাবে গ্লোবাল-অটো-রিভার্ট-মোড সক্ষম করতে পারবেন

(global-auto-revert-mode 1)

আপনি যখন জেএসসি-র মতো অটো ফিক্স মোড সক্ষম করে আপনার জেএস ফাইলগুলির প্রচুর চেক করেন তখন এটি সহায়ক।


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

স্পেসম্যাক ব্যবহারকারীদের জন্য: SPC b R( spacemacs/safe-revert-buffer)।

নিশ্চিতকরণ এড়ানোর জন্য, অন্যান্য উত্তরগুলি ইতিমধ্যে এটি কভার করে, যদিও আমি অন্যদের সাথে একমত হই যে এটিকে কোনও কী দিয়ে বাঁধাই সম্ভবত ভাল ধারণা নয়।


2

ম্যাজিট স্বয়ংক্রিয়ভাবে আপনার জন্য ফাইলের বিপরীত পরিচালনা করে, এইভাবে আপনার মূল সমস্যাটি সমাধান করে। আপনি এর অন্যান্য বৈশিষ্ট্যগুলি থেকেও উপকৃত হন।

আপনার আগ্রহী সেটিংসটি টুইট করার জন্য এখানে ডক্স রয়েছে:

যদি আপনি ম্যাজিটের সাথে লেগে থাকেন তবে কাজটি হারাতে এড়াতে 3 টি গ্লোবাল ডাব্লুআইপি মোডগুলি (ওয়ার্ক ইন প্রগ্রেস) সক্ষম করার বিষয়ে নিশ্চিত হন ।

আপনি এইভাবে ম্যাগিটের সাহায্যে ইমাসের অভ্যন্তরে সংস্করণ-নিয়ন্ত্রণ ক্রিয়া সম্পাদন করতে পারেন এবং আপনার মূল সমস্যাটি পুরোপুরি এড়াতে পারেন।


1
যদি এটি সহায়ক হয় তবে আমাকে জানান।
ওয়েবপাজেরো

এই উত্তর আরও upvotes করা উচিত! যদি স্পষ্ট না হয়: ডাব্লুআইপি মোডগুলি ভাল হতে পারে (আমি বর্তমানে সেগুলি ব্যবহার করি না) তবে এটি আপনার পক্ষে পুনঃস্থাপনের সমস্যা সমাধানের জন্য কড়াভাবে প্রয়োজনীয় নয়।
ক্রড ল্যাংশন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.