আমি যখন নীচের মতো লুওং স্ট্রিংয়ের মাঝে থাকি
(setq Emacs-beta "Which keyboard shortcut to use for navigating out of a string")
"
শর্টকাট দিয়ে আমি কি প্রথমে (ইমাসস-বিটার পরে) ঠিক আগে এড়িয়ে যেতে পারি ?
আমি যখন নীচের মতো লুওং স্ট্রিংয়ের মাঝে থাকি
(setq Emacs-beta "Which keyboard shortcut to use for navigating out of a string")
"
শর্টকাট দিয়ে আমি কি প্রথমে (ইমাসস-বিটার পরে) ঠিক আগে এড়িয়ে যেতে পারি ?
উত্তর:
আপনি চান C-M-u
যা কমান্ড চালায় backward-up-list
।
প্রথম স্তরের প্যারেনেসিসের পিছনে সরান। এই কমান্ডটি বর্তমান ভাষা মোড দ্বারা সংজ্ঞায়িত অন্যান্য বন্ধনী-মত অভিব্যক্তিগুলিতেও কাজ করবে।
ESCAPE-STRINGS যদি নন-শূন্য হয় (যেমন এটি ইন্টারেক্টিভভাবে হয়), তবে এনকোলেসিং স্ট্রিংগুলি থেকেও বাইরে চলে যান।
Emacs-24.5 -Q
একটি স্ট্রিং, কিন্তু আমি CMU সঙ্গে পেয়ে করছি: up-list: Scan error: "Unbalanced parentheses"
?
এটি এর মতো করণীয়:
(defun exit-string-backwards ()
(interactive)
(goto-char (nth 8 (syntax-ppss))))
ইন lispy-মোড , টিপে
[ধারণকারী তালিকার শুরুর আনতে কোন স্ট্রিং থেকে প্রস্থান করা হবে। আপনি যখন তালিকার শুরুতে চলে আসেন, আপনি অন্যান্য অংশগুলিতে সহজেই পৌঁছাতে পারবেন, উদাহরণস্বরূপ, Emacs-beta
টিপে শেষের দিকে যেতে 2m।
এটি আসলে একটি খুব আকর্ষণীয় ইমাস লিস্প প্রোগ্রামিং প্রশ্ন। কার্সারের অধীনে থাকা অক্ষরটি স্ট্রিংয়ের অংশ না পাওয়া পর্যন্ত আমরা ফরোয়ার্ড-চর বা পিছনে-চর রাখতে পারি।
অক্ষরের স্ট্রিংয়ের ভিতরে রয়েছে কিনা তা স্থির করতে আপনি ফন্টের মুখ ব্যবহার করতে পারেন। এটি ফ্লাইস্পেল থেকে শিখেছি দুর্দান্ত কৌশল। তাত্ত্বিকভাবে এটি নিখুঁত নয়, তবে বাস্তব বিশ্বে এটি 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
যদি আপনি কার্সারটিকে প্রান্তের পাশ থেকে সরান।
)
। সুতরাং মোডের উপর নির্ভর করে আপনার কোডের বিভিন্ন আচরণ রয়েছে।
এখানে আরও একটি উপায় রয়েছে (যা আমি আরও বেশি ব্যবহার করতে চাই) কেবল বিভিন্নতার জন্য। সমাধানটি স্ট্রিংগুলির সাথে সুনির্দিষ্ট নয় তবে এটি ব্যবহারের ক্ষেত্রেও এটি কার্যকরভাবে কাজ করে।
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
রেখেছেন, "
আবার একবার চাপলে আপনি পরবর্তী "
চর সংঘটিত হবেন ।
C-r " C-b
।