ইমজ্যাকস / সোয়াঙ্ক / ক্লোজারের জন্য পেরেডিটের একটি মৃদু টিউটোরিয়াল


87

আমি Clojure / Lisp এ কাজ করতে ইম্যাক্সে চলেছি । নিম্নলিখিতগুলি করতে সক্ষম হবার জন্য ইম্যাক্সে সেটআপ করার জন্য আমার প্রয়োজনীয় সমস্ত তথ্য কী?

  1. সম্পর্কিত বন্ধনী বন্ধনীগুলির স্বয়ংক্রিয় মিল / প্রজন্ম
  2. স্বয়ংক্রিয় লিস্প / ক্লোজার স্টাইল, সি ++ / জাভা স্টাইল নয়
  3. সিনট্যাক্স হাইলাইট করা
  4. invoking REPL
  5. ফাইল থেকে কোডের একটি অংশকে আরপিএলে ফাইল থেকে লোড করতে এবং মূল্যায়ন করতে সক্ষম হতে।

এটি খুব ভাল হবে যদি আমি ইমাক্সে জিনিসগুলি সেট আপ করার পরে এই জিনিসগুলি পেতে আদেশের তালিকাও পেতে পারি।

উত্তর:


89

[অ-লেখক থেকে সম্পাদনা করুন: এটি ২০১০ সালের, এবং প্রক্রিয়াটি উল্লেখযোগ্যভাবে সরল করা হয়েছে ২০১১ সালের মে থেকে। আমি এই উত্তরটিতে ফেব্রুয়ারী ২০১২ পর্যন্ত আমার সেটআপ নোট সহ একটি পোস্ট যুক্ত করব।]

আপনাকে কয়েকটি টুকরো একসাথে রাখতে হবে: ইমাকস, স্লাইমাইম (যা ক্লোজারের সাথে পুরোপুরি ভালভাবে কাজ করে - সুইঙ্ক-ক্লোজার দেখুন), সুইঙ্ক-ক্লোজার (এসএলআইএম-এর সার্ভারের অংশের ক্লোজার বাস্তবায়ন), ক্লোজার-মোড, পেরেডিট এবং এর অবশ্যই, একটি সূচনার জন্য ক্লোজার জার, তারপরে সম্ভবত কিছু অতিরিক্ত যা লেইনিঞ্জেন সম্ভবত সবচেয়ে উল্লেখযোগ্য হবে। একবার আপনি এটি সেট আপ করার পরে, আপনার কাছে - ইমাসের মধ্যে - প্রশ্নটিতে আপনি উল্লিখিত সমস্ত কর্মপ্রবাহ / সম্পাদনা বৈশিষ্ট্য থাকবে।

বেসিক সেটআপ:

নীচে দুর্দান্ত টিউটোরিয়ালগুলি দেওয়া আছে যা এই সমস্ত কীভাবে সেট আপ করবেন তা বর্ণনা করে; ওয়েবে আরও রয়েছে, তবে অন্যদের মধ্যে বেশ কয়েকটি পুরানো, যদিও এই দুটি আপাতত ঠিক আছে বলে মনে হচ্ছে:

  1. যার মধ্যে ফিল হেগেলবার্গের ব্লগে ক্লোজার রচয়িতা পোস্ট সম্পর্কিত ব্যবসায়ের কৌশল খুঁজে পাওয়া যায় ; ফিল swank-Clojure এবং Clojure- মোড বজায় রাখে, পাশাপাশি Emacs স্টার্টার কিট নামক একটি প্যাকেজ যা Emacs বিশ্বের যে কোনও নতুন আগত ব্যক্তিকে এটি দেখার জন্য ভাল পরামর্শ দেওয়া হবে। এই নির্দেশাবলী অবকাঠামোগত সাম্প্রতিক পরিবর্তনগুলির সাথে আপ টু ডেট আনা হয়েছে বলে মনে হয়; সন্দেহের ক্ষেত্রে ক্লোজারের গুগল গ্রুপের অতিরিক্ত তথ্য সন্ধান করুন।

  2. ইনকান্টার প্রকল্পের ব্লগে ক্লোজার, ইনকান্টার, ইমাকস, স্লাইম, সোয়াঙ্ক এবং পেরেডিট পোস্ট সেট আপ করা হচ্ছে । ইনকান্টার হ'ল ক্লোজুরে এম্বেড স্ট্যাটিস্টিকাল কম্পিউটেশনের জন্য একটি আর-ডিএসএল সরবরাহকারী একটি আকর্ষণীয় প্যাকেজ। আপনি যদি ইনক্যান্টার - এমনকি ইনস্টল করতে - এমনকি পরিকল্পনা না করেন তবে এই পোস্টটি কার্যকর হবে।

এটি সব কাজ করা:

আপনি একবার এই সমস্ত জিনিস সেট আপ করার পরে, আপনি এখনই চেষ্টা করে এটি ব্যবহার শুরু করতে পারেন, তবে আমি আপনাকে নিম্নলিখিত বিষয়গুলি করার জন্য দৃ strongly় পরামর্শ দিচ্ছি:

  1. স্লাইমির ম্যানুয়ালটি একবার দেখুন - এটি উত্সগুলিতে অন্তর্ভুক্ত রয়েছে এবং এটি আসলে খুব পঠনযোগ্য। এছাড়াও, আপনার পুরো 50-পৃষ্ঠার দৈত্য ম্যানুয়ালটি পড়ার একেবারেই কোনও কারণ নেই ; কোন বৈশিষ্ট্য উপলব্ধ তা দেখতে কেবল একবার ঘুরে দেখুন।

    দ্রষ্টব্য: সর্বশেষ প্রবাহের উত্সগুলিতে স্লাইম-এর অটোডোক বৈশিষ্ট্যটি সোয়াঙ্ক-ক্লোজারের সাথে সামঞ্জস্যপূর্ণ নয় - যদি আপনি ফিল হেগেলবার্গের এলপিএ সংস্করণ ব্যবহারের প্রস্তাবটি অনুসরণ করেন (তবে তার ব্যাখ্যার জন্য তার পূর্বোক্ত ব্লগ পোস্টটি দেখুন) এই সমস্যাটি আসবে না অথবা কেবল অটোডোকটি ছেড়ে দিন (যা জিনিসগুলির ডিফল্ট অবস্থা is পরবর্তী বিকল্পটিতে কিছু যুক্তিযুক্ত আবেদন রয়েছে যা আপনি এখনও লিন্সের সাথে সর্বশেষতম স্লাইম ব্যবহার করতে পারেন, যদি আপনি এটিরও ব্যবহার করেন।

  2. পেরেডিটের জন্য দস্তাবেজগুলি একবার দেখুন। এটি সম্পর্কে দুটি উপায় রয়েছে: (১) উত্সটি দেখুন - ফাইলটির শীর্ষে একটি বিশাল পরিমাণ মন্তব্য রয়েছে যাতে আপনার সম্ভবত সমস্ত তথ্য উপস্থিত থাকে; (২) C-h mপেরেডিট-মোড সক্রিয় থাকাকালীন ইমাসে টাইপ করুন - একটি বাফার বর্তমান সর্বাধিক মোডের তথ্য সহ সমস্ত সক্রিয় ছোটখাটো মোডের তথ্য (যার মধ্যে একটি রয়েছে পেরেডিট) পপআপ করবে।

    আপডেট: ফিল্ড হেগেলবার্গের পেরেডিট-এ আমি এই শীতল নোটটি পেয়েছি ... এটি একটি পাঠ্য ফাইলের লিঙ্ক, আমার মনে আছে এই কোথাও এই তথ্য সহ স্লাইডগুলির একটি দুর্দান্ত সেট দেখেছি তবে এখন এটি খুঁজে পাবে না বলে মনে হচ্ছে । যাইহোক, এটি কীভাবে কাজ করে তার একটি দুর্দান্ত সারাংশ। অবশ্যই এটি দেখুন, আমি এখন পেরেডিট ছাড়া বাঁচতে পারি না এবং এই ফাইলটি এটি ব্যবহার শুরু করা খুব সহজ করে দেওয়া উচিত, আমি বিশ্বাস করি। :-)

  3. প্রকৃতপক্ষে, C-h mসংমিশ্রণটি আপনাকে স্লাইম রিপ্লেতে সক্রিয় সমস্ত কী-বাইন্ডিং সম্পর্কে ক্লোজার-মোডে (আপনি C-c C-kবর্তমান বাফারটি সংকলনের জন্য প্রেরণের জন্য স্মরণ করতে চান ) এবং প্রকৃতপক্ষে কোনও ইমাক্স বাফারে আপনাকে বলবেন ।

যেমন কোনও ফাইল থেকে কোড লোড করা এবং তারপরে এটিই আরপিএলে পরীক্ষামূলকভাবে: C-c C-kবর্তমান বাফারটি সংকলিত করতে উল্লিখিত সংমিশ্রণটি ব্যবহার করুন , তারপরে useবা requireএর নাম স্থানটি আরএপিএল এ। পরবর্তী, পরীক্ষা দূরে।

চূড়ান্ত নোট:

সমস্ত ক্লিকের আগে কিছুক্ষণের জন্য কিছু টুইট করতে প্রস্তুত থাকুন। এতে প্রচুর সরঞ্জাম জড়িত রয়েছে এবং তাদের মিথস্ক্রিয়াগুলি বেশিরভাগ ক্ষেত্রে মোটামুটি মসৃণ হয় তবে এটি প্রাথমিক পর্যায়ে আপনাকে কিছুটা সামঞ্জস্য করতে হবে না এমন ধারণা করা নিরাপদ।

অবশেষে, আমি এখানে কিছু কোড রেখেছি .emacsযা আপনি অন্য কোথাও পাবেন না (যদিও এটি ফিল হেগেলবার্গের একটি দুর্দান্ত ফাংশন ভিত্তিক)। আমি আমার swank দৃষ্টান্তগুলি lein swank( লেইনিঞ্জেনের অন্যতম শীতল বৈশিষ্ট্য) clojure-projectদিয়ে শুরু করার এবং ইম্যাক্সের মধ্যে থেকে পুরো জিনিসটি শুরু করার জন্য নীচের মতো ফাংশনটি ব্যবহার করার মধ্যবর্তী বিকল্প । পরেরটি পরিবেশের সাথে একত্রে মিলে যাওয়া পরিবেশটি তৈরি করার জন্য আমি যথাসাধ্য চেষ্টা করেছি lein swank। ওহ, এবং যদি আপনি দ্রুত এবং নোংরা পরীক্ষার জন্য কেবল ইম্যাক্সে একটি REPL চান, তবে সঠিক সেটআপ সহ আপনার M-x slimeসরাসরি ব্যবহার করতে সক্ষম হওয়া উচিত ।

(setq clojure-project-extra-classpaths
      '(
        ; "deps/"
        "src/"
        "classes/"
        "test/"
        ))

(setq clojure-project-jar-classpaths
      '(
        ; "deps/"
        "lib/"
        ))

(defun find-clojure-project-jars (path)
  (apply #'append
         (mapcar (lambda (d)
                   (loop for jar in (remove-if (lambda (f) (member f '("." "..")))
                                               (directory-files d t))
                         collect jar into jars
                         finally return jars))
                 (remove-if-not #'file-exists-p
                                clojure-project-jar-classpaths))))

(defun find-clojure-jar (jars)
  (let ((candidates
         (remove-if-not
          (lambda (jar)
            (string-match-p "clojure\\([0-9.-]+\\(SNAPSHOT|MASTER\\)?\\)?\\.jar$" jar))
          jars)))
    (if candidates
        (car candidates)
      (expand-file-name "~/.clojure/clojure.jar"))))

(defun find-clojure-contrib-jar (jars)
  (let ((candidates
         (remove-if-not
          (lambda (jar)
            (string-match-p "clojure-contrib\\([0-9.-]+\\(SNAPSHOT|MASTER\\)?\\)?\\.jar$" jar))
          jars)))
    (if candidates
        (car candidates)
      (expand-file-name "~/.clojure/clojure-contrib.jar"))))

;;; original due to Phil Hagelberg
;;; (see `Best practices for Slime with Clojure' thread on Clojure Google Group)
(defun clojure-project (path)
  "Sets up classpaths for a clojure project and starts a new SLIME session.

   Kills existing SLIME session, if any."
  (interactive (list (ido-read-directory-name
                      "Project root:"
                      (locate-dominating-file default-directory "pom.xml"))))
  (when (get-buffer "*inferior-lisp*")
    (kill-buffer "*inferior-lisp*"))
  (cd path)
  ;; I'm not sure if I want to mkdir; doing that would be a problem
  ;; if I wanted to open e.g. clojure or clojure-contrib as a project
  ;; (both lack "deps/")
                                        ; (mapcar (lambda (d) (mkdir d t)) '("deps" "src" "classes" "test"))
  (let* ((jars (find-clojure-project-jars path))
         (clojure-jar (find-clojure-jar jars))
         (clojure-contrib-jar (find-clojure-contrib-jar jars)))
    (setq swank-clojure-binary nil
          ;; swank-clojure-jar-path (expand-file-name "~/.clojure/clojure.jar")
          swank-clojure-jar-path clojure-jar
          swank-clojure-extra-classpaths
          (cons clojure-contrib-jar
                (append (mapcar (lambda (d) (expand-file-name d path))
                                clojure-project-extra-classpaths)
                        (find-clojure-project-jars path)))
          swank-clojure-extra-vm-args
          (list (format "-Dclojure.compile.path=%s"
                        (expand-file-name "classes/" path)))
          slime-lisp-implementations
          (cons `(clojure ,(swank-clojure-cmd) :init swank-clojure-init)
                (remove-if #'(lambda (x) (eq (car x) 'clojure))
                           slime-lisp-implementations))))
  (slime))

4
সুন্দর লেখার জন্য আপনাকে অনেক ধন্যবাদ!
ব্যবহারকারী 855

4
আপনাকে স্বাগতম. আশা করি এটি ক্লোজুরে দিয়ে আপনার পথে পৌঁছেছে। শুভ হ্যাকিং! :-)
মিশা মার্সিজিক

4
ł: খুব সুন্দর লেখা। ধন্যবাদ
রাল্ফ

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

10

আরও একটি দুর্দান্ত টিউটোরিয়াল রয়েছে:

30 থেকে 45 মিনিটের মধ্যে একজন স্ক্র্যাচ থেকে সবকিছু সেটআপ করতে পারে।

টিউটোরিয়ালটি ইমাকসের কোনও পূর্ববর্তী জ্ঞান (এবং ক্লোজারও খুব বেশি নয় - পূর্ববর্তী পোস্টগুলিতে ক্লোজারের জন্য একটি দুর্দান্ত পরিচয় রয়েছে) ধরে নেই।


8

এ গিয়ে Emacs স্টার্টার কিট Clojure দিয়ে শুরু পাবার জন্য মহান রিভিউ অর্জিত হয়েছে:

আপনার প্রশ্নের কেবল দোলের অংশটির উত্তর দিতে:

লেনিনজেন হ'ল সঠিক ক্লাসপথের সাথে সোয়াঙ্ক স্থাপন এবং এটি ইম্যাক্সের সাথে সংযুক্ত হওয়ার সত্যিই সহজ উপায়।

একটি দুর্দান্ত ভিডিও এখানে রয়েছে: http://vimeo.com/channels/fuldisclojure#8934942 এখানে একটি প্রকল্পের একটি উদাহরণ রয়েছে। সিএলজে ফাইল

(defproject project "0.1"
    :dependencies [[org.clojure/clojure
                      "1.1.0-master-SNAPSHOT"]
                   [org.clojure/clojure-contrib
                      "1.0-SNAPSHOT"]]
    :dev-dependencies [[leiningen/lein-swank "1.1.0"]]
    :main my.project.main)

তারপরে চালান:

lein swank

এবং ইমাস থেকে:

 alt-x slime-connect


1

সিডার (ক্লোজার ইন্টারেক্টিভ ডেভেলপমেন্ট এনভায়রনমেন্ট) অবশ্যই এখানে উল্লেখ করা উচিত।

এটি আপনি যা সন্ধান করছেন তার বেশিরভাগটি কভার করবে। এটা অন্তর্ভুক্ত:

  • ইন্টারেক্টিভ REPL
  • ডিবাগিং
  • পরীক্ষা চলছে
  • কোড নেভিগেশন
  • ডকুমেন্টেশন সন্ধান
  • অনেক বেশি

সিডির ছাড়াও ক্লোজার বিকাশের জন্য আরও কিছু প্রয়োজনীয় এবং সুন্দর টু অ্যাড-অন রয়েছে, যা আমি যথাক্রমে গ্রুপ করার চেষ্টা করব (এবং বিষয়গতভাবে):

প্রয়োজনীয়তা

সুন্দর

সাধারণ প্রয়োজনীয়তা (যে কোনও ভাষার জন্য)

অন্যান্য উৎস

যদি আপনি এমন একটি সেটআপ খুঁজছেন যা ইতিমধ্যে আপনার পক্ষে এই / বেশিরভাগ কাজ করেছে তবে কয়েকটি বিকল্প হ'ল:

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