উত্তর:
.dir-locals.el
এটি সম্ভব হলে আমার পছন্দের পদ্ধতিটি, বিশেষত এটি প্রকল্পে কাজ করা সমস্ত ইমাক ব্যবহারকারীদের ক্ষেত্রে প্রযোজ্য।
যে প্রকল্পগুলি ইমাস ব্যবহারকারীদের বিরুদ্ধ বা অন্যথায় .dir-locals.el
ফাইলগুলি চায় না , বা আপনি যদি ব্যক্তিগত পছন্দগুলি (সম্ভবত ইন্ডেন্টেশন না চান) চান যা অন্য ব্যক্তির ক্ষেত্রে প্রযোজ্য না হয়, আপনি যদি বিতরণকৃত সংস্করণ নিয়ন্ত্রণ ব্যবস্থা ব্যবহার করেন তবে একটি বিকল্প হ'ল আপনার সর্বদা ব্যক্তিগত শাখাগুলিতে কাজ করতে .dir-locals.el
। তবে, আমি কোনও ডিসিভিএস ব্যবহার করার কোনও উপায় জানি না যা এটি বেদনাবিহীন করে তোলে।
অন্য বিকল্পটি .dir-locals.el
ফাইলগুলি পরীক্ষা না করা। উদাহরণস্বরূপ, গিট সহ, এটি যুক্ত করুন .git/info/exclude
। অবশ্যই আপনার যদি কোনও প্রকল্পের অনেকগুলি চেকআউট থাকে তবে তা বেদনাদায়ক।
.dir-locals.el
অপশন ছিল না এমন জায়গায় আমি যা করেছি তা হ'ল একটি হুক যুক্ত করা যা buffer-file-name
জ্ঞাত মানগুলির বিরুদ্ধে দেখা যায়।
(defvar guessed-project nil)
(make-variable-buffer-local 'guessed-project)
(defun guess-project-from-file-name ()
(save-match-data
(setq guessed-project
(cond
((string-match "/linux-kernel/" buffer-file-name)
'linux-kernel)
((string-match "/gnu/" buffer-file-name)
'gnu)
; etc.
))))
(defun c-my-project-hook ()
(guess-project-from-file-name)
(case guessed-project
((gnu) (c-sty-style 'gnu))
((linux-kernel) (c-sty-style 'linux))
))
(add-hook 'c-mode-hook 'c-my-project-hook)
(সতর্কতা: এখনই আমার আসল কোডটিতে আমার অ্যাক্সেস নেই বলে কোডটি সরাসরি আমার ব্রাউজারে টাইপ করা হয়))
.dir-locals.el
করা .git/info/exclude
একটি ভাল বিকল্প বলে মনে হচ্ছে ।
.gitignore
কোনও প্রকল্পের মূলের সাথে এটি যুক্ত করে কী ভুল ?
.dir-locals.el
আপনার গ্লোবাল গিটিগনরে যুক্ত করতে পারেন ~/.config/git/ignore
।
আপনি llvm এবং linux এর মতো উজানের প্রকল্পগুলিকে একটিতে পরীক্ষা করতে রাজি করতে পারবেন না .dir-locals.el
।
সমস্যার একটি বিস্তৃত সমাধান:
(defmacro define-new-c-style (name derived-from style-alist match-path)
`(progn
(c-add-style ,name
'(,derived-from ,@style-alist))
(add-hook 'c-mode-hook
(lambda ()
(let ((filename (buffer-file-name)))
(when (and filename
(string-match (expand-file-name ,match-path) filename))
(c-set-style ,name)))))))
নিম্নলিখিত হিসাবে ব্যবহৃত:
(define-new-c-style "llvm" "gnu" ((fill-column . 80)
(c++-indent-level . 2)
(c-offsets-alist . ((innamespace 0))))
"~/src/llvm")
(define-new-c-style "emacs" "gnu" nil "~/src/emacs")
অন্যান্য ভাষা মোডের জন্যও আমার একই রকম ম্যাক্রো রয়েছে।
বিভিন্ন প্রকল্পে .dir-local.el বিতরণ রক্ষণাবেক্ষণ করা কঠিন।
আমার উপায় বেশ সহজ, সমস্ত কোড এক one / .custom.el এ রাখুন।
মূলত, কোডটি প্রোগ-মোড-হুক (বা আপনার-যাই-বড়-মোড-মোড-হুক) তে চালানো হবে এবং নিম্নলিখিত জিনিসগুলি করুন:
আমি এক বছর ধরে এই পদ্ধতিটি সফলভাবে ব্যবহার করছি।
এখানে কোডটি রয়েছে (প্রগ-মোড-হুকটিতে আমার সেটআপ-বিকাশ-পরিবেশকে কল করুন):
(defun my-project-name-contains-substring (REGEX)
(let ((dir (if (buffer-file-name)
(file-name-directory (buffer-file-name))
"")))
(string-match-p REGEX dir)))
(defun my-office-code-style ()
(interactive)
(message "Office code style!")
;; web development
(setq coffee-tab-width 4)
(setq javascript-indent-level 4)
(setq js-indent-level 4)
(setq js2-basic-offset 4)
(setq web-mode-indent-style 4)
(setq web-mode-markup-indent-offset 4)
(setq web-mode-css-indent-offset 4)
(setq web-mode-code-indent-offset 4)
)
(defun my-personal-code-style ()
(interactive)
(message "My personal code style!")
(setq coffee-tab-width 4)
(setq javascript-indent-level 2)
(setq js-indent-level 2)
(setq js2-basic-offset 2)
(setq web-mode-indent-style 2)
(setq web-mode-markup-indent-offset 2)
(setq web-mode-css-indent-offset 2)
(setq web-mode-code-indent-offset 2)
)
(defun my-setup-develop-environment ()
(interactive)
(cond
;; company's project for ttag
((my-project-name-contains-substring "commerical-proj1")
(my-office-code-style))
((my-project-name-contains-substring "hobby-proj1")
(my-personal-code-style))
)
)
(add-hook 'prog-mode-hook 'my-setup-develop-environment)
এটি করার স্বাভাবিক উপায়টি হ'ল ব্যবহার করা .dir-locals
। এ কারণেই তাদের প্রথম স্থান দেওয়া হয়েছিল। কেন না? আমার জানা মতে, প্রকল্প সম্পর্কিত বেশিরভাগ সরঞ্জামগুলি তাদের কনফিগারগুলি মূল প্রকল্প ডিরেক্টরিতে রাখে: গিট, এসএনএন, এক্সলিপস এবং আরও অনেকগুলি ...
কেবল ফাইলটি .gitignore
বা অনুরূপ যুক্ত করতে ভুলবেন না ।
আমি অনুমান-স্টাইল.এল ব্যবহার করি ।
এটি কোনও ফাইলের পছন্দসই ইনডেন্টেশন শৈলী অনুমান করাতে বেশ ভাল করে।
.dir-locals.el
। সহকর্মীরা কি এই ধারণাটি পছন্দ করতে পারেন?