Emacs এ কোড ফোল্ডিং প্রভাবগুলি কীভাবে অর্জন করবেন?


123

কোড ফোল্ডিং বা org-মোড ব্যবহার করে সাইক্লিংয়ের ধরণের মতো কিছু অর্জনের সর্বোত্তম উপায় কী। এই ধরণের আচরণ তৈরির জন্য এলিস্পের সেরা সমাধানটি কী হবে?

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

যতদূর ভাঁজ করা যায় আমি কেবল বিল্টিন সেট-সিলেকটিভ-ডিসপ্লে ব্যবহার করি

সংখ্যা 2 সম্পাদনা করুন:

উত্তরের জন্য ধন্যবাদ তবে আমি মনে করি আমি ভুল প্রশ্ন জিজ্ঞাসা করছি তাই আমি যা করার চেষ্টা করছি সে সম্পর্কে আরও পরিষ্কার হওয়ার চেষ্টা করি। আমি নিম্নলিখিত তৈরি করতে চাই

আপনি যখন কোনও ফাংশনে আপনার বক্তব্য রাখেন এবং এই এলিস্প ফাংশনটিকে কল করেন এটি ফাংশন সংজ্ঞাটি যেখানেই থাকুক না কেন থেকে লাগবে (আমি এটির জন্য সন্ধানের ট্যাগটি ব্যবহার করার কথা ভাবছি) এবং এটি বর্তমান বাফারে প্রকাশ পাবে। ধারণাটি হ'ল যদি ফাংশন সংজ্ঞাটি পড়তে আপনাকে আলাদা বাফারে ঝাঁপ দিতে হয় তবে আমি মনে করি এটি অন্য ফাইলটিতে প্রসঙ্গে যেতে চাই to সুতরাং আমি এটি কোড ফোল্ডিংয়ের মতো আচরণ করতে চাই এটি কেবল বাফার থেকে বহিরাগত কোডকে টান দেয়। এটি কিছু সমস্যা উপস্থাপন করে কারণ এটি বাফারে তাত্ক্ষণিকভাবে কোডটি পেস্ট করতে পারে না বা কেউ যদি এটি সংরক্ষণ করে তবে কোডটি টানলে তা সংরক্ষণ করবে। সুতরাং আমি ভাবছি যে কোনও বাফারের অভ্যন্তরে এমন একটি অঞ্চল তৈরি করার কোনও উপায় আছে যা বাফারের অংশও নয়। আমি যে অর্থে তোলে।


আপনি এমন কিছু সন্ধান করছেন যা আপনি যখন কোনও ফাংশনটিতে পয়েন্ট দিয়ে কল করবেন তখন এটি ফাংশন সংজ্ঞাতে লাফিয়ে যায়? একটি এলিস্প ফাংশন সম্পর্কে সহায়তা পেতে যেমন এলিজপ কোডে আপনি লাফ দিতে দেবে? আমি মনে করি না "প্রকল্প" এর কিছু ধারণা ব্যতীত আপনি এটি করতে পারবেন উদাহরণস্বরূপ, আপনি কীভাবে জানবেন যে আপনি কোন "অদলবদল" ফাংশনটিতে যেতে চান?
ব্রায়ান পোস্টো

1
আরও দেখুন: স্ট্যাকওভারফ্লো / প্রশ্ন / 382781/… যেখানে কিছু ভাঁজ-জাতীয় প্রভাবের জন্য বেছে বেছে-প্রদর্শন কিছুটা টুইট করা হয়।
মাইকেল পাউলুকোনিস

আমি আপনাকে আপনার অপসারণ EDIT NB 2এবং এটির জন্য একটি নতুন প্রশ্ন করার পরামর্শ দিচ্ছি ।
স্টিফান

উত্তর:


151

ইম্যাক্স সহ ভাঁজটি সাধারণত অপ্রয়োজনীয়, কারণ এতে এমন সরঞ্জাম রয়েছে যা কোডগুলি ভাঁজ করার সময় লোকেরা ম্যানুয়ালি করে এমন ক্রিয়াগুলি স্পষ্টভাবে প্রয়োগ করে।

বেশিরভাগ লোকের সাধারণ বর্ধিত অনুসন্ধানগুলির সাথে ভাল সাফল্য রয়েছে। কোথাও উল্লেখ করা "ফু" দেখুন? টাইপ করুন C-sfoo, সংজ্ঞাটি সন্ধান করুন, এন্টার টিপুন, এটি পড়ুন এবং তারপরে C-x C-xআপনি যেখানে ছিলেন সেখানে ফিরে যেতে টিপুন । সহজ এবং খুব দরকারী।

বেশিরভাগ মোড আইমনুকে সমর্থন করেM-ximenuআপনাকে নাম দিয়ে কোনও ফাংশন সংজ্ঞা (ইত্যাদি) এ যেতে দেবে। ফাংশনগুলির একটি মেনু পেতে আপনি এটি একটি মাউস ক্লিকের সাথেও আবদ্ধ করতে পারেন (বা এটি মেনুবারে যুক্ত করুন; আরও তথ্যের জন্য তথ্য পৃষ্ঠা দেখুন)। এটি কোন-ফাংশন-মোডের জন্য ডেটা সরবরাহ করে, যা আপনাকে মডেলিনে বর্তমানে কোন ফাংশনটির ভিতরে রয়েছে তা দেখতে দেয় let (যদিও আপনার ফাংশনগুলি এত দীর্ঘ, কেন?)

রয়েছে speedbar যা imenu তথ্য (এবং অন্যান্য জিনিস) গ্রাফিক্যালি প্রদর্শন করে,।

আপনি যদি নিজের ফাইলটির একটি ওভারভিউ পেতে চান তবে M-xoccur" চেষ্টা করুন " a ফলাফলগুলি ক্লিক করা আপনাকে ফাইলের সেই অবস্থানে নিয়ে যাবে।

যাইহোক, আপনি সত্যিকার অর্থে কী অর্জন করতে চান সে সম্পর্কে ভাবুন এবং ইমাকস সম্ভবত এটি প্রয়োগ করে। অসম্পূর্ণ সরঞ্জামগুলির সাথে লড়াই করবেন না যা আপনাকে ক্রমাগত জিনিসগুলি ভাজ করে এবং উদ্ঘাটন করে।


13
ভিম এই সমস্ত বৈশিষ্ট্যকে অন্য কোনও ফর্মেও সরবরাহ করে তবে আমি তার কোড ভাঁজ করার সুবিধাটি অমূল্য পাই।
intuited

115
আমি প্রথম বাক্যে ডাউন-ভোট দিয়েছি ("ফোল্ডিং সাধারণত ইম্যাক্স সহ অপ্রয়োজনীয়, যেমন ...")। অপরিচিত কোডের কাঠামোটি স্ক্যান করতে আমি নিয়মিত সাধারণ ভাঁজ (ইনডেন্ট স্তরের ভিত্তিতে) ব্যবহার করি।
সাইমন মাইকেল

4
এমএস হ'ল এমএক্স শর্টকাট
জোশুয়া ওলসন

3
আমি উত্তম ভোট দিয়েছি কারণ উত্তরে অনেকগুলি কার্যকর শর্টকাট কিন্তু আপ-ভোট দেওয়া হয়েছে @ সিমনমিশাল মন্তব্যও কারণ ভাঁজ / উন্মুক্ত এখনও কখনও কখনও কার্যকর হতে পারে!
অ্যাড্রিন কোকো

56
উত্তরটি ভালভাবে চিন্তা করা হয়েছিল এবং খুব তথ্যপূর্ণ ছিল। যাইহোক, ওপি জিজ্ঞাসা করেছিল যে কীভাবে কোড ফোল্ডিং করা যায়। কোড ফোল্ডিং এড়ানো সবার প্রিয় উপায়টি কী তা ওপি জিজ্ঞাসা করেনি। ডাউন ভোট দিয়েছেন।
wkschwartz

104

ফোল্ডিং ( )) ট্রিগার করতে hs-minor-modeডিফল্ট কী-বাইন্ডিং সহ লুকান-শো মোড C-c @ C-M-h( hs-hide-all)


12
এটি ভাল কাজ করে। আর মন্দ-মোড সঙ্গে, এই স্বাভাবিক তেজ কমান্ড দ্বারা আলোড়ন সৃষ্টি হয়: zR, zM, zo, zc
জাস্টিন এম কেজ

39

বিড়ালের চামড়ার অন্য উপায়:

এটি হ'ল, এর জন্য আপনার কোনও প্যাকেজ বা অতিরিক্ত কনফিগারেশন লাগবে না। শুধু যে কোনও সোর্স ফাইলে যান, টাইপ করুন

M-1 Cx $ এবং যাদু ঘটে!

যথারীতি এটি সাদা যাদু: Cx $ আপনার কোডটি ফিরিয়ে আনবে।

কি চলছে তা আবিষ্কার করতে আমরা ইমাসসের সহায়তা সিস্টেমটি ব্যবহার করতে পারি: সিএইচ কে সিএক্স $ আমাদের জানায় যে উপরের কী সংমিশ্রণটি সেট-সিলেকটিভ-ডিসপ্লে কল করছে , একটি ফাংশন যা একটি সংখ্যাসূচক যুক্তি গ্রহণ করে (এম -১ উপসর্গটি মান হিসাবে 1 পাস করে এই আর্গুমেন্টের) এবং, আশ্চর্যজনকভাবে, সেই যুক্তির মানকে পরিবর্তনশীল সিলেক্টিক-ডিসপ্লে সেট করে।

থেকে ছোটখাট Emacs মায়াবিদ্যা ব্লগ

কেবলমাত্র সম্পূর্ণতার জন্য: M-3 Cx $ আরও বেশি গভীর নেস্টেড কোড প্রদর্শন করবে।

এফডব্লিউআইডাব্লু আমি স্মিথের উপর ভিত্তি করে আজ একটি ছোট সহায়ক তৈরি করেছি। এখানে পাওয়া গেছে যাতে F5 বর্তমান কার্সার অবস্থানের উপর ভিত্তি করে কোড ভাঁজ টগল করে:

(global-set-key (kbd "<f5>") 'set-selective-display-dlw)

(defun set-selective-display-dlw (&optional level)
"Fold text indented same of more than the cursor.
If level is set, set the indent level to LEVEL.
If 'selective-display' is already set to LEVEL, clicking
F5 again will unset 'selective-display' by setting it to 0."
  (interactive "P")
  (if (eq selective-display (1+ (current-column)))
      (set-selective-display 0)
    (set-selective-display (or level (1+ (current-column))))))

22

আমি আমার পাইথন কোডটি ভাঁজ করতে আউটলাইন গৌণ মোডটি ব্যবহার করি। ভাঁজ মোডের মতো {{। এবং}} place স্থাপন করার পরিবর্তে এটি যেখানে ব্লকটি সংজ্ঞায়িত হয়েছে তা ব্যবহার করে।

http://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Mode.html http://www.emacswiki.org/emacs/OutlineMinorMode

আমি নিশ্চিত যে এটি ইমাস সহ আসে। আমি তখন এটি আমার .emacs এ যুক্ত করব

;;======= Code folding =======
(add-hook 'python-mode-hook 'my-python-outline-hook)
; this gets called by outline to deteremine the level. Just use the length of the whitespace
(defun py-outline-level ()
  (let (buffer-invisibility-spec)
    (save-excursion
      (skip-chars-forward "    ")
      (current-column))))
; this get called after python mode is enabled
(defun my-python-outline-hook ()
  ; outline uses this regexp to find headers. I match lines with no indent and indented "class"
  ; and "def" lines.
  (setq outline-regexp "[^ \t]\\|[ \t]*\\(def\\|class\\) ")
  ; enable our level computation
  (setq outline-level 'py-outline-level)
  ; do not use their \C-c@ prefix, too hard to type. Note this overides some bindings.
  (setq outline-minor-mode-prefix "\C-t")
  ; turn on outline mode
  (outline-minor-mode t)
  ; initially hide all but the headers
  ;(hide-body)
  ; make paren matches visible
  (show-paren-mode 1)
)

8
দেখে মনে হচ্ছে outline-modeইমাস 24-তে বাইরের বাইরে পাইথনকে সমর্থন করে - কাস্টম outline-levelফাংশনগুলির প্রয়োজন নেই । আমার এটিকে যুক্ত করার জন্য আমার যা প্রয়োজন তা হল user.el:(add-hook 'python-mode-hook 'outline-minor-mode)
স্কাইটেল

1
ওহ এবং আপনি অবশ্যই ওভাররাইড করতে চান outline-minor-mode-prefix- ডিফল্ট কী-বাইন্ডিংগুলি ভয়াবহ - আমি ব্যবহার করি(setq outline-minor-mode-prefix (kbd "C-;"))
স্কাইটেল

13

আপনি ডিআইডি ফাইলে নিম্নলিখিত কোডের সাথে সিডিইটি ব্যবহার করে কোড ফোল্ডিংও পেতে পারেন:

(global-semantic-folding-mode t)

এই কোডটি মূল্যায়নের পরে, ছোট ত্রিভুজটি ফ্রাইংল এরিয়ায় উপস্থিত হবে, সুতরাং আপনি এটি ব্যবহার করে কোডটি ভাঁজ করতে এবং আনফোল্ড করতে সক্ষম হবেন। এই পদ্ধতিটি আরও নির্ভুল, কারণ এটি সিনট্যাকটিক তথ্য ব্যবহার করে, উত্স কোড থেকে প্রাপ্ত


1
যদি কিছু বাগ সম্মুখীন, এই প্রশ্নে একটি চেহারা আছে stackoverflow.com/questions/15307113/...
AdrieanKhisbe

9

এইচএস-মাইনর-মোড সুন্দরভাবে কাজ করে।

ভাঁজ-দ্বিমে (আমার অর্থটি যা করুন) এর সাথে যুক্ত হলে এটি আরও বেশি সুন্দরভাবে কাজ করে। তারপরে ফোল্ড-ডুইম-ওআরজি রয়েছে যা কোড ফোল্ডিংয়ের জন্য কী-বাইন্ডিংয়ের মতো org- মোড সরবরাহ করে! উভয়ই মার্বেলের মাধ্যমে ইনস্টল করা যেতে পারে (এবং আমি মনে করি এলপা)।



5

vimish-fold এছাড়াও একটি দুর্দান্ত এবং সহজ সমাধান।

https://github.com/mrkkrp/vimish-fold

হোমপেজ থেকে:

এটি ভিমের মতো পাঠ্য ভাঁজ সম্পাদন করার জন্য একটি প্যাকেজ। এটিতে নিম্নলিখিত বৈশিষ্ট্য রয়েছে:

  • সক্রিয় অঞ্চল ভাঁজ;
  • ভাল ভিজ্যুয়াল প্রতিক্রিয়া: পাঠ্যের কোন অংশটি ভাঁজ করা যায় তা স্পষ্ট;
  • ডিফল্টরূপে অধ্যবসায়: আপনি যখন ফাইলটি বন্ধ করেন তখন আপনার ভাঁজগুলি অদৃশ্য হয় না;
  • অধ্যবসায়টি ভাল স্কেল করে, আপনি প্রতিকূল প্রভাব ছাড়াই প্রচুর ভাঁজ সহ শত শত ফাইলগুলিতে কাজ করতে পারেন;
  • এটি ইন্ডেন্টেশন বা কিছু ভঙ্গ করে না;
  • ভাঁজগুলি ভাঁজ করা অবস্থা থেকে ফোল্ডেল করা যায় এবং খুব সহজেই ফিরে যেতে পারে;
  • বিদ্যমান ভাঁজগুলির মধ্যে দ্রুত নেভিগেশন;
  • আপনি ভাঁজগুলি অনাবৃত করতে মাউস ব্যবহার করতে পারেন (নতুনদের জন্য এবং কেবল তাদের জন্য নয়);
  • অভির প্যাকেজ ভক্তদের জন্য: আপনি ন্যূনতম সংখ্যক কী স্ট্রোকের সাহায্যে পাঠ্য ভাঁজ করতে অ্যাভি ব্যবহার করতে পারেন!

চমৎকার ব্যবহার use-packageআমি ইনস্টল এবং এটা আমার কনফিগ এই স্নিপেট ব্যবহার সক্রিয় করুন:

(use-package vimish-fold
  :ensure t
  :config (vimish-fold-global-mode t))

3

আমি অবাক হয়েছি যে নুন সংকীর্ণ-প্রশস্ত হওয়ার কথা উল্লেখ করেছেন। এটি দুর্দান্ত দুর্দান্ত, এটি ইমাস সহ বান্ডিলও আসে। আপনি যে ফোকাস করতে চান তা কেবল সিলেক্ট করুন এবং টিপুন C-x n n, সম্পূর্ণ ভিউ মোডে ফিরে যেতে কেবল করুন C-x n w। আমি অন্য প্যাকেজের সাথে আমার ব্যবহারকারীর স্থানকে বিশৃঙ্খলা করার চেয়ে সর্বদা অন্তর্নির্মিত ইমাস কার্যকারিতাটি ব্যবহার করতে পছন্দ করি। যদি ইমাসগুলি এটি অন্তর্নির্মিত কার্যকারিতা সহ করতে পারে তবে আমি এটি বেশ কয়েকটি তৃতীয় পক্ষের প্যাকেজটির চেয়ে বেশি পছন্দ করব, তবে এটি কেবল আমারই নয়, জটিল দীর্ঘ কনফিগারগুলির চেয়ে সহজ জিনিসগুলি পছন্দ করতে ছাড়াও এর অর্থ বা অন্য কিছু বোঝাতে চাই না।



2

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

তবে সম্ভবত, একই পদ্ধতিতে ফোল্ডিং যেমন করা যায় - "ওভারলে" দিয়ে ... "স্ট্রিং-এর আগে" এবং "পরে-স্ট্রিং" ওভারলে বৈশিষ্ট্যগুলি বিবেচনা করুন ; সম্ভবত, আপনি এই বিন্দুতে শূন্য দৈর্ঘ্যের ওভারলে সম্পর্কিত এই স্ট্রিংগুলিতে আপনার ফাংশন সংজ্ঞাগুলি রাখতে পারেন। এ রূপরেখা-ফ্ল্যাগ-অঞ্চল ফাংশন দেখতে কিভাবে প্রতিস্থাপক রূপরেখা মোড ব্যবহার করা হয়।


2

আপনি যদি ব্যবহার করেন তবে hs-minor-modeআরও সুবিধাজনক শর্টকাট সেট করা ভাল ধারণা হতে পারে যেমন:

(eval-after-load 'hideshow
 '(progn
   (global-set-key (kbd "C-+") 'hs-toggle-hiding)))

0

আইন সেল্টসের উত্তর থেকে অনুপ্রেরণা সহ :

(পরামর্শ-যুক্ত 'সেট-নির্বাচনী-প্রদর্শন
            : ফিল্টার-আরগস (ল্যাম্বদা (আরগস)
                           (যদি (বা (গাড়ির আরগস) নির্বাচনী-প্রদর্শন)
                               args
                             (তালিকা (1+ (বর্তমান-কলাম))))
            '((নাম। কর্সার-কলাম-থেকে-নির্বাচিত-প্রদর্শন-নির্বাচিত)))

ভয়েলা, C-x $হঠাৎ কোনও ব্যবসা C-uবা M-4ব্যবসা ছাড়াই দরকারী হয়ে উঠল ।


0

আপনি যদি কিছু জাভাস্ক্রিপ্ট করছেন এবং ব্যবহার করছেন তবে আপনি এটি js2-mode.elকরতে পারেন:

C-c C-f: টগল লুকান / সমস্ত দেখান

C-c C-e: উপাদান লুকান

C-c C-s: উপাদান দেখান

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