এক্সটেনশন ছাড়াই ফাইলগুলির মোডগুলি মনে রাখবেন


10

আমি প্রচুর ফাইল সম্পাদনা শুরু করেছি যার কোনও এক্সটেনশন নেই, তবে এখনও একটি প্রধান মোড ফর্ম্যাটে রয়েছে।

আমি দলের একমাত্র ইমাক্স ব্যবহারকারী এবং আমি এটির পক্ষে বেদনাদায়ক স্পষ্ট করে তুলতে চাই না যে আমার সম্পাদকের জন্য বিশেষ সামগ্রী দরকার needs আমি কোডবেস পরিবর্তন এড়াতে চাই।

  • আমি ফাইলের নাম পরিবর্তন করতে পারি না
  • আমি বিশেষ ইম্যাক্স মন্তব্য ব্যবহার করতে পারি না

আমি চাইব যে ইমাস আমি ফাইলটি ম্যানুয়ালি শেষ করে রেখেছিলাম (যা দিয়ে বলি M-x conf-mode) রেখেছি এবং আমি যখন আবার দেখা করি তখন স্বয়ংক্রিয়ভাবে সেই মোডটি সক্রিয় করে তুলি।

আমি savehist-modeদৃistence়তা পরিচালনা করতে ব্যবহার করি ।

আমি কি ব্যথাহীনভাবে এটি করতে পারি?


1
যদি সেই ফাইলটি আপনি সম্পাদনা করতে পারেন তবে সাধারণত আপনি একটি মন্তব্য দিয়ে একটি প্রথম লাইন যুক্ত করতে পারেন: # -*- mode: conf -*-এবং এটি ব্যবহারের জন্য ইমাক্স টিপ করবে conf-mode। যদি তাদের মধ্যে কয়েকটি থাকে এবং আপনি নিয়মিত অভিব্যক্তির মাধ্যমে তাদের সাথে মেলেতে পারেন, আপনি এতে regexp যুক্ত করতে পারেন automode-alist
wvxvw

2
@wvxvw আমার সীমাবদ্ধতার একটি হ'ল " আমি বিশেষ ইম্যাক্স মন্তব্য ব্যবহার করতে পারি না "।
পাইথননট

2
খুব, দুঃখিত, আমি কীভাবে এটি মিস করেছি তা আমি বুঝতে পারি না। এছাড়াও, এটা auto-mode-alistআমার খারাপ।
wvxvw

স্পষ্টতই এখানে সঠিক উত্তরটি আপনার টিমের বাকী অংশটি ইম্যাক্স ব্যবহার করা। অন্য যে কোনও উত্তর কেবল একটি কর্মচঞ্চল।
মালাব্বর্বা

উত্তর:


13

কোনও এক্সটেনশানের উপর নির্ভর করে না এমন কোনও ফাইলের প্রধান মোড চিহ্নিত করার বিভিন্ন উপায় রয়েছে, ম্যানুয়ালটিতে ফাইল মোড নির্বাচন করা দেখুন ।

আপনি যে ফাইলগুলি সাথে ডিল করা হয় ধরণের উপর নির্ভর করে, সম্ভবত আপনি ব্যবহার করতে পারে magic-mode-alist। এছাড়াও নোট করুন যে auto-mode-alistমেলানো এক্সটেনশানগুলির মধ্যে সীমাবদ্ধ নয়: আপনি ফাইলের নাম বা পথের যে কোনও অংশের সাথে মিল করতে পারেন।

যদি আপনি যে ফাইলগুলি ব্যবহার করছেন সেগুলি যদি সেই প্রক্রিয়াগুলির জন্য যথেষ্ট সামঞ্জস্য না হয় তবে একটি বিকল্প হ'ল auto-mode-alistসম্পূর্ণ ফাইলের নামের সাথে মেলে এমন এন্ট্রি যুক্ত করা বা কোনও প্রকল্পের মূলের সাথে মেলে এবং মোডের সাথে নাম মেলে একটি কাস্টম ফাংশন কল করা।

প্রদত্ত ডিরেক্টরিতে থাকা সমস্ত ফাইল যদি একই ধরণের হয় তবে আপনি মোড সেট করতে ডিরেক্টরি-স্থানীয় ভেরিয়েবলও ব্যবহার করতে পারেন। ডিরেক্টরি ভেরিয়েবলগুলি .dir- লোকাল ফাইলের পরিবর্তে আপনার init ফাইলে সেট করা যেতে পারে - বিশদের জন্য ডিরেক্টরি ভেরিয়েবলগুলি দেখুন।

হালনাগাদ

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

(defvar my-custom-mode-alist '())
(defvar my-custom-mode-alist-file (expand-file-name "custom-file-assoc" user-emacs-directory))

;; command to save the file->mode association of the current buffer
(defun save-file-mode-association ()
  (interactive)
  (when buffer-file-name
    (add-to-list 'my-custom-mode-alist (cons buffer-file-name major-mode))
    (write-custom-mode-alist my-custom-mode-alist-file)))

(defun write-custom-mode-alist (file)
  (with-current-buffer (get-buffer-create " *Custom File Assocations*")
    (goto-char (point-min))
    (delete-region (point-min) (point-max))
    (pp my-custom-mode-alist (current-buffer))
    (condition-case nil
        (write-region (point-min) (point-max) file)
      (file-error (message "Can't write %s" file)))
    (kill-buffer (current-buffer))
    (message "Wrote custom file associations to file %s" file)))

(defun load-custom-mode-alist (file)
  (when (file-exists-p file)
    (with-current-buffer
        (let ((enable-local-variables nil))
          (find-file-noselect file))
      (goto-char (point-min))
      (setq my-custom-mode-alist (read (current-buffer)))
      (setq auto-mode-alist (append auto-mode-alist my-custom-mode-alist))
      (kill-buffer (current-buffer)))))

;; Load any custom file associations and add them to auto-mode-alist
(load-custom-mode-alist my-custom-mode-alist-file)

দুর্ভাগ্যক্রমে, ফাইলগুলি বেশ আলগাভাবে ফর্ম্যাট করা হয় এবং তাদের খুব জেনেরিক ফাইলের নাম রয়েছে। auto-mode-alistযদিও এর সুনির্দিষ্ট বিষয়গুলি নির্দেশ করার জন্য ধন্যবাদ । আমি সম্ভবত magic-mode-alistভবিষ্যতে কিছু করার জন্য আমার মনের পিছনে রাখব।
পাইথননট

4

নিম্নলিখিত, গ্লুকাসের পরামর্শের উপর ভিত্তি করে পুরোপুরি কার্যকর বলে মনে হচ্ছে।

(defvar file-name-mode-alist '())
;; other stuff here, of course
(setq savehist-additional-variables '(file-name-mode-alist))
(savehist-mode +1)
(setq auto-mode-alist (append auto-mode-alist file-name-mode-alist))

(add-hook 'after-change-major-mode-hook
  (lambda ()
    (when (and
            buffer-file-name
            (not
              (file-name-extension
                buffer-file-name)))
       (setq file-name-mode-alist
        (cons
          (cons buffer-file-name major-mode)
          file-name-mode-alist))
      (setq auto-mode-alist
        (append auto-mode-alist
          (list (cons buffer-file-name major-mode)))))))

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