লাইনের শেষ দিকে চলতে থাকুন


9

কী বাঁধাইয়ের ডিফল্টটি কেবল C-a/C-eএকটি জিনিসের জন্য হয়, লাইনের শুরু / শেষ দিকে যান, এমন কোনও প্যাকেজ রয়েছে যা ইমাসকে এটির মতো কাজ করতে পারে:

  1. যদি আমি কোনও লাইনের শেষে না থাকি C-eতবে লাইনটির শেষ প্রান্তে যাব, অন্যথায়, পরবর্তী লাইনের শেষে যাবে
  2. যদি আমি কোনও লাইনের শুরুতে না থাকি C-aতবে লাইনটির শুরুতে যাব, অন্যথায় পরবর্তী লাইনের শুরুতে যাব।

বিন্দু আপনি শুধু আঘাত বজায় রাখার ইচ্ছা থাকে C-a/eনাগালের আপনার আঙুল চলন্ত ছাড়া প্রত্যেক লাইনের শুরুতে / শেষ যেতে C-n/p

এবং একটি উপসর্গ ( C-u) দিয়ে তারা বিপরীত দিকের লাইনের শুরু / শেষ দিকে যাবে।


@ কৌশালমোদি নীচের উত্তরে একটি মন্তব্যে উল্লেখ করেছেন যে আমি আপনার প্রশ্নের ভুল ব্যাখ্যা করতে পারি। আপনি কি C-a"উপরে" C-eযেতে এবং "নীচে" যেতে চান? অন্য কথায়, আইটেম 1 এবং 2 এ "পরবর্তী পংক্তির" অর্থ কি একই?
কনস্টান্টাইন

@ কনস্ট্যান্টাইন আমি এই প্রশ্নটি পোস্ট করার সময় আমি আসলে " C-aটু আপ এবং C-eডাউন" সমস্যাটি সম্পর্কে চিন্তাভাবনা করেছি, তবে তখন আমি ভেবেছিলাম যে কেউ যদি defunআপনার মতো সমাধান দেয় তবে যে কেউ C-a"আপ" পছন্দ করতে চাইলে কী করতে হবে তা জানতে পারে ..
কোডিচান

ঠিক আছে; আমি মনে করি এটি এখনও ঠিক করা মূল্যবান। আমি উত্তরটি আপডেট করব - এটি কেবল একটি লাইন পরিবর্তন।
কনস্টান্টাইন

উত্তর:


11

আমি এমন কোনও প্যাকেজ সম্পর্কে জানি না যা এই আচরণটি সক্ষম করবে, তবে এটি করার একটি উপায় এখানে।

C-h k C-aযে C-aআবদ্ধ এটি আবিষ্কার করতে টিপুন move-beginning-of-line; এটি আমাদের ফাংশনটি সংশোধন করতে হবে --- বা "শুরুতে সরানো" অংশটি বাস্তবায়নের জন্য ব্যবহার করুন। একইভাবে, C-h kআমি খুঁজে পেতে পারি forward-line, যা উপরে / নিচে সরাতে ব্যবহৃত হবে।

একটি কীতে কোনও ফাংশন বাঁধতে সক্ষম হতে আমাদের এটিকে একটি কমান্ড তৈরি করতে হবে , সুতরাং আমাদের interactiveবিশেষ ফর্মটি ব্যবহার করতে হবে ( ইন্টারেক্টিভ ব্যবহার করে দেখুন )। C-uউপসর্গ যুক্তি নিতে আমাদের "P"কোড অক্ষর প্রয়োজন ।

এটির bolp(এক লাইনের শুরুতে কিনা তা পরীক্ষা করে দেখুন) এবং eolp(একটি লাইনের শেষে রয়েছে কিনা তা পরীক্ষা করে ) এর সাথে একত্রিত করে আমরা লিখতে পারি:

(defun my-move-beginning-of-line (arg)
  (interactive "P")
  (when (bolp) (previous-line (if arg -1 1)))
  (move-beginning-of-line nil))

(defun my-move-end-of-line (arg)
  (interactive "P")
  (when (eolp) (forward-line (if arg -1 1)))
  (move-end-of-line nil))

এখন আমরা পুনরায় বাঁধাই করতে পারি C-aএবং C-eএগুলি কল করতে পারি:

(global-set-key [remap move-beginning-of-line] #'my-move-beginning-of-line)
(global-set-key [remap move-end-of-line] #'my-move-end-of-line)

অন্যথা, এক পারে পরামর্শ যোগ করার move-beginning-of-lineএবং move-end-of-line


এটি সত্যই একটি ভাল ব্যাখ্যা এবং একটি মার্জিত সমাধান। সেখানে টাইপো এর my-move-beginning-of-lineফাংশন .. এটি হওয়া উচিত (previous-line (if arg -1 1))বা (forward-line (if arg 1 -1))(1 এবং -1 সুইচড)?
কুশল মোদী

@কৌশলমোদি: প্রশ্নে আইটেম 1 এবং 2 উভয়ই "নেক্সট লাইন" বলে, যা আমি "ডাউন" হিসাবে ব্যাখ্যা করেছি। সুতরাং, আসুন প্রশ্নের লেখক জিজ্ঞাসা করা যাক! :-)
কনস্টান্টাইন

আহ, আমি ওপির প্রশ্নের সাথে আমার নিজের অনুমান যুক্ত করেছি। আপনি ঠিকই বলেছেন, তিনি পরের লাইনে যাওয়ার জন্য নির্দিষ্টভাবে উল্লেখ করেন C-aবা হয় ব্যবহার করার সময় C-e
দক্ষ মোদী

@ কৈশালমোদি: দেখা যাচ্ছে যে আপনি ঠিক ছিলেন! আমি C-a"আপ" করতে উত্তর আপডেট করেছি ।
কনস্টান্টাইন

8

লাইব্রেরিতে misc-cmds.elদীর্ঘকাল এই বৈশিষ্ট্য রয়েছে।

এগুলি সম্পর্কিত কমান্ডগুলি এবং প্রস্তাবিত কী বাইন্ডিংগুলি (এই বাইন্ডিংগুলি অন্তর্নির্মিত হয় setup-keys.el)।

(cond ((fboundp 'move-beginning-of-line)
       (substitute-key-definition 'move-beginning-of-line 'beginning-of-line+ global-map)
       (substitute-key-definition 'move-end-of-line 'end-of-line+ global-map))
      (t
       (substitute-key-definition 'beginning-of-line 'beginning-of-line+ global-map)
       (substitute-key-definition 'end-of-line 'end-of-line+ global-map)))
(when (boundp 'visual-line-mode-map)
  (define-key visual-line-mode-map [remap move-beginning-of-line] nil)
  (define-key visual-line-mode-map [remap move-end-of-line]       nil)
  (define-key visual-line-mode-map [home] 'beginning-of-line+)
  (define-key visual-line-mode-map [end]  'end-of-line+)
  (define-key visual-line-mode-map "\C-a" 'beginning-of-visual-line+)
  (define-key visual-line-mode-map "\C-e" 'end-of-visual-line+)))

এখানে যা C-h f end-of-line+বলা হয়েছে, তার একটি উদাহরণ হিসাবে:

end-of-line+ is an interactive compiled Lisp function in
`misc-cmds.el'.

It is bound to C-e, end.

(end-of-line+ &optional N)

Move cursor to end of current line or end of next line if repeated.
This is similar to `end-of-line', but:
  If called interactively with no prefix arg:
     If the previous command was also `end-of-line+', then move to the
     end of the next line.  Else, move to the end of the current line.
  Otherwise, move to the end of the Nth next line (Nth previous line
     if N<0).  Command `end-of-line', by contrast, moves to the end of
     the (N-1)th next line.

এটা খুব মার্জিত।
স্যানিটিনিক

1

নিম্নলিখিত দুটি ফাংশন পছন্দসই কর্ম সম্পাদন করে।

(defun move-beginning-of-line-or-previous (&optional pre)
  "Move to the start of the line. If we are already at the start
of the line, move to the start of the previous line or, if called 
with a prefix argument, the next line."
  (interactive "P")
  (let* ((pos (point)))
    (move-beginning-of-line nil)
    (if (= (point) pos)
        (if pre
            (next-line)
          (previous-line)))))

(defun move-end-of-line-or-next (&optional pre)
  "Move to the end of the line. If we are already at the end of
the line, move to the end of the next line or, if called with a 
prefix argument, the previous line."
  (interactive "P")
  (let* ((pos (point)))
    (move-end-of-line nil)
    (if (= (point) pos)
        (if pre
            (previous-line)
          (next-line)))))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.