উত্তর:
স্টিভ ইয়েজের .emacs থেকে এই ফাংশনটি ব্যবহার করে দেখুন :
;; উত্স: http://steve.yegge.googlepages.com/my-dot-emacs-file (পুনরায় নামকরণ-ফাইল-এবং-বাফার (নতুন নাম) "বর্তমান বাফার এবং নতুন-NAME এ এটি দেখার জন্য ফাইল দুটির নামকরণ করুন" " (ইন্টারেক্টিভ "এস নতুন নাম:") (যাক ((নাম (বাফার-নাম)) (ফাইলের নাম (বাফার-ফাইল-নাম))) (যদি (ফাইলের নাম না) (বার্তা 'বাফার'% s 'কোনও ফাইল দেখছে না! "নাম) (যদি (গেট-বাফার নতুন নাম) (বার্তা "'% s' নামের একটি বাফার ইতিমধ্যে বিদ্যমান!" নতুন নাম) (progn (নতুন নাম ফাইল-ফাইল নাম নতুন নাম 1) (নতুন নাম-বাফার নতুন নাম) (সেট-ভিজিট-ফাইল-নাম নতুন নাম) (সেট-বাফার-মডিফায়েড-পি নীল))))))
এই পৃষ্ঠাটি একবার দেখুন, সেখানে আরও একটি কার্যকর সম্পর্কিত ফাংশন রয়েছে যার নাম "মুভ-বাফার-ফাইল"।
(set-buffer-modified-p nil)
অপ্রয়োজনীয় মনে হচ্ছে আপনি যদি rename-file-and-buffer
কোনও পরিবর্তিত বাফারকে কল করে এবং তারপর এটি হত্যা করার চেষ্টা করেন, এটি সংরক্ষণে সংরক্ষণ না করা পরিবর্তন সম্পর্কে আপনাকে সতর্ক না করে আনন্দের সাথে এটি করবে।
হ্যাঁ, dired
মোডের সাহায্যে আপনি এটি করতে পারেন:
C-x d
খোলা খোলাRET
বর্তমান ফাইল ডিরেক্টরি নির্বাচন করতেC-x C-j
( dired-jump
চলিত ফাইলের নামটি শুকিয়ে যাওয়াতে)R
ফাইলটির নাম পরিবর্তন করতে (বা dired-do-rename
)।q
(নাম পরিবর্তিত) ফাইল বাফারে ফিরে যেতেপুনরায় নামটি শেলের সমতুল্য mv
, তবে এটি কোনও উন্মুক্ত বাফার আপডেট করবে এবং এর বিপরীতে mv
এটি অ্যাক্সেস পরিবর্তন করবে না এবং ফাইল সিস্টেমে ফাইলের সময় পরিবর্তন করবে না।
C-x C-j
এটি ডিফল্টরূপে আবদ্ধ নয়। M-x load-library RET dired-x RET
প্রথম কাজটি এটি আবদ্ধ করে তোলে।
C-x C-j
আনবাউন্ড না M-x dired-jump
হয় তবে অন্য বিকল্পটি কেবল প্রথমবারেই করা উচিত। এটি স্বয়ংক্রিয়ভাবে লোড হবে dired-x
(যার ফলে এটি এ C-x C-j
থেকে সংজ্ঞায়িতও হবে)।
কেবল সম্পূর্ণতার জন্য, যেহেতু কিছু লোকেরা এই পৃষ্ঠাটি ভিজিট করতে পারে ভেবে তারা ইমাসসের "সংরক্ষণ হিসাবে সংরক্ষণ করুন" বৈশিষ্ট্যের জন্য একটি উত্তর পাবে, এটি একটি উন্মুক্ত ফাইলের জন্য সিএক্সডাব্লু।
File > Save as...
আমার প্রিয়টি ম্যাগনারদের থেকে একটি (ইমাস রকস স্ক্রিনকাস্ট খ্যাতির।)
অন্যান্য বিকল্পগুলির মতো নয়, আপনাকে স্ক্র্যাচ থেকে নামটি টাইপ করতে হবে না - আপনি বর্তমান নামটি পরিবর্তন করতে পারেন।
(defun rename-current-buffer-file ()
"Renames current buffer and file it is visiting."
(interactive)
(let* ((name (buffer-name))
(filename (buffer-file-name))
(basename (file-name-nondirectory filename)))
(if (not (and filename (file-exists-p filename)))
(error "Buffer '%s' is not visiting a file!" name)
(let ((new-name (read-file-name "New name: " (file-name-directory filename) basename nil basename)))
(if (get-buffer new-name)
(error "A buffer named '%s' already exists!" new-name)
(rename-file filename new-name 1)
(rename-buffer new-name)
(set-visited-file-name new-name)
(set-buffer-modified-p nil)
(message "File '%s' successfully renamed to '%s'"
name (file-name-nondirectory new-name)))))))
একটি সঠিক সংস্করণ জন্য জেমস ইয়াং ধন্যবাদ।
এখানে স্টিভির সাথে অভিযোজিত আরও শক্তিশালী সংস্করণ রয়েছে।
;; Originally from stevey, adapted to support moving to a new directory.
(defun rename-file-and-buffer (new-name)
"Renames both current buffer and file it's visiting to NEW-NAME."
(interactive
(progn
(if (not (buffer-file-name))
(error "Buffer '%s' is not visiting a file!" (buffer-name)))
;; Disable ido auto merge since it too frequently jumps back to the original
;; file name if you pause while typing. Reenable with C-z C-z in the prompt.
(let ((ido-auto-merge-work-directories-length -1))
(list (read-file-name (format "Rename %s to: " (file-name-nondirectory
(buffer-file-name))))))))
(if (equal new-name "")
(error "Aborted rename"))
(setq new-name (if (file-directory-p new-name)
(expand-file-name (file-name-nondirectory
(buffer-file-name))
new-name)
(expand-file-name new-name)))
;; Only rename if the file was saved before. Update the
;; buffer name and visited file in all cases.
(if (file-exists-p (buffer-file-name))
(rename-file (buffer-file-name) new-name 1))
(let ((was-modified (buffer-modified-p)))
;; This also renames the buffer, and works with uniquify
(set-visited-file-name new-name)
(if was-modified
(save-buffer)
;; Clear buffer-modified flag caused by set-visited-file-name
(set-buffer-modified-p nil)))
(setq default-directory (file-name-directory new-name))
(message "Renamed to %s." new-name))
এখানে আরও একটি সংস্করণ, এটি বেশ শক্তিশালী এবং ভিসি সচেতন:
(defun rename-file-and-buffer ()
"Rename the current buffer and file it is visiting."
(interactive)
(let ((filename (buffer-file-name)))
(if (not (and filename (file-exists-p filename)))
(message "Buffer is not visiting a file!")
(let ((new-name (read-file-name "New name: " filename)))
(cond
((vc-backend filename) (vc-rename-file filename new-name))
(t
(rename-file filename new-name t)
(set-visited-file-name new-name t t)))))))
আপনি এটি সম্পর্কে এখানে আরও পড়তে পারেন ।
আপনি যদি স্পেসম্যাকস ব্যবহার করছেন তবে আপনি নিখরচায় এই আচরণটি পান কারণ এটি rename-current-buffer-file
ডিফল্টরূপে আবদ্ধ (ম্যাগনারের উপর ভিত্তি করে) বাস্তবায়নের সাথে আসে SPC-f-R
।
খুব সহজ উপায় আছে, আপনি কমান্ড এমএক্স টিপুন এবং ভিসি-পুনর্নাম-ফাইল টাইপ করুন , তারপরে আপনাকে কেবলমাত্র আপনার বর্তমান ফাইল ডিরেক্টরিতে ডিরেক্টরি নির্বাচন করতে হবে এবং নতুন নামটি বেছে নেওয়ার চেয়ে বেশি দরকার। পরিবর্তিত ফাইল রয়েছে এমন বাফটি রিফ্রেশ হবে।
সূত্র: https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Delete_002fRename.html
ম্যাগনার ভার্সনের উপর ভিত্তি করে, আমি নীচের হিসাবে সংশোধন করেছি, আইএনআইটি ফাইল নাম অংশটি স্থির করেছি:
(defun rename-current-buffer-file ()
"Renames current buffer and file it is visiting."
(interactive)
(let* ((name (buffer-name))
(filename (buffer-file-name))
(basename (file-name-nondirectory filename)))
(if (not (and filename (file-exists-p filename)))
(error "Buffer '%s' is not visiting a file!" name)
(let ((new-name (read-file-name "New name: " (file-name-directory filename) basename nil basename)))
(if (get-buffer new-name)
(error "A buffer named '%s' already exists!" new-name)
(rename-file filename new-name 1)
(rename-buffer new-name)
(set-visited-file-name new-name)
(set-buffer-modified-p nil)
(message "File '%s' successfully renamed to '%s'"
name (file-name-nondirectory new-name)))))))
এটি অনুলিপি দ্বারা অর্জন করা যেতে পারে। ফাইলটিতে ইমফ করুন + সি এবং ইমাস আপনাকে ফাইলের নাম সহ পথের একটি নাম বোঝাতে বলবে, সুতরাং আপনি কেবল নতুন নামটি সরবরাহ করেন এবং প্রবেশ করুন ... অবশ্যই আপনাকে পূর্বেরটি মুছতে হবে।
(setq uniquify-buffer-name-style 'forward)
অর্থের সাথে সামঞ্জস্যপূর্ণ নয় যদি আপনার বাফার নামকরণ করা হয়users\index.html
(কারণ আপনার কাছে ইতিমধ্যে অন্য একটি বাফার রয়েছেposts\index.html
) নামকরণ ব্যর্থ হবে