ম্যাচিং বন্ধনী কীভাবে প্রতিস্থাপন করবেন?


10

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

উদাহরণস্বরূপ, একবারে বাইরের সীমানা পরিবর্তন করুন:

( (\sqrt{a} + b)^{-1} + c^{-1} )

প্রতি

[ (\sqrt{a} + b)^{-1} + c^{-1} ]

2
উল্লেখ্য এটি যদি এই ধরনের কোড পরিবর্তন হতে পারে যেমন আকর্ষণীয় হবে \bigl(...\bigr)থেকে \Bigl(...\Bigr)ইত্যাদি
অ্যান্ড্রু সোয়ান

1
এখানে আমি পিইজি: emacs.stackexchange.com/questions/36541/… ব্যবহার করে সরলিকৃত লটেক্স ব্যাকরণের একটি উদাহরণ দিয়েছি এই সমস্যাটির কাছে যাওয়ার এই এক উপায় হতে পারে।
wvxvw

@wvxvw যখন আমি এই প্রশ্নটি লিখেছিলাম তখন আমি আপনার পদ্ধতির দিকে নজর রেখেছিলাম এবং সত্যই এটি আকর্ষণীয় দেখাচ্ছে! এছাড়াও আশা করি কিছু আছে, সম্ভবত সহজ, খুব আছে। ইমা্যাকগুলি হাইলাইট হওয়ার কারণে ম্যাচিং ডিলিমিটার সম্পর্কে ইতিমধ্যে সচেতন। এই কি লাভ হতে পারে?
মানক্কা


ইমাকস ম্যাচিং ডিলিমিটারটি হাইলাইট করতে জানেন কারণ মোড প্রয়োগগুলি forward-sexp-function(যা আমি টেক্স এক্স মোডে অনুমান করছি), অথবা এটি scan-sexpsসম্ভাব্য ম্যাচটি সন্ধান করতে ব্যবহার করবে । পরবর্তী ক্ষেত্রে, ম্যাচটি সর্বদা সঠিক হবে না। সুতরাং, আপনার যদি প্রয়োজন কেবল ডিলিমিটারগুলির সাথে মিলে যাওয়া হয় তবে আপনি পয়েন্টের নীচে অক্ষরের বাক্য গঠনটি পরীক্ষা করতে পারেন। যদি এটি হয় $তবে এটির একটি মিল থাকতে হবে এবং আপনি forwad-sexpএটির ম্যাচটি পেতে ব্যবহার করতে পারেন ।
wvxvw

উত্তর:


2

smartparensপ্যাকেজ ব্যবহার করুন । এটিতে একটি ফাংশন অন্তর্ভুক্ত রয়েছে sp-rewrap-sexpযা আপনার প্রয়োজনের মতো। প্রকল্পের হোমপেজ ( https://github.com/Fuco1/smartparens ) এর কিছু কার্যকরীতা স্পষ্টভাবে কার্যকারিতা দেখায় g


7

যারা মন্দ ব্যবহার করে তাদের জন্য আপনি মন্দ-চারপাশ ব্যবহার করতে পারেন যা আপনাকে c sগতি দেয় (পরিবর্তন, চারপাশে)।

আপনার উদাহরণের জন্য তবে ঠিক করুন c s ( [(গতি, পেরেনের ধরণ থেকে পেরেনের ধরণে)


ঠিক যেটা আমার দরকার ছিল!!! ধন্যবাদ!
হিলম্যান

6

আমি নীচের কোডটি ব্যবহার করি এবং আবদ্ধ yf/replace-or-delete-pairহই M-D

ব্যবহারের উদাহরণ: পয়েন্ট অন সহ (, আমি আঘাত করি M-D [এবং ()জুটি একটি []জুটি হয়। আপনি যদি M-D RETপরিবর্তে আঘাত করেন , তবে জুটিটি সরানো হবে।

এই কোডটি সিনট্যাক্স টেবিলটি ব্যবহার করে যার অর্থ কয়েকটি জোড়ার জন্য আপনাকে নিজের সমাপ্তি পেরেনটি নির্দিষ্ট করতে হবে। যেমন এইচটিএমএল-মোডে, আঘাত করে ()প্রতিস্থাপন করা যেতে পারে । তবে অনেকগুলি মোডে কোনও স্বীকৃত জুটি হয় না এবং বলবে "কীভাবে বন্ধ করতে হয় তা জানেন না" "। তারপরে আপনি কেবল টাইপ করতে পারেন ।<>M-D <<>M-D <>

(defun yf/replace-or-delete-pair (open)
  "Replace pair at point by OPEN and its corresponding closing character.
The closing character is lookup in the syntax table or asked to
the user if not found."
  (interactive
   (list
    (read-char
     (format "Replacing pair %c%c by (or hit RET to delete pair):"
             (char-after)
             (save-excursion
               (forward-sexp 1)
               (char-before))))))
  (if (memq open '(?\n ?\r))
      (delete-pair)
    (let ((close (cdr (aref (syntax-table) open))))
      (when (not close)
        (setq close
              (read-char
               (format "Don't know how to close character %s (#%d) ; please provide a closing character: "
                       (single-key-description open 'no-angles)
                       open))))
      (yf/replace-pair open close))))

(defun yf/replace-pair (open close)
  "Replace pair at point by respective chars OPEN and CLOSE.
If CLOSE is nil, lookup the syntax table. If that fails, signal
an error."
  (let ((close (or close
                   (cdr-safe (aref (syntax-table) open))
                   (error "No matching closing char for character %s (#%d)"
                          (single-key-description open t)
                          open)))
        (parens-require-spaces))
    (insert-pair 1 open close))
  (delete-pair)
  (backward-char 1))

2

ar-parentized2bracketed-atpt কাজটি করতে হবে।

এটি পাশাপাশি ar-braced2parentized-atptএবং মূলত সমস্ত সম্পর্কিত সংমিশ্রণে আসে ।

এর টেকট্যাপ-ট্রান্সফর্ম-ডিলিমেটেড.এল থেকে এটি পান

ইউআরএল: https://github.com/andreas-roehler/thing-at-Point-utils

আদেশগুলির একটি বিমূর্ত শ্রেণি সমস্ত সীমিত আকারগুলিকে রূপান্তর করে, উদাহরণস্বরূপ:

ar-delimited2bracketed-atpt

এই কমান্ডগুলি একই রেপো দ্বারা সরবরাহ করা হয়

thingatpt-রুপান্তর-জেনেরিক-delimited.el


0

ম্যাচিং বন্ধনীর সাথে ভিজ্যুয়ালাইজ করা হয় show-paren-mode। যৌক্তিক পদ্ধতির অর্থ হ'ল প্যারেন্সকে একই অন্তর্নিহিত যুক্তি এবং ফাংশনে পরিবর্তিত করা। প্যারেনের সাথে মিলে যখন হাইলাইট হয়, আপনি toggle-parensনীচে সংজ্ঞায়িত ফাংশনটি কল করতে পারেন :

(defun toggle-parens ()
  "Toggle parens () <> [] at cursor.

Turn on `show-paren-mode' to see matching pairs of parentheses
and other characters in buffers. This function then uses the same
function `show-paren-data-function' to find and replace them with
the other pair of brackets.

This function can be easily modified and expanded to replace
other brackets. Currently, mismatch information is ignored and
mismatched parens are changed based on the left one."
  (interactive)
  (let* ((parens (funcall show-paren-data-function))
         (start (if (< (nth 0 parens) (nth 2 parens))
                    (nth 0 parens) (nth 2 parens)))
         (end (if (< (nth 0 parens) (nth 2 parens))
                  (nth 2 parens) (nth 0 parens)))
         (startchar (buffer-substring-no-properties start (1+ start)))
         (mismatch (nth 4 parens)))
    (when parens
      (pcase startchar
        ("(" (toggle-parens--replace "[]" start end))
        ("[" (toggle-parens--replace "()" start end))))))

(defun toggle-parens--replace (pair start end)
  "Replace parens with a new PAIR at START and END in current buffer.

A helper function for `toggle-parens'."
  (goto-char start)
  (delete-char 1)
  (insert (substring pair 0 1))
  (goto-char end)
  (delete-char 1)
  (insert (substring pair 1 2)))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.