ইমাস: কীভাবে পূর্বে চিহ্নিত অঞ্চলটিকে চিহ্নিত করতে হবে


6

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

উত্তর:


4

স্ক্রিপ্ট নিচে স্নিপেট কী-কর্ডগুলি বাঁধবে F6, C-F6, C-S-F6ব্যবস্থাপক চিহ্নিতকারী করার (মার্ক বনাম)চিহ্নিতকারীরা সরান এবং সঙ্কুচিত হয় এবং বাড়তে থাকে, আপনি তাদের চারপাশে এবং এর মধ্যে পাঠ্য পরিবর্তন করার সাথে সাথে। আপনি যে কোনও চাবি পছন্দ করতে পারেন। কোডটি আপনার ~/.emacsকনফিগার ফাইলে রাখুন ।

  • প্রথমে অন্তরঙ্গ অঞ্চলের সীমানা স্থাপন করুন (চিহ্ন - পয়েন্ট)।
  • তারপরে F6সেই অঞ্চলের সীমানায় চিহ্নিতকারী স্থাপন করতে টিপুন ।
  • আপনার যা করতে হবে তা করুন ...
  • পরিবর্তিত অঞ্চলের সীমানা টিপুন পুনরায় প্রতিষ্ঠিত করুন। C-F6* "করুন .." পুনরায় করুন প্রয়োজন হিসাবে
  • C-S-F6অঞ্চল চিহ্নিতকারীদের সাফ করার জন্য আপনি যখন ব্যবহার শেষ করেছেন ।

(global-set-key (kbd "<f6>") 'set-markers-for-region)
(defun set-markers-for-region ()
  (interactive)
  (make-local-variable 'm1)
  (make-local-variable 'm2)
  (setq m1 (copy-marker (mark)))
  (setq m2 (copy-marker (point))))

(global-set-key (kbd "<C-f6>") 'set-region-from-markers)
(defun set-region-from-markers ()
  (interactive)
  (set-mark m1)
  (goto-char m2))

(global-set-key (kbd "<C-S-f6>") 'unset-region-markers)
(defun unset-region-markers ()
  (interactive)
  (set-marker m1 nil)
  (set-marker m2 nil))

অসাধারণ! এইটা কাজ করে. আমি বেশ কয়েকবার চেষ্টা করেছি এবং এটি সর্বদা প্রত্যাশা অনুযায়ী কাজ করেছে। ধন্যবাদ।
ট্রুওং

আমি পার্টিতে আট বছর দেরি করেছি - নীচে আমার সমাধান দেখুন।
ব্যবহারকারী1404316

5

অঞ্চলটি যদি সবেচিহ্নহীন হয়ে পড়ে (যা ইমাকগুলি "নিষ্ক্রিয়" বলে ডাকে), C-xC-xএটি মন্তব্য করবে (ওরফে "পুনরায় সক্রিয়")।


3

দুর্ভাগ্যক্রমে, ইমাসগুলিতে কোনও অঞ্চল ইতিহাস বৈশিষ্ট্য নেই। ফাংশনটি রয়েছে pop-mark, যা ভেরিয়েবল থেকে নেওয়া আগের অবস্থানে চিহ্নটি পুনরুদ্ধার করে mark-ringতবে এটি বিন্দু নির্ধারণ করে না এবং এটি পুরানো অঞ্চলগুলি পুনরুদ্ধার করার জন্য অকেজো। আপনি যদি ইমাস-লিস্পে পারদর্শী হন তবে আপনি set-markকোডের সাথে ফাংশনটি পরামর্শ দিতে পারেন যা একটি অঞ্চল রিং বজায় রাখে (ভেরিয়েবলের সমান mark-ring)। তারপরে আপনি এমন কোনও pop-regionফাংশন প্রয়োগ করতে পারেন যা এর সাথে একই রকম আচরণ করে pop-mark


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

3

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


0

আপনি যদি গ্রন্থাগার ব্যবহার করেন second-sel.elতবে আপনি এটির সাহায্যে মাধ্যমিক-নির্বাচনটি ব্যবহার করতে পারেন । গৌণ নির্বাচনটি বিন্দু বা চিহ্নের সাথে সম্পর্কিত নয়, সুতরাং এটি পয়েন্ট চলমান হিসাবে স্থির থাকে (তাই হ্যাঁ, অঞ্চলটির বিপরীতে, এটি পর্দার বাইরে যেতে পারে)।

এই প্রস্তাবিত কী বাঁধাইয়ের সাথে:

(global-set-key (kbd "C-M-y") 'secondary-yank|select|move|swap)

আপনি নিম্নলিখিতটি করতে পারেন:

  1. C-1 C-M-y সেকেন্ডার অঞ্চলটিকে দ্বিতীয় পছন্দ হিসাবে নির্বাচন করতে।

  2. আপনার যা যা করা দরকার তা করুন: ঘুরুন, অন্য পাঠ্য নির্বাচন করুন (অঞ্চল পরিবর্তন করুন), যাই হোক না কেন।

  3. আপনি যখন অঞ্চলটি যেখানে সেখানে রাখতে চান সেখানে যেখানে মাধ্যমিক নির্বাচন এখনও রয়েছে, কেবল ব্যবহার করুন C-0 C-M-y

এখানেই শেষ. কেবলমাত্র C-1 C-M-yঅঞ্চলের একটি স্ন্যাপশট নিতে (গৌণ হিসাবে), এবং পরে C-0 C-M-yস্ন্যাপশটের সময় যে অঞ্চলটি ছিল তা সক্রিয় করতে।


আপনি C-- C-M-yঅঞ্চল এবং দ্বিতীয় পছন্দটি অদলবদল করতেও ব্যবহার করতে পারেন । সুতরাং উদাহরণস্বরূপ, যদি cat(সক্রিয়) অঞ্চল এবং dogমাধ্যমিক তাহলে C-- C-M-yতোলে catমাধ্যমিক ও dog(সক্রিয়) অঞ্চল।


0

নিম্নলিখিত সমাধানটিতে কেবলমাত্র একটি একক ফাংশন এবং একক কী-বাইন্ডিংয়ের প্রয়োজনীয়তা রয়েছে:

(defun my-reuse-region (unset)
  "Enable re-use of regions.

When a region is selected, save its bounds for future use.
Otherwise, activate the saved bounds. With a prefix argument,
unsets any prior saved bounds."
  (interactive "P")
  (cond
   (unset
    (makunbound 'my-reusable-mark)
    (makunbound 'my-reusable-mark))
   ((region-active-p)
     (when (not (boundp 'my-reusable-mark))
       (make-local-variable 'my-reusable-mark))
     (when (not (boundp 'my-reusable-point))
       (make-local-variable 'my-reusable-point))
     (setq my-reusable-mark (copy-marker (mark)))
     (setq my-reusable-point (copy-marker (point)))
     (message "Region bounds saved for future use."))
   (t
     (when (and (boundp 'my-reusable-mark)
                (boundp 'my-reusable-point))
       (set-mark my-reusable-mark)
       (goto-char my-reusable-point)))))

(global-set-key (kbd "C-c C-SPC") 'my-reuse-region)

দ্রষ্টব্য: আমি সত্যই নিশ্চিত নই যে উপসর্গটির সাথে ফাংশনটি কল করার জন্য একটি ব্যবহার-কেস রয়েছে; আমি এই কোডটি কেবলমাত্র বিবেকবান এবং পূর্ণরূপে যুক্ত করেছি।


0

একটি সাধারণ কর্মপ্রবাহ হ'ল narrow-to-region( C-x n n) এবং তারপরে দৃশ্যমান অঞ্চলে আপনার কার্য সম্পাদন করুন। তারপরে widen( C-x n w) আপনার কাজ শেষ হয়ে গেলে বাকী বাফারটি আবার প্রকাশ করতে।

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