কীভাবে একই কম্পিউটারে একই ইমাক্স পরিবেশ পাবেন?


16

আমি ইমাসে একটি শিক্ষানবিস (এটি প্রায় 2 সপ্তাহ ধরে এখন ব্যবহার করে এটি পছন্দ করে)। আমি আপডেট এবং আমার প্রসারিত হিসাবে ~/.emacs.d/init.elফাইল, কিছু আমি লিখি যে নির্দিষ্ট প্যাকেজের আমি ব্যবহার Melpa থেকে ইনস্টল উপর নির্ভর মধ্যে M-x package-install, উপর .elনিজেকে ফাইলের যে আমি লিখেছি, ইত্যাদি

আমার প্রশ্নটি হ'ল, আমি কি ভবিষ্যতে কম্পিউটারের উদাহরণস্বরূপ স্যুইচ করা উচিত, এখনকার মতো নতুন কম্পিউটারে নির্বিঘ্নে একই সঠিক ইম্যাক্স পরিবেশ পাওয়ার সর্বোত্তম উপায় কী?


3
যতক্ষণ আপনি আপনার init.elচারপাশে সরে যেতে পারেন (উদাহরণস্বরূপ গিট ব্যবহার করে), এই পদ্ধতির কাজগুলিও (ভিত্তিক use-package): লুনারিওর্ন.কম
পোস্টস

একটি পদ্ধতি হ'ল আপনার .emacs.d ডিরেক্টরিটি ড্রপবক্সে রেখে দেওয়া। আমি এটি কেবল একই ওএস সহ কম্পিউটারে ব্যবহার করেছি। * নিক্সের বিভিন্ন স্বাদ ঠিকঠাক হওয়া উচিত, তবে আপনি ওএসএস চলমান মেশিনগুলিতে খুব আলাদা যেগুলি ভাগ করে নেওয়ার চেষ্টা করলে আপনার সমস্যা হতে পারে।
কুদিত

এই প্রশ্নটি emacs.stackexchange.com/q/408/2710 এর খুব কাছে । আপনি পার্থক্য হাইলাইট করতে পারেন?
অ্যান্ড্রু সোয়ান

আমার মতো নন-প্রোগ্রামারটির জন্য, গুগল ড্রাইভ ব্যবহার করে তিনটি মেশিনে (দুটি উইন্ডো, একটি ওএসএক্স) ইমাক্স কনফিগারেশন এবং প্যাকেজগুলি সিঙ্ক্রোনাইজ করা কার্যকর এবং নির্ভরযোগ্য। এটি কাজ করে কারণ ইম্যাক্স এবং এর বেশিরভাগ প্যাকেজগুলি মূলত প্ল্যাটফর্ম অজিনস্টিক। অভিন্ন ইম্যাক্স অভিজ্ঞতার ক্রস প্ল্যাটফর্মের পুনরূদ্ধার জন্য সিঙ্ক্রোনাইজড ইমাস প্যাকেজ ডিরেক্টরিতে ওএস নির্দিষ্ট পাথগুলি সমাধান করার জন্য init.el ফাইলের মধ্যে কেবল কয়েকটি লাইন প্রয়োজন।
স্নিলেফ্যান্ট

আপনার কনফিগারেশনটি আপনার সম্পূর্ণ ~/.emacs.dডিরেক্টরি, সুতরাং আপনি যেকোনো পদ্ধতিটি মেশিনের মধ্যে সিঙ্ক্রোনাইজ করতে পছন্দ করুন। (যেমন একটি গিথুব সংগ্রহশালা, বা একটি ড্রপবক্স ফোল্ডার, বা যা আপনার পক্ষে সবচেয়ে ভাল কাজ করে)।
ফিল্ডস

উত্তর:


9

সঠিক সমাধানটি হ'ল ব্যবহার করা straight.el, একটি প্যাকেজ ম্যানেজার যা আমি লিখেছিলাম এই সমস্যাটি সমাধান করার জন্য। আপনি এই প্রশ্নের আরও একটি উত্তরে এ সম্পর্কে আরও বিশদ জানতে পারেন ।

এই উত্তরটি, যা আমি কাজ শুরু করার কয়েক মাস আগে লেখা হয়েছিল straight.el, এর আগে আংশিক সমাধান অর্জনের কঠোরভাবে নিকৃষ্টতম উপায় বর্ণনা করেছিলেন। এই পদ্ধতির নীচে সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে; আমি আর এটি সুপারিশ।

আপনি যদি ব্যবহার করতে না চান তবে আপনার straight.elকমপক্ষে অবলম্বন করা উচিত use-package। (এটি নয় যে দু'টি পারস্পরিক একচেটিয়া — আমি বিশ্বাস করি যে সবচেয়ে পরিষ্কার সেটআপটি উভয় ব্যবহার থেকেই আসে comes)


আপনার init-ফাইলটিতে প্যাকেজগুলির তালিকা নির্ধারণ করে শুরু করুন:

(defvar my-packages
        '(
          aggressive-indent
          avy
           .
           .
           .
          projectile
          undo-tree
          )
  "List of packages to be installed at Emacs startup.")

তারপরে এগুলি স্বয়ংক্রিয়ভাবে ইনস্টল করুন:

(require 'cl-lib)
(package-initialize)
(unless (cl-every #'package-installed-p my-packages)
  (dolist (package my-packages)
    (unless (package-installed-p package)
      (package-install package))))

আপনি যদি নিজের init.elফাইলটিকে সংস্করণ নিয়ন্ত্রণে রাখেন তবে এটি অন্য মেশিনে সিঙ্ক করার ফলে আপনার প্যাকেজগুলি স্বয়ংক্রিয়ভাবে ইনস্টল হবে। অবশ্যই, ইনস্টল করা সংস্করণগুলি সম্পূর্ণ আলাদা হবে এবং ফলস্বরূপ আপনার কনফিগারেশনটি বাক্সের বাইরে কাজ করার আশা করা যায় না। এটি এর একটি মৌলিক ত্রুটি package.el, এবং এই পদ্ধতিটি খারাপ হওয়ার অন্যতম কারণ। আবার দেখুন straight.el। এও নোট করুন যে উপরে বর্ণিত কোডটি আপনার প্যাকেজ তালিকাকে আপনার প্যাকেজগুলির জন্য আপনার কনফিগারেশন থেকে পৃথক করে, আপনার init-ফাইলটিতে জিনিসগুলি ট্র্যাক করা শক্ত করে তোলে। এটি আর একটি বড় অসুবিধা। আবার দেখুন use-package


লেখার আপ জন্য ধন্যবাদ! আমি যদি মেলপা থেকে ডাউনলোড করা প্যাকেজগুলি সহ আমি গিথুবের সমস্ত কিছু হোস্ট করার জন্য বেছে নিই, এটি কি নতুন কম্পিউটারে প্যাকেজগুলি স্বয়ংক্রিয়ভাবে আপডেট করার মেল্পার ক্ষমতা বজায় রাখবে?
স্পেস_ভয়েজার

1
@ স্পেস_ভয়েজার হ্যাঁ, সবকিছু এখনও একইভাবে ঘটবে। তবে: (১) আপনি যখন নতুন কম্পিউটারে ক্লোন করেছেন তখন ইমাক্সকে মেলপা থেকে প্যাকেজগুলি ডাউনলোড করার দরকার পড়বে না , কারণ তারা ইতিমধ্যে আপনার সবেমাত্র ক্লোন করা ভাণ্ডারে রয়েছে; এবং (২) আপনি যখনই package.elপ্যাকেজ আপডেট করার জন্য ব্যবহার করবেন তখন আপনার সংগ্রহস্থলটিতে অযাচিত পরিবর্তনগুলি হবে এবং প্যাকেজ আপডেটগুলি অন্তর্ভুক্ত করার জন্য আপনাকে একটি অঙ্গীকারবদ্ধ করতে হবে।
র‌্যাডন রোসবারো

ধন্যবাদ, ধন্যবাদ আরও একটি জিনিস: আমি ভেবেছিলাম মেলপা স্বয়ংক্রিয়ভাবে প্যাকেজ আপডেট করে। এটা কি না?
স্পেস_ভয়েজার

1
@ স্পেস_ভয়েজার: আচ্ছা, অবশ্যই রিমোট প্যাকেজ সংগ্রহস্থল আপডেট করা হবে, তবে প্যাকেজগুলির আপডেট হওয়া সংস্করণগুলি আপনার স্থানীয় মেশিনে স্বয়ংক্রিয়ভাবে ডাউনলোড এবং ইনস্টল করা হবে না। তার জন্য আপনার দরকার M-x list-packages RET U
রেডন রোজবারো

1
@ লাসি সংক্ষিপ্ত উত্তর: আপনি ইমা্যাকগুলি ইনস্টল করতে চান যা ব্যবহার করুন; straight.elকেবল ইমাস প্যাকেজ ইনস্টল করতে ব্যবহার করুন । নিক্স একটি দুর্দান্ত ধারণা, তবে আমি যতদূর জানি ইমা্যাক্স প্যাকেজ বিকাশের জন্য এটি অনুকূলভাবে অনুকূল নয় (দয়া করে আমি ভুল হয়ে থাকলে আমাকে সংশোধন করুন) । আপনি যদি ইমাস প্যাকেজগুলি ইনস্টল করতে কোনও সিস্টেম প্যাকেজ ম্যানেজার ব্যবহার করেন তবে আপনি কেবল তাদের উত্স কোডটি সম্পাদনা করতে পারবেন না এবং তারপরে আপনার পরিবর্তনগুলি আপ স্ট্রিমে চাপিয়ে দিতে এবং চাপতে সক্ষম হবেন না। গতবার আমি ইমাস প্যাকেজগুলির জন্য নিক্স কনফিগারেশনটি দেখেছি, এটি অত্যধিক জটিল এবং সাধারণত straight.elউন্নয়নের অভিজ্ঞতার চেয়ে নিকৃষ্ট বলে মনে হচ্ছে । কিন্তু, যাই হোক না কেন আপনার নৌকা ভাসা।
রেডন রোসবারো

11

আপনি যদি ব্যবহার -প্যাকেজ ব্যবহার করেন , আপনি সেই ফাইলটিকে কম্পিউটার থেকে কম্পিউটারে নিয়ে যেতে পারেন এবং যখন Emacs শুরু হয়, যতক্ষণ না আপনার ইন্টারনেট অ্যাক্সেস রয়েছে, এটি প্যাকেজগুলিতে টানবে এবং এগুলি কনফিগার করবে।

প্রথমে প্যাকেজ লাইব্রেরি সেট আপ করুন:

(require 'package)
(add-to-list 'package-archives
             '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)

এবং তারপরে বুটস্ট্র্যাপ use-package:

(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))

(eval-when-compile (require 'use-package))

এখন, ইম্যাকস কনফিগার করার পরিবর্তে এবং প্যাকেজগুলি ইনস্টল করা আছে তা বোঝার পরিবর্তে এগুলি use-packageইনস্টল করুন এবং কনফিগার করুন উভয়ই ব্যবহার করুন। উদাহরণস্বরূপ, আমার কিছু হেলম সেটিংসের জন্য:

(use-package helm
  :ensure t
  :bind (("M-x" . helm-M-x)
         ("M-y" . helm-show-kill-ring)
         ("C-x C-f" . helm-find-files)
         ("M-s o" . helm-occur))

  :config
  (helm-mode 1)
  (setq helm-echo-input-in-header-line t))

আপনি মনে রাখবেন, এটি init.elজুড়ে কনফিগারেশনটি (ইন ) পাওয়া যায় তবে এর মধ্যে আরও অনেক কিছুই রয়েছে। উদাহরণস্বরূপ, এই ডাবব্রেভ ফাইলগুলি বা আপনার কাস্টম স্নিপেটগুলি বা অন্য কোনও টনের কোনওোটাই পোর্ট করবে না।
ওমায়ের মাজিদ

হ্যাঁ. আপনার যদি অন্য ফাইলগুলিও থাকে যা আপনার কনফিগারেশনের অংশ, আপনি আপনার init ফাইলের পাশাপাশি এগুলিও সরিয়ে নিতে হবে।
zck

এই মুহুর্তে, এটি আবার একটি গেম হয়ে ওঠে "কোন ফাইলটি আসলে আমার কনফিগারেশনের অংশ এবং আমি কীভাবে এটি আমার মেশিনে সিঙ্কে রাখব" :(
ওমির মজিদ

আপনি যোগ করা উচিত :ensure tকরার use-packageঘোষণা বা সেট use-package-always-ensureকরতে t। অন্যথায় কনফিগারেশনটি অনুলিপি করার পরে এটি অন্য সিস্টেমে স্বয়ংক্রিয়ভাবে ইনস্টল হবে না।
চক্রবর্তী রাঘুনন্দন

6

এর সাথে পরবর্তী প্রজন্মের প্যাকেজ পরিচালনা straight.el

পরে ব্যবহার একটি দীর্ঘ ও হতাশাজনক সংগ্রাম package.el+ + Quelpa আমার প্যাকেজ পরিচালনা করতে, আমি বুলেট বিট এবং আমার নিজের প্যাকেজ ম্যানেজার লিখেছিলেন । এটি package.elপ্যাকেজ পরিচালনার অভিজ্ঞতা প্রদানের মাধ্যমে সম্পূর্ণরূপে প্রতিস্থাপনের উদ্দেশ্যে যা প্রায় প্রতিটি উপায়েই উন্নত superior

এর সমস্ত বৈশিষ্ট্য সম্পর্কে জানতে আপনি খুব বিস্তৃত ডকুমেন্টেশন পড়তে পারেন , তবে এই প্রশ্নের সবচেয়ে প্রাসঙ্গিক হ'ল নিখুঁত পুনরুত্পাদনযোগ্যতারstraight.el উপর দৃষ্টি নিবদ্ধ করে । এর অর্থ এটি আপনি ইমাক্সকে সাধারণভাবে শুরু করছেন বা কোনও নতুন মেশিনে শুরু করছেন কিনা তা বিবেচ্য নয় এবং কোনও স্থানীয় পরিবর্তন সংস্করণ-নিয়ন্ত্রিত এবং একটি আঞ্চলিক অবস্থায় ফিরে যেতে পারে কিনা তা বিবেচ্য নয়। ব্যবহারিকভাবে বলতে গেলে, (1) গিট সংগ্রহস্থল হিসাবে ক্লোনিং প্যাকেজগুলি অর্জন করে এবং তাদের রাষ্ট্র পরিচালনার জন্য স্বয়ংক্রিয় সরঞ্জাম সরবরাহ করে; (২) আর-ফাইলটি প্যাকেজ পরিচালনা রাষ্ট্রের সত্যের একমাত্র উত্স হিসাবে ব্যবহার করা , অন্য কোনও স্থান পরিবর্তনযোগ্য ডেটা নেই; এবং (3) প্রতিটি প্যাকেজের সঠিক গিট সংশোধন, এবং কোনও রেসিপি সংগ্রহস্থল এবংstraight.el নিজেই।

শুরু করতে, বুটস্ট্র্যাপ স্নিপেট sertোকান , যা ইনস্টল এবং সক্রিয় হবে straight.el। তারপরে, কোনও প্যাকেজ ইনস্টল করা আছে তা নিশ্চিত করার জন্য, straight-use-packageআপনার init-ফাইলটিতে কেবল একটি কল করুন:

(straight-use-package 'projectile)

হ্যাঁ, এটা সহজ। কোনও package-refresh-contentsআবর্জনা বা কারও কারও সাথেই কারবার নেই dealing যদি আপনি এই ফর্মটি আপনার আরআইডি-ফাইল থেকে সরান এবং ইম্যাক্স পুনরায় চালু করেন তবে প্রজেক্টাইল আর লোড হবে না (এর বিপরীতে package.el)) এর অর্থ হল আপনার কনফিগারেশনটি কোনওভাবেই কোনও নতুন মেশিনে কাজ না করার বিষয়ে আপনাকে চিন্তা করতে হবে না কারণ আপনি দুর্ঘটনাক্রমে অঘোষিত প্যাকেজগুলির উপর নির্ভরশীল।

আপনি প্যাকেজগুলি যে কোনও জায়গায় ইনস্টল করতে পারেন এবং যখনই আপনি চান আপনার init-ফাইল জুড়ে (এক বিন্দুতে তাদের তালিকা ঘোষণা করার দরকার নেই)। অবশ্যই আপনি ঠিক করতে পারেন

(dolist (package '(ace-jump-mode ... zzz-to-char)) (straight-use-package package))

আপনি যদি তালিকা পছন্দ। তবে আমি আপনাকে use-packageপ্যাকেজ কনফিগারেশন পরিচালনা করতে ব্যবহার করার পরামর্শ দিচ্ছি । প্রথমে আপনাকে এটি ইনস্টল করতে হবে:

(straight-use-package 'use-package)

তারপরে, যেহেতু straight.elবিল্ট-ইন ইন্টিগ্রেশনটি এর সাথে অন্তর্নিহিত হয়েছে use-package, নিম্নলিখিত "কেবলমাত্র কাজ করে":

(use-package projectile
  :straight t
  :init (projectile-mode 1))

একবার আপনার প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করতে আপনার M-x straight-freeze-versionsinit- ফাইল লিখেছেন, এতে একটি সংস্করণ লকফিল সংরক্ষণ করতে চালান ~/.emacs.d/straight/versions/default.elstraight.elআপনার প্রথমে এই ফাইলটি সংস্করণ নিয়ন্ত্রণে রাখা উচিত, যেহেতু আপনি যখন প্রথম কোনও নতুন মেশিনে ইমাস চালু করবেন তখন এটি আপনার সমস্ত প্যাকেজগুলির সঠিক সংস্করণগুলি পরীক্ষা করে দেখার অনুমতি দেবে । (আপনি লকফিলের সাহায্যে ম্যানুয়ালি উল্লিখিত সংস্করণগুলিতে ফিরে যেতে পারেন M-x straight-thaw-versions))

মেশিন-স্থানীয় dotfiles ধারণা যে আমি উল্লেখ সমর্থন করার জন্য আমার অন্যান্য জবাব , straight.elএকটি প্রস্তাব প্রফাইল সিস্টেম । আমি এখনও আপনার init.elডটফাইলে সিমলিংকগুলি ব্যবহার করার পরামর্শ দিচ্ছি (এই ক্ষেত্রে, প্রযোজ্য ক্ষেত্রে আপনার স্থানীয় ইন-ফাইল এবং যদি আপনি এটি ব্যবহার করতে চান তবে সংস্করণ লকফাইল)।

আপনি যদি ভাবছেন যে straight.elঅন্যান্য প্যাকেজ পরিচালকদের সাথে কীভাবে তুলনা করা হয় তবে বিস্তৃত তুলনা বিভাগটি দেখুন । তবে অন্য সব কিছুর উপর আরও অনেকগুলি ডকুমেন্টেশন রয়েছে


4

আপনার প্যাকেজগুলি পরিচালনা করতে আপনি ক্যাস্ক ব্যবহার করতে পারেন । সোর্স নিয়ন্ত্রণে গিট / গিথব ব্যবহার করুন এবং আপনার ইমাস ডটফাইলগুলি সিঙ্ক করুন।

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