স্ট্রিং থেকে নেভিগেট করার জন্য কোন কীবোর্ড শর্টকাট


9

আমি যখন নীচের মতো লুওং স্ট্রিংয়ের মাঝে থাকি

(setq Emacs-beta "Which keyboard shortcut to use for navigating out of a string")

"শর্টকাট দিয়ে আমি কি প্রথমে (ইমাসস-বিটার পরে) ঠিক আগে এড়িয়ে যেতে পারি ?


আসলেই কোনও উত্তর নয় C-r " C-b
নাম দিন

উত্তর:


12

ইমাস 25 বা আরও নতুন

আপনি চান C-M-uযা কমান্ড চালায় backward-up-list

প্রথম স্তরের প্যারেনেসিসের পিছনে সরান। এই কমান্ডটি বর্তমান ভাষা মোড দ্বারা সংজ্ঞায়িত অন্যান্য বন্ধনী-মত অভিব্যক্তিগুলিতেও কাজ করবে।

ESCAPE-STRINGS যদি নন-শূন্য হয় (যেমন এটি ইন্টারেক্টিভভাবে হয়), তবে এনকোলেসিং স্ট্রিংগুলি থেকেও বাইরে চলে যান।


আপনার উল্লেখ করা উচিত যে এটি কেবল 25 টি।
আবো-আবো

@ আবো-অ্যাবো এটি নয়: আমি এটি কেবল 24.5.1 এ পরীক্ষা করেছি। এটি কখন যুক্ত হয়েছিল তা আমি নিশ্চিত নই, তবে যদি কেউ জানতে পারে তবে আমি এটিকে সম্পাদনা করব
ন্যানি

@ আবো-আবো ওফ, আমি দুঃখিত, আপনি ঠিক বলেছেন।
আয়া

আমি সাথে আছি Emacs-24.5 -Qএকটি স্ট্রিং, কিন্তু আমি CMU সঙ্গে পেয়ে করছি: up-list: Scan error: "Unbalanced parentheses"?
ডিয়েটার.ভিলহেল্ম

1
@ ডিয়েটার.ভিলহেলাম রাইট: আপনি আমার মন্তব্য এবং সম্পাদনা দ্বারা দেখতে পাচ্ছেন, আমার ভুল হয়েছিল। এটি কেবল ইমাস 25 বা আরও নতুনতে কাজ করবে।
আয়া

3

এটি এর মতো করণীয়:

(defun exit-string-backwards ()
  (interactive)
  (goto-char (nth 8 (syntax-ppss))))

ইন lispy-মোড , টিপে [ধারণকারী তালিকার শুরুর আনতে কোন স্ট্রিং থেকে প্রস্থান করা হবে। আপনি যখন তালিকার শুরুতে চলে আসেন, আপনি অন্যান্য অংশগুলিতে সহজেই পৌঁছাতে পারবেন, উদাহরণস্বরূপ, Emacs-betaটিপে শেষের দিকে যেতে 2m


1

এটি আসলে একটি খুব আকর্ষণীয় ইমাস লিস্প প্রোগ্রামিং প্রশ্ন। কার্সারের অধীনে থাকা অক্ষরটি স্ট্রিংয়ের অংশ না পাওয়া পর্যন্ত আমরা ফরোয়ার্ড-চর বা পিছনে-চর রাখতে পারি।

অক্ষরের স্ট্রিংয়ের ভিতরে রয়েছে কিনা তা স্থির করতে আপনি ফন্টের মুখ ব্যবহার করতে পারেন। এটি ফ্লাইস্পেল থেকে শিখেছি দুর্দান্ত কৌশল। তাত্ত্বিকভাবে এটি নিখুঁত নয়, তবে বাস্তব বিশ্বে এটি Emacs23, Emacs24, Emacs25 এ প্রায় কোনও প্রোগ্রামিং ভাষার প্রধান মোডগুলির সাথে কাজ করে

এখানে সম্পূর্ণ কোডটি রয়েছে:

(defun font-face-is-similar (f1 f2)
  (let (rlt)
    ;; (message "f1=%s f2=%s" f1 f2)
    ;; in emacs-lisp-mode, the '^' from "^abde" has list of faces:
    ;;   (font-lock-negation-char-face font-lock-string-face)
    (if (listp f1) (setq f1 (nth 1 f1)))
    (if (listp f2) (setq f2 (nth 1 f2)))

    (if (eq f1 f2) (setq rlt t)
      ;; C++ comment has different font face for limit and content
      ;; f1 or f2 could be a function object because of rainbow mode
      (if (and (string-match "-comment-" (format "%s" f1)) (string-match "-comment-" (format "%s" f2)))
          (setq rlt t)))
    rlt))

(defun goto-edge-by-comparing-font-face (&optional step)
"Goto either the begin or end of string/comment/whatever.
If step is -1, go backward."
  (interactive "P")
  (let ((cf (get-text-property (point) 'face))
        (p (point))
        rlt
        found
        end)
    (unless step (setq step 1)) ;default value
    (setq end (if (> step 0) (point-max) (point-min)))
    (while (and (not found) (not (= end p)))
      (if (not (font-face-is-similar (get-text-property p 'face) cf))
          (setq found t)
        (setq p (+ p step))))
    (if found (setq rlt (- p step))
      (setq rlt p))
    ;; (message "rlt=%s found=%s" rlt found)
    (goto-char rlt)))

ব্যবহার:

  • (goto-edge-by-comparing-font-face 1)ডান প্রান্তে (goto-edge-by-comparing-font-face -1)যান, বাম প্রান্তে যান
  • এটি কোনও নির্দিষ্ট মেজর-মোডের উপর নির্ভরশীল নয়, আপনি এটিকে যে কোনও ভাষাতেই ব্যবহার করতে পারেন

backward-up-listব্যবহারকারীর দৃষ্টিকোণ থেকে খুব নির্ভরযোগ্য নয় কারণ এটি ভিত্তিক জেনেরিক কমান্ড হিসাবে নকশা করা হয়েছে scan-sexps। উদাহরণস্বরূপ, if (true) { return 'hello world'; }জেএস 2-মোডে কোডের জন্য , এটি {প্রথম একক উদ্ধৃতি অক্ষরের পরিবর্তে অক্ষরে অক্ষরে মনোনিবেশ করবে । printf("hello world")সি ++ - মোডে কোডের জন্য , এটি কাজ করবে না। আমি ইমাস 24.5 দিয়ে পরীক্ষা করেছি


এটি ডান প্রান্তে চলে যায়, ওপিকে বাম প্রান্তের আগে বিন্দুতে জিজ্ঞাসা করেছে। লিস্প-মোডটি সক্রিয় না হলে কী হবে?
নাম

(গেটো-এজ-বাই-তুলনা-ফন্ট-মুখ -১) বাম প্রান্তে যান, backward-charবা forward-charযদি আপনি কার্সারটিকে প্রান্তের পাশ থেকে সরান।
চেন বিন

ঠিক আছে, দুর্দান্ত ধারণা, তবে আপনি যদি টেক্সট-মোডটি সক্রিয় করা হয় তখন এটি চালান, পয়েন্টগুলি পরে যায় )। সুতরাং মোডের উপর নির্ভর করে আপনার কোডের বিভিন্ন আচরণ রয়েছে।
নাম

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

0

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

  • ইনস্টল করুন iy-go-to-char(মেলপাতেও উপলভ্য)।
  • বাঁধুন iy-go-to-char-backwardএবং iy-go-to-charআপনার পছন্দসই বাঁধাই। এই ব্যাখ্যা অনুরোধে জন্য, এর আপনি আবদ্ধ বলা যাক iy-go-to-char-backwardকরতে C-c C-,এবং iy-go-to-charকরতে C-c C-.
  • এখন আপনি যদি স্ট্রিংয়ের ভিতরে থাকেন তবে আপনি কল করে iy-go-to-char-backwardটাইপ করবেন "

    যে মত দেখতে হবে C-c C-, "। আপনি যদি (ডিফল্ট) iy-go-to-char-continue-when-repeatingসেট করে tরেখেছেন, "আবার একবার চাপলে আপনি তার "আগে একটি চরিত্রের ঘটনা ঘটাতে পারবেন, ইত্যাদি।

  • আপনি যদি স্ট্রিংয়ের ভিতরে থাকেন এবং আপনি যদি এখন স্ট্রিংয়ের শেষে যেতে চান তবে আপনি কল করে iy-go-to-charটাইপ করবেন "

    যে মত দেখতে হবে C-c C-. "। আপনি যদি (ডিফল্ট) iy-go-to-char-continue-when-repeatingসেট করে tরেখেছেন, "আবার একবার চাপলে আপনি পরবর্তী "চর সংঘটিত হবেন ।

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