আমি ইমাসে কীভাবে একটি সম্পূর্ণ লাইনের সদৃশ করব?


155

আমি ভিআইএম-এর জন্য এই একই প্রশ্নটি দেখেছি এবং এটি এমন একটি বিষয় যা আমি নিজেও জানতে চেয়েছিলাম ইমাসদের জন্য কীভাবে করা যায়। রিশার্পারে আমি এই ক্রিয়াটির জন্য সিটিআরএল-ডি ব্যবহার করি। ইমাক্সে এটি সম্পাদন করার জন্য সর্বনিম্ন কতটি আদেশ রয়েছে?


2
অবশ্যই এটি ইম্যাকস তাই টিএমটিউডিটিডিআই - আছে 22! (এবং গণনা) c2.com/cgi/wiki?ThereIsMoreThanOneWayToDoIt
টম

উত্তর:


150

আমি ব্যবহার করি

C-a C-SPACE C-n M-w C-y

যা ভেঙে যায়

  • C-a: কার্সারটি লাইনের শুরুতে সরান
  • C-SPACE: একটি নির্বাচন শুরু করুন ("চিহ্নিত চিহ্ন")
  • C-n: কার্সারটি পরের লাইনে সরান
  • M-w: অনুলিপি অঞ্চল
  • C-y: পেস্ট ("ইয়াঙ্ক")

উপরোক্ত

C-a C-k C-k C-y C-y

একই জিনিস সমান (TMTOWTDI)

  • C-a: কার্সারটি লাইনের শুরুতে সরান
  • C-k: কাটা ("হত্যা") লাইন
  • C-k: নিউলাইন কেটে দিন
  • C-y: পেস্ট করুন ("ইয়াঙ্ক") (আমরা আবার স্কোয়ারে ফিরে এসেছি)
  • C-y: আবার পেস্ট করুন (এখন আমরা লাইনের দুটি কপি পেয়েছি)

এটি উভয়ই C-dআপনার সম্পাদকের তুলনায় বিব্রতকরভাবে ভার্বোজ , তবে ইমাসে সর্বদা একটি কাস্টমাইজেশন থাকে। ডিফল্ট দ্বারা C-dআবদ্ধ delete-char, তাই কিভাবে C-c C-d? আপনার নিম্নলিখিতটিতে কেবল যুক্ত করুন .emacs:

(global-set-key "\C-c\C-d" "\C-a\C- \C-n\M-w\C-y")

(@ নাথনের এলিস্প সংস্করণ সম্ভবত পছন্দনীয়, কারণ কী বাইন্ডিংগুলির কোনও পরিবর্তন করা থাকলে তা ভাঙবে না))

সাবধানতা: কিছু ইমাক্স মোড C-c C-dঅন্য কিছু করতে পুনরায় দাবি করতে পারে।


5
ওহে! সচেতন হন যে আপনার যদি '(setq কিল-পুরো-লাইন টি) থাকে তবে আপনার কেবলমাত্র একটি' সিকে '(সমাধান 2) লাগবে কারণ এটি ইতিমধ্যে লাইনের সামগ্রীর সাথে নিউলাইনটিকে হত্যা করে। আমার 'সি-কে' ব্যবহারের পছন্দ বেশি। চিয়ার্স, ড্যানিয়েল
danielpoe

179
এটি সত্যই বিব্রতকর।
tofutim

18
কি হবে C-S-backspace C-y C-y?
এরিকজমা

1
মেগাওয়াট কি? এর জন্য কোন কীটি ব্যবহার করবেন?
বালা

4
@ বালা "এম" হ'ল "মেটা" (সাধারণত এসকি বা আল্ট এটি আপনার কীবোর্ড বিন্যাসের উপর নির্ভর করে)। "এমডব্লু" হ'ল "মেটা" এবং "ডাব্লু" একই সাথে (আমার কীবোর্ডে "আল্ট-ডাব্লু")।
ক্রিস কনওয়ে

96

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

(defun duplicate-line()
  (interactive)
  (move-beginning-of-line 1)
  (kill-line)
  (yank)
  (open-line 1)
  (next-line 1)
  (yank)
)
(global-set-key (kbd "C-d") 'duplicate-line)

আমি এটি দিয়ে নিম্নলিখিত ত্রুটিটি Symbol's function definition is void: move-beginning-of-line
পাচ্ছি

5
এটির সাথে সমস্যাটি হ'ল "ডেল" কীটিও লাইনটি নকল করার সাথে আবদ্ধ ...
ডেভিড গমেস

সুতরাং, Delএই ফাংশন থেকে কীভাবে আন-বাঁধাই করা যায় তার কোনও ধারণা ?
আলেকজান্ডার শ্যাচব্লিকিন

ঠিক আছে, প্রত্যাবর্তন একটি সমাধান পাওয়া Delস্বাভাবিক অবস্থায় ফিরিয়ে যখন পালন নতুন C-d: (global-set-key (kbd "<delete>") 'delete-char)চাহিদা পরে যোগ করা C-dসংজ্ঞা।
আলেকজান্ডার শ্যাচব্লিকিন

খালি লাইনে চেষ্টা করার ফলে কেবলমাত্র একটি পরিবর্তে দুটি লাইন সন্নিবেশিত হয়। কেন জানি না। একটি সহজ ফিক্স আছে কি?
জেলফির কাল্টসটহল

68

কার্সারটিকে লাইনে রাখুন, যদি শুরুতে না হয় তবে CTRL-A তবে,

CTRL-K

CTRL-K

CTRL-Y

CTRL-Y


আমি মনে করি না দ্বিতীয় সিওয়াইয়ের দরকার আছে।
বস্টিয়েন লোনার্ড

4
এটি ডুপ্লিকেট ছাড়া হবে না
এপ্যাটেল

17
সি-এর পরিবর্তে সিএস-ব্যাকস্পেস (কিল-পুরো-লাইন) ব্যবহার করুন। আপনাকে কার্সার অবস্থান বা নিউলাইনটি মেরে ফেলতে হবে না।
নিটেচে-জৌ

এটি দুর্দান্তভাবে কাজ করে তবে এটি করার কোনও ছোট উপায় নেই?
স্ট্রাইকার

52

আমার ফাংশনটির সংস্করণ এমন একটি লাইন নকল করে যা পূর্বাবস্থায় ফিরে আসে এবং কার্সারের অবস্থানের সাথে গোলযোগ না করে। এটি 1997 সালের নভেম্বর থেকে gnu.emacs.s উত্সে আলোচনার ফলাফল ছিল ।

(defun duplicate-line (arg)
  "Duplicate current line, leaving point in lower line."
  (interactive "*p")

  ;; save the point for undo
  (setq buffer-undo-list (cons (point) buffer-undo-list))

  ;; local variables for start and end of line
  (let ((bol (save-excursion (beginning-of-line) (point)))
        eol)
    (save-excursion

      ;; don't use forward-line for this, because you would have
      ;; to check whether you are at the end of the buffer
      (end-of-line)
      (setq eol (point))

      ;; store the line and disable the recording of undo information
      (let ((line (buffer-substring bol eol))
            (buffer-undo-list t)
            (count arg))
        ;; insert the line arg times
        (while (> count 0)
          (newline)         ;; because there is no newline in 'line'
          (insert line)
          (setq count (1- count)))
        )

      ;; create the undo information
      (setq buffer-undo-list (cons (cons eol (point)) buffer-undo-list)))
    ) ; end-of-let

  ;; put the point in the lowest line and return
  (next-line arg))

তারপরে আপনি এই ফাংশনটি কল করতে CTRL-D সংজ্ঞায়িত করতে পারেন:

(global-set-key (kbd "C-d") 'duplicate-line)

অসাধারণ! পূর্বাবস্থায় ফেরানো এবং কার্সার অবস্থানের বৈশিষ্ট্য এটিকে সেরা করে তোলে। ধন্যবাদ!
ptrn

এছাড়াও, লিঙ্কে অঞ্চলগুলির জন্যও কিছু কোড রয়েছে!
প্যাকারভালহো

খুব সুন্দর সমাধান। থেক্স
প্লানকালাল

দুর্দান্ত কাজ করে। সমাধানের জন্য ধন্যবাদ।
স্ট্রাইকার

@peche crux-duplicate-current-line-or-regionআমার জন্য আরও ভাল কাজ করে, কারণ আপনার ফাংশনটির সাথে এটি লাইন সদৃশ এবং শেষ অপারেশনটিকেও পূর্বাবস্থায় ফিরিয়ে দেয়।
রফ্রোল

47

kill-line( C-k) এর পরিবর্তে কমান্ডটি C-a C-k C-k C-y C-y ব্যবহার করুন kill-whole-line:

C-S-Backspace
C-y
C-y

উপরের সুবিধার মধ্যে C-kঅন্তর্ভুক্ত রয়েছে যে পয়েন্টটি লাইনের কোথায় রয়েছে তা বিবেচ্য নয় (এর বিপরীতে লাইনটি C-kশুরুতে হওয়া প্রয়োজন) এবং এটি নিউলাইনটিকেও মেরে ফেলে (আবার কিছু C-kনা করে)।


2
কুদোস @ রায়ভেগা! আমি এই সমাধানটি চেষ্টা করেছি এবং এটি চ্যাম্পের মতো কাজ করে (আমার জিএনইউ ইম্যাক্স 23.3.1 তে যাইহোক)। এই সমাধানটি কিছু লোকের পক্ষে কাজ করছে না? এটি আপনার (নিজের) প্রশ্নের সেরা উত্তর।
জেএস।

1
আপনার এই উত্তরটি সঠিক হিসাবে গ্রহণ করা উচিত। এটি আপনি যা চেয়েছিলেন ঠিক তেমন করে এবং "সর্বনিম্ন কমান্ডের" ক্ষেত্রেও।
ডিভর কিউবারিক

24

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

(defun duplicate-line-or-region (&optional n)
  "Duplicate current line, or region if active.
With argument N, make N copies.
With negative N, comment out original line and use the absolute value."
  (interactive "*p")
  (let ((use-region (use-region-p)))
    (save-excursion
      (let ((text (if use-region        ;Get region if active, otherwise line
                      (buffer-substring (region-beginning) (region-end))
                    (prog1 (thing-at-point 'line)
                      (end-of-line)
                      (if (< 0 (forward-line 1)) ;Go to beginning of next line, or make a new one
                          (newline))))))
        (dotimes (i (abs (or n 1)))     ;Insert N times, or once if not specified
          (insert text))))
    (if use-region nil                  ;Only if we're working with a line (not a region)
      (let ((pos (- (point) (line-beginning-position)))) ;Save column
        (if (> 0 n)                             ;Comment out original with negative arg
            (comment-region (line-beginning-position) (line-end-position)))
        (forward-line 1)
        (forward-char pos)))))

আমি এটি আবদ্ধ C-c d:

(global-set-key [?\C-c ?d] 'duplicate-line-or-region)

এটি কখনই কোনও মোড বা কোনও কিছুর দ্বারা পুনরায় বরাদ্দ করা উচিত নয় কারণ এর C-cপরে একটি একক (অপরিশোধিত) অক্ষর ব্যবহারকারীর বাইন্ডিংয়ের জন্য সংরক্ষিত।


এখনও অবধি সেরা সমাধান
লিও উফিম্টসেভ

1
আমি এটি আমার .emacs ফাইলটিতে রেখেছি, তবে আমি যখন চেষ্টা করার চেষ্টা C-c dকরি তখন ত্রুটিটি পাই command-execute: Wrong type argument: commandp, duplicate-line-or-region। কোন ধারণা কি? আমি উইন্ডোজে
ইমাস

সত্যিই দুর্দান্ত সমাধান, আমি অঞ্চল বৈশিষ্ট্য এবং মন্তব্য-সঙ্গে-নেতিবাচক-যুক্তি বৈশিষ্ট্য প্রশংসা করি। প্রস্তাবিত কী বাইন্ডিং পছন্দ করুন।
অ্যালেক্স ট্রুম্যান

18

আপনার .emacs ফাইলটিতে নাথনের যোগ যোগ করার উপায় তবে এটি প্রতিস্থাপনের মাধ্যমে সামান্য সরল করা যেতে পারে

  (open-line 1)
  (next-line 1)

সঙ্গে

  (newline)

প্রদায়ক

(defun duplicate-line()
  (interactive)
  (move-beginning-of-line 1)
  (kill-line)
  (yank)
  (newline)
  (yank)
)
(global-set-key (kbd "C-d") 'duplicate-line)

এটা সুন্দর. ধন্যবাদ!
তেজসবুবেনে

7

মেলপা থেকে সদৃশ জিনিস ইনস্টল করুন:

এমএক্স প্যাকেজ-ইনস্টল আরটি ডুপ্লিকেট-জিনিস

এবং এই ফাইলটি কী- বাইন্ডিং যুক্ত করুন :

(গ্লোবাল-সেট-কী (কেবিডি "ম্যাক") 'সদৃশ-জিনিস)


দেখে মনে হচ্ছে এই তারিখের মধ্যে নেই।
মার্কস্কেফ

5

আমি অন্য কোথাও লাইন ডুপ্লিকেশন কীভাবে কাজ করে তা পুরোপুরি মনে নেই, তবে একজন প্রাক্তন সায়টিইই ব্যবহারকারী হিসাবে আমি সায়টিইটি-উপায় সম্পর্কে একটি জিনিস পছন্দ করেছি: এটি কার্সারের অবস্থানকে স্পর্শ করে না! সুতরাং উপরের সমস্ত রসিপিগুলি আমার পক্ষে যথেষ্ট ভাল ছিল না, এখানে আমার হিপ্পি-সংস্করণ রয়েছে:

(defun duplicate-line ()
    "Clone line at cursor, leaving the latter intact."
    (interactive)
    (save-excursion
        (let ((kill-read-only-ok t) deactivate-mark)
            (toggle-read-only 1)
            (kill-whole-line)
            (toggle-read-only 0)
            (yank))))

মনে রাখবেন যে চিহ্নগুলি এবং বর্তমান নির্বাচন অক্ষত রেখে কিছুই প্রক্রিয়াতে আসলে মারা যায় না।

বিটিডব্লিউ, আপনি কেন এত সুন্দর কার্সারকে ঘেউ ঘেউ ঘেউ ঘেউ করে দেখার মতো এত সুন্দর, কেননা এই পুরো সুন্দর লাইন লাইনের জিনিস (সিএস-ব্যাকস্পেস) আছে?


4

কারণ আমি জানি না, আমি গল্ফের এই রাউন্ডটি একটি স্লোবল দিয়ে শুরু করব:

ctrl-k, y, y


4

আপনার .emacs এ যা কিছু আপনি পেতে চান তা হ'ল

(setq kill-whole-line t)

আপনি যখনই কিল-লাইন (অর্থাত সিসি মাধ্যমে) ডাকেন তখন মূলত সম্পূর্ণ লাইনটি প্লাস্টিকের নতুন লাইনকে হত্যা করে। তারপরে অতিরিক্ত কোড ছাড়াই লাইনটি নকল করতে আপনি কেবল Ca Ck Cy Cy করতে পারেন। এটি ভেঙে যায়

C-a go to beginning of line
C-k kill-line (i.e. cut the line into clipboard)
C-y yank (i.e. paste); the first time you get the killed line back; 
    second time gives the duplicated line.

তবে আপনি যদি এটি প্রায়শই ব্যবহার করেন তবে সম্ভবত একটি উত্সর্গীকৃত কী বাঁধাই আরও ভাল ধারণা হতে পারে তবে কেবল সি সি সি সি সাই ব্যবহারের সুবিধাটি আপনি বর্তমান লাইনের ঠিক নীচে পরিবর্তে অন্য কোথাও লাইনটি নকল করতে পারেন।


4

আমি copy-from-above-commandএকটি চাবি আবদ্ধ এবং এটি ব্যবহার। এটি এক্সএম্যাক্স সহ সরবরাহ করা হয়েছে, তবে আমি জিএনইউ ইম্যাকস সম্পর্কে জানি না।

`অনুলিপি-থেকে-উপরে-আদেশ - একটি ইন্টারেক্টিভ সংকলিত লিস্প ফাংশন
-" /usr/share/xemacs/21.4.15/lisp/misc.elc "(কপি-থেকে-উপরের-কমান্ড ও alচ্ছিক এআরজি) থেকে লোড করা হয়েছে

ডকুমেন্টেশন: পূর্ববর্তী ননব্ল্যাঙ্ক লাইন থেকে অক্ষরগুলি অনুলিপি করুন , ঠিক উপরে পয়েন্ট শুরু করুন। এআরজি অক্ষরগুলি অনুলিপি করুন, কিন্তু সেই লাইনের শেষের কাছে নেই। যদি কোনও যুক্তি না দেওয়া হয় তবে লাইনটির পুরো অংশটি অনুলিপি করুন। অনুলিপি করা অক্ষরগুলি বিন্দুর আগে বাফারে sertedোকানো হয়।


২৩ সংস্করণ হিসাবে এটি স্ট্যান্ডার্ড জিএনইউ ইম্যাক্স বিতরণেরও অংশ।
viam0Zah

এটি আমার সংস্করণে রয়েছে বলে মনে হয় না। কিছু লোড করতে হবে? আমার সংস্করণ হয় GNU Emacs 23.2.1 (amd64-portbld-freebsd8.1) of 2010-11-14 on [host clipped]
কিমেগা

2
@ কিমেগা আপনাকে করতে হবে ('বিবিধ প্রয়োজন')।
দিমিত্রি

4

সেখানে প্যাকেজ বলা হয় Avy এটা কমান্ড avy-অনুলিপি-লাইন রয়েছে। আপনি যখন এই আদেশটি ব্যবহার করেন, আপনার উইন্ডোর প্রতিটি লাইন বর্ণের সংমিশ্রণ লাভ করে। তারপরে আপনাকে কেবল কম্বিনেশন টাইপ করতে হবে এবং আপনি সেই লাইনটি পাবেন। এটি অঞ্চলের পক্ষেও কাজ করে। তারপরে আপনাকে কেবল দুটি সংমিশ্রণ টাইপ করতে হবে।

এখানে আপনি ইন্টারফেস দেখতে পারেন:

এখানে চিত্র বর্ণনা লিখুন



3

ডিফল্টগুলি এটির জন্য ভয়ঙ্কর। তবে, আপনি স্লিকএডিট এবং টেক্সটমেটের মতো কাজ করতে ইমাসকে প্রসারিত করতে পারেন, অর্থাত কোনও পাঠ্য নির্বাচন না করা হলে বর্তমান লাইনটি অনুলিপি / কাটা:

(transient-mark-mode t)
(defadvice kill-ring-save (before slick-copy activate compile)
  "When called interactively with no active region, copy a single line instead."
  (interactive
   (if mark-active (list (region-beginning) (region-end))
     (message "Copied line")
     (list (line-beginning-position)
           (line-beginning-position 2)))))
(defadvice kill-region (before slick-cut activate compile)
  "When called interactively with no active region, kill a single line instead."
  (interactive
   (if mark-active (list (region-beginning) (region-end))
     (list (line-beginning-position)
           (line-beginning-position 2)))))

উপরে রাখুন .emacs। তারপরে, একটি লাইন অনুলিপি করতে M-w,। একটি লাইন মুছতে C-w,। একটি লাইন সদৃশ করতে C-a M-w C-y C-y C-y ...


3

'আমি নিজের সংস্করণটি লিখেছিলাম duplicate-line, কারণ আমি হত্যার আংটিটি আঁকতে চাই না।

  (defun jr-duplicate-line ()
    "EASY"
    (interactive)
    (save-excursion
      (let ((line-text (buffer-substring-no-properties
                        (line-beginning-position)
                        (line-end-position))))
        (move-end-of-line 1)
        (newline)
        (insert line-text))))
  (global-set-key "\C-cd" 'jr-duplicate-line)

3

আমি দুটি জিনিস বাদে ফ্রেগগোডের সংস্করণটি পছন্দ করেছি: (1) এটি বাফারটি ইতিমধ্যে কেবল পঠনযোগ্য কিনা তা পরীক্ষা করে না (interactive "*")এবং (২) বাফারের শেষ লাইনে ব্যর্থ হয় যদি শেষ লাইনটি ফাঁকা থাকে (আপনি যেমন হন) আপনার বাফারটিকে কেবল পঠনযোগ্য রেখে এই ক্ষেত্রে লাইনটি হত্যা করতে পারে না)।

এটি সমাধানের জন্য আমি নিম্নলিখিত পরিবর্তনগুলি করেছি:

(defun duplicate-line ()
  "Clone line at cursor, leaving the latter intact."
  (interactive "*")
  (save-excursion
    ;; The last line of the buffer cannot be killed
    ;; if it is empty. Instead, simply add a new line.
    (if (and (eobp) (bolp))
        (newline)
      ;; Otherwise kill the whole line, and yank it back.
      (let ((kill-read-only-ok t)
            deactivate-mark)
        (toggle-read-only 1)
        (kill-whole-line)
        (toggle-read-only 0)
        (yank)))))

3

সাম্প্রতিক ইম্যাক্স সহ, আপনি এটি অনুলিপি করার জন্য লাইনের যে কোনও জায়গায় মেগাওয়াট ব্যবহার করতে পারেন। সুতরাং এটি হয়ে যায়:

M-w C-a RET C-y

সত্যি? এটি কোন "সাম্প্রতিক" ইমাকস হবে? 24.4 এর ক্ষেত্রে নয়: আপনি পাবেন "চিহ্নটি এখন সেট করা নেই, তাই কোনও অঞ্চল নেই।"
ডিভোর কিউবারিক

বর্তমান ইম্যাকস 24.5, এবং এর M-wসাথে আবদ্ধ easy-kill। আপনি যখন যা করেন তা কি তা পরীক্ষা করুনC-h c M-w
লুই কোটম্যান

ইমাস 24.5.1 এ কাজ করেনি। পূর্ববর্তী ফাঁকা রেখা afterোকানোর পরে একই লাইনের শুরুতে কেবল পংক্তির শুরু থেকে পয়েন্ট পর্যন্ত অনুলিপি করা হয়।
ডেরেক মাহর

3

আমি খুব জটিল সমাধান দেখেছি, যাইহোক ...

(defun duplicate-line ()
  "Duplicate current line"
  (interactive)
  (kill-whole-line)
  (yank)
  (yank))
(global-set-key (kbd "C-x M-d") 'duplicate-line)

নোট করুন যে এটি কিল রিংয়ের সাথে গোলমাল করবে।
ডডজি

এটি সর্বশেষ লাইন হলে লাইনটি নিজের মধ্যে সংযোজন করে দেয় এবং ফাইলটি কোনও নতুন লাইনে শেষ হয় না
চিহ্নিত করুন

2

@ [কেভিন কনার]: এতদূর কাছে, যতটা আমি জানি। kill-whole-lineসলিতে নতুন লাইনটি অন্তর্ভুক্ত করার জন্য কেবলমাত্র অন্য একটি বিষয় বিবেচনা করতে হবে ।


@ অ্যালেন: সরান [এবং ]ইন@[Kevin Conner]
jfs

2

ctrl- k, ctrl- k, (নতুন অবস্থানে অবস্থান) ctrl-y

একটি যুক্ত করুন ctrl- aআপনি যদি লাইনের শুরুতে শুরু না করেন। এবং দ্বিতীয় ctrl- kহ'ল নতুন লাইন চরিত্রটি দখল করা। আপনি কেবল পাঠ্যটি চাইলে এটি সরিয়ে ফেলা যায়।


এটি এখানে সবচেয়ে সোজা পদ্ধতি হতে হবে। ধন্যবাদ!
bartlomiej.n

2

যখন কোনও সক্রিয় অঞ্চল ছাড়া ইন্টারেক্টিভভাবে বলা হয়, পরিবর্তে একটি একক লাইন কপি (এমডব্লু):

(defadvice kill-ring-save (before slick-copy activate compile)
  "When called interactively with no active region, COPY a single line instead."
  (interactive
   (if mark-active (list (region-beginning) (region-end))
     (message "Copied line")
     (list (line-beginning-position)
           (line-beginning-position 2)))))

যখন কোনও সক্রিয় অঞ্চল ছাড়া ইন্টারেক্টিভভাবে বলা হয়, পরিবর্তে একটি একক লাইন কিল (সিডাব্লু) করুন।

(defadvice kill-region (before slick-cut activate compile)
  "When called interactively with no active region, KILL a single line instead."
  (interactive
   (if mark-active (list (region-beginning) (region-end))
     (message "Killed line")
     (list (line-beginning-position)
           (line-beginning-position 2)))))

এছাড়াও, সম্পর্কিত নোটে:

(defun move-line-up ()
  "Move up the current line."
  (interactive)
  (transpose-lines 1)
  (forward-line -2)
  (indent-according-to-mode))

(defun move-line-down ()
  "Move down the current line."
  (interactive)
  (forward-line 1)
  (transpose-lines 1)
  (forward-line -1)
  (indent-according-to-mode))

(global-set-key [(meta shift up)]  'move-line-up)
(global-set-key [(meta shift down)]  'move-line-down)

1

আমি আমার পছন্দের জন্য একটি লিখি।

(defun duplicate-line ()
  "Duplicate current line."
  (interactive)
  (let ((text (buffer-substring-no-properties (point-at-bol) (point-at-eol)))
        (cur-col (current-column)))
    (end-of-line) (insert "\n" text)
    (beginning-of-line) (right-char cur-col)))
(global-set-key (kbd "C-c d l") 'duplicate-line)

তবে আমি দেখতে পেলাম যে যখন বর্তমান লাইনে মাল্টি-বাইট অক্ষর রয়েছে (যেমন সিজেকে অক্ষর)। যদি আপনি এই সমস্যার মুখোমুখি হন তবে পরিবর্তে এটি ব্যবহার করে দেখুন:

(defun duplicate-line ()
  "Duplicate current line."
  (interactive)
  (let* ((text (buffer-substring-no-properties (point-at-bol) (point-at-eol)))
         (cur-col (length (buffer-substring-no-properties (point-at-bol) (point)))))
    (end-of-line) (insert "\n" text)
    (beginning-of-line) (right-char cur-col)))
(global-set-key (kbd "C-c d l") 'duplicate-line)

1

এই কার্যকারিতাটি লাইন বা অঞ্চল দ্বারা নকলকরণের ক্ষেত্রে জেটব্রেইনগুলির প্রয়োগের সাথে মিলে যায় এবং তারপরে বিন্দু এবং / অথবা সক্রিয় অঞ্চলটি প্রত্যাশার মতো ছেড়ে যায়:

ইন্টারেক্টিভ ফর্মের চারদিকে কেবল একটি মোড়ক:

(defun wrx/duplicate-line-or-region (beg end)
  "Implements functionality of JetBrains' `Command-d' shortcut for `duplicate-line'.
   BEG & END correspond point & mark, smaller first
   `use-region-p' explained: 
   http://emacs.stackexchange.com/questions/12334/elisp-for-applying-command-to-only-the-selected-region#answer-12335"
  (interactive "r")
  (if (use-region-p)
      (wrx/duplicate-region-in-buffer beg end)
    (wrx/duplicate-line-in-buffer)))

যা এটিকে বলে,

(defun wrx/duplicate-region-in-buffer (beg end)
  "copy and duplicate context of current active region
   |------------------------+----------------------------|
   |        before          |           after            |
   |------------------------+----------------------------|
   | first <MARK>line here  | first line here            |
   | second item<POINT> now | second item<MARK>line here |
   |                        | second item<POINT> now     |
   |------------------------+----------------------------|
   TODO: Acts funky when point < mark"
  (set-mark-command nil)
  (insert (buffer-substring beg end))
  (setq deactivate-mark nil))

অথবা এটা

(defun wrx/duplicate-line-in-buffer ()
  "Duplicate current line, maintaining column position.
   |--------------------------+--------------------------|
   |          before          |          after           |
   |--------------------------+--------------------------|
   | lorem ipsum<POINT> dolor | lorem ipsum dolor        |
   |                          | lorem ipsum<POINT> dolor |
   |--------------------------+--------------------------|
   TODO: Save history for `Cmd-Z'
   Context: 
   http://stackoverflow.com/questions/88399/how-do-i-duplicate-a-whole-line-in-emacs#answer-551053"
  (setq columns-over (current-column))
  (save-excursion
    (kill-whole-line)
    (yank)
    (yank))
  (let (v)
    (dotimes (n columns-over v)
      (right-char)
      (setq v (cons n v))))
  (next-line))

এবং তারপরে আমার এই মেটা + শিফট + ডি তে আবদ্ধ

(global-set-key (kbd "M-D") 'wrx/duplicate-line-or-region)

1

অন্যান্য উত্তরে উল্লিখিত হিসাবে, লিস্প কোডে কী স্ট্রোককে বাঁধাই অন্য কী স্ট্রোকের সাথে আবদ্ধ করার চেয়ে ভাল ধারণা। @ এমডব্লিউর উত্তরের সাথে কোড লাইনটিকে সদৃশ করে এবং চিহ্নটিকে নতুন লাইনের শেষের দিকে নিয়ে যায়। এই পরিবর্তনটি নতুন লাইনের একই কলামে চিহ্নের অবস্থানটি রাখে:

fun duplicate-line ()
  (interactive)
  (let ((col (current-column)))
    (move-beginning-of-line 1)
    (kill-line)
    (yank)
    (newline)
    (yank)
    (move-to-column col)))


0

উপসর্গ যুক্তি, এবং (আমি আশা করি) স্বজ্ঞাত আচরণের সাথে:

(defun duplicate-line (&optional arg)
  "Duplicate it. With prefix ARG, duplicate ARG times."
  (interactive "p")
  (next-line 
   (save-excursion 
     (let ((beg (line-beginning-position))
           (end (line-end-position)))
       (copy-region-as-kill beg end)
       (dotimes (num arg arg)
         (end-of-line) (newline)
         (yank))))))

কার্সারটি শেষ লাইনে থাকবে। বিকল্পভাবে, আপনি পরবর্তী কয়েকটি লাইন একবারে নকল করতে একটি উপসর্গ নির্দিষ্ট করতে চাইতে পারেন:

(defun duplicate-line (&optional arg)
  "Duplicate it. With prefix ARG, duplicate ARG times."
  (interactive "p")
  (save-excursion 
    (let ((beg (line-beginning-position))
          (end 
           (progn (forward-line (1- arg)) (line-end-position))))
      (copy-region-as-kill beg end)
      (end-of-line) (newline)
      (yank)))
  (next-line arg))

আমি নিজেকে প্রায়শই উভয়ই ব্যবহার করে উপসর্গের যুক্তির আচরণটি স্যুইচ করতে একটি মোড়ক ফাংশন ব্যবহার করে দেখতে পাই।

এবং একটি কী-বাইন্ডিং: (global-set-key (kbd "C-S-d") 'duplicate-line)


0
;; http://www.emacswiki.org/emacs/WholeLineOrRegion#toc2
;; cut, copy, yank
(defadvice kill-ring-save (around slick-copy activate)
  "When called interactively with no active region, copy a single line instead."
  (if (or (use-region-p) (not (called-interactively-p)))
      ad-do-it
    (kill-new (buffer-substring (line-beginning-position)
                                (line-beginning-position 2))
              nil '(yank-line))
    (message "Copied line")))
(defadvice kill-region (around slick-copy activate)
  "When called interactively with no active region, kill a single line instead."
  (if (or (use-region-p) (not (called-interactively-p)))
      ad-do-it
    (kill-new (filter-buffer-substring (line-beginning-position)
                                       (line-beginning-position 2) t)
              nil '(yank-line))))
(defun yank-line (string)
  "Insert STRING above the current line."
  (beginning-of-line)
  (unless (= (elt string (1- (length string))) ?\n)
    (save-excursion (insert "\n")))
  (insert string))

(global-set-key (kbd "<f2>") 'kill-region)    ; cut.
(global-set-key (kbd "<f3>") 'kill-ring-save) ; copy.
(global-set-key (kbd "<f4>") 'yank)           ; paste.

উপরের এলিজপটি আপনাকে init.el এ যুক্ত করুন এবং আপনি এখন পুরো লাইন ফাংশনটি কেটে / অনুলিপি করুন, তারপরে আপনি কোনও লাইন নকল করতে F3 F4 করতে পারেন।


0

সহজ উপায় ক্রিস কনওয়ের পদ্ধতি is

C-a C-SPACE C-n M-w C-y

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

যদিও এটি কিছুটা লম্বা, তবে আপনি যখন এটির অভ্যস্ত হন, আপনি দ্রুত করতে পারেন এবং এটি মজাদার বলে খুঁজে পাবেন!


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

0

বর্তমান লাইনের সদৃশ করার জন্য এখানে একটি ফাংশন রয়েছে। উপসর্গ যুক্তি সহ, এটি একাধিকবার লাইনটি সদৃশ করবে। উদাহরণস্বরূপ, C-3 C-S-oবর্তমান লাইনটি তিনবার নকল করবে। কিল রিং পরিবর্তন করে না।

(defun duplicate-lines (arg)
  (interactive "P")
  (let* ((arg (if arg arg 1))
         (beg (save-excursion (beginning-of-line) (point)))
         (end (save-excursion (end-of-line) (point)))
         (line (buffer-substring-no-properties beg end)))
    (save-excursion
      (end-of-line)
      (open-line arg)
      (setq num 0)
      (while (< num arg)
        (setq num (1+ num))
        (forward-line 1)
        (insert-string line))
      )))

(global-set-key (kbd "C-S-o") 'duplicate-lines)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.