আমি ভিআইএম-এর জন্য এই একই প্রশ্নটি দেখেছি এবং এটি এমন একটি বিষয় যা আমি নিজেও জানতে চেয়েছিলাম ইমাসদের জন্য কীভাবে করা যায়। রিশার্পারে আমি এই ক্রিয়াটির জন্য সিটিআরএল-ডি ব্যবহার করি। ইমাক্সে এটি সম্পাদন করার জন্য সর্বনিম্ন কতটি আদেশ রয়েছে?
আমি ভিআইএম-এর জন্য এই একই প্রশ্নটি দেখেছি এবং এটি এমন একটি বিষয় যা আমি নিজেও জানতে চেয়েছিলাম ইমাসদের জন্য কীভাবে করা যায়। রিশার্পারে আমি এই ক্রিয়াটির জন্য সিটিআরএল-ডি ব্যবহার করি। ইমাক্সে এটি সম্পাদন করার জন্য সর্বনিম্ন কতটি আদেশ রয়েছে?
উত্তর:
আমি ব্যবহার করি
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
অন্য কিছু করতে পুনরায় দাবি করতে পারে।
C-S-backspace C-y C-y
?
পূর্ববর্তী উত্তরগুলি ছাড়াও আপনি একটি লাইন সদৃশ করতে নিজের ফাংশনটি সংজ্ঞায়িত করতে পারেন। উদাহরণস্বরূপ, আপনার .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
Del
এই ফাংশন থেকে কীভাবে আন-বাঁধাই করা যায় তার কোনও ধারণা ?
Del
স্বাভাবিক অবস্থায় ফিরিয়ে যখন পালন নতুন C-d
: (global-set-key (kbd "<delete>") 'delete-char)
চাহিদা পরে যোগ করা C-d
সংজ্ঞা।
কার্সারটিকে লাইনে রাখুন, যদি শুরুতে না হয় তবে CTRL-A তবে,
CTRL-K
CTRL-K
CTRL-Y
CTRL-Y
আমার ফাংশনটির সংস্করণ এমন একটি লাইন নকল করে যা পূর্বাবস্থায় ফিরে আসে এবং কার্সারের অবস্থানের সাথে গোলযোগ না করে। এটি 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)
crux-duplicate-current-line-or-region
আমার জন্য আরও ভাল কাজ করে, কারণ আপনার ফাংশনটির সাথে এটি লাইন সদৃশ এবং শেষ অপারেশনটিকেও পূর্বাবস্থায় ফিরিয়ে দেয়।
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
না করে)।
এটি করার জন্য এখানে আরও একটি ফাংশন রয়েছে। আমার সংস্করণটি কিলের রিংটি স্পর্শ করে না এবং কার্সারটি নতুন লাইনে শেষ হয়েছে যেখানে এটি আসল। এটি সক্রিয় হলে অঞ্চলটিকে নকল করবে (ক্ষণস্থায়ী চিহ্ন মোড), বা অন্যথায় লাইনটি সদৃশ করতে ডিফল্ট হবে। এটি একটি উপসর্গটি দেওয়া হলে একাধিক অনুলিপি তৈরি করবে এবং নেতিবাচক উপসর্গটি দেওয়া হলে মূল লাইনটি মন্তব্য করবে (পুরানোটি রাখার সাথে সাথে এটি একটি আদেশ / বিবৃতিটির ভিন্ন সংস্করণ পরীক্ষা করার জন্য দরকারী)।
(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
পরে একটি একক (অপরিশোধিত) অক্ষর ব্যবহারকারীর বাইন্ডিংয়ের জন্য সংরক্ষিত।
C-c d
করি তখন ত্রুটিটি পাই command-execute: Wrong type argument: commandp, duplicate-line-or-region
। কোন ধারণা কি? আমি উইন্ডোজে
আপনার .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)
মেলপা থেকে সদৃশ জিনিস ইনস্টল করুন:
এমএক্স প্যাকেজ-ইনস্টল আরটি ডুপ্লিকেট-জিনিস
এবং এই ফাইলটি কী- বাইন্ডিং যুক্ত করুন :
(গ্লোবাল-সেট-কী (কেবিডি "ম্যাক") 'সদৃশ-জিনিস)
আমি অন্য কোথাও লাইন ডুপ্লিকেশন কীভাবে কাজ করে তা পুরোপুরি মনে নেই, তবে একজন প্রাক্তন সায়টিইই ব্যবহারকারী হিসাবে আমি সায়টিইটি-উপায় সম্পর্কে একটি জিনিস পছন্দ করেছি: এটি কার্সারের অবস্থানকে স্পর্শ করে না! সুতরাং উপরের সমস্ত রসিপিগুলি আমার পক্ষে যথেষ্ট ভাল ছিল না, এখানে আমার হিপ্পি-সংস্করণ রয়েছে:
(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))))
মনে রাখবেন যে চিহ্নগুলি এবং বর্তমান নির্বাচন অক্ষত রেখে কিছুই প্রক্রিয়াতে আসলে মারা যায় না।
বিটিডব্লিউ, আপনি কেন এত সুন্দর কার্সারকে ঘেউ ঘেউ ঘেউ ঘেউ করে দেখার মতো এত সুন্দর, কেননা এই পুরো সুন্দর লাইন লাইনের জিনিস (সিএস-ব্যাকস্পেস) আছে?
কারণ আমি জানি না, আমি গল্ফের এই রাউন্ডটি একটি স্লোবল দিয়ে শুরু করব:
ctrl-k, y, y
আপনার .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.
তবে আপনি যদি এটি প্রায়শই ব্যবহার করেন তবে সম্ভবত একটি উত্সর্গীকৃত কী বাঁধাই আরও ভাল ধারণা হতে পারে তবে কেবল সি সি সি সি সাই ব্যবহারের সুবিধাটি আপনি বর্তমান লাইনের ঠিক নীচে পরিবর্তে অন্য কোথাও লাইনটি নকল করতে পারেন।
আমি copy-from-above-command
একটি চাবি আবদ্ধ এবং এটি ব্যবহার। এটি এক্সএম্যাক্স সহ সরবরাহ করা হয়েছে, তবে আমি জিএনইউ ইম্যাকস সম্পর্কে জানি না।
`অনুলিপি-থেকে-উপরে-আদেশ - একটি ইন্টারেক্টিভ সংকলিত লিস্প ফাংশন
-" /usr/share/xemacs/21.4.15/lisp/misc.elc "(কপি-থেকে-উপরের-কমান্ড ও alচ্ছিক এআরজি) থেকে লোড করা হয়েছেডকুমেন্টেশন: পূর্ববর্তী ননব্ল্যাঙ্ক লাইন থেকে অক্ষরগুলি অনুলিপি করুন , ঠিক উপরে পয়েন্ট শুরু করুন। এআরজি অক্ষরগুলি অনুলিপি করুন, কিন্তু সেই লাইনের শেষের কাছে নেই। যদি কোনও যুক্তি না দেওয়া হয় তবে লাইনটির পুরো অংশটি অনুলিপি করুন। অনুলিপি করা অক্ষরগুলি বিন্দুর আগে বাফারে sertedোকানো হয়।
GNU Emacs 23.2.1 (amd64-portbld-freebsd8.1) of 2010-11-14 on [host clipped]
।
সেখানে প্যাকেজ বলা হয় Avy এটা কমান্ড avy-অনুলিপি-লাইন রয়েছে। আপনি যখন এই আদেশটি ব্যবহার করেন, আপনার উইন্ডোর প্রতিটি লাইন বর্ণের সংমিশ্রণ লাভ করে। তারপরে আপনাকে কেবল কম্বিনেশন টাইপ করতে হবে এবং আপনি সেই লাইনটি পাবেন। এটি অঞ্চলের পক্ষেও কাজ করে। তারপরে আপনাকে কেবল দুটি সংমিশ্রণ টাইপ করতে হবে।
এখানে আপনি ইন্টারফেস দেখতে পারেন:
ডিফল্টগুলি এটির জন্য ভয়ঙ্কর। তবে, আপনি স্লিকএডিট এবং টেক্সটমেটের মতো কাজ করতে ইমাসকে প্রসারিত করতে পারেন, অর্থাত কোনও পাঠ্য নির্বাচন না করা হলে বর্তমান লাইনটি অনুলিপি / কাটা:
(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 ...
।
'আমি নিজের সংস্করণটি লিখেছিলাম 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)
আমি দুটি জিনিস বাদে ফ্রেগগোডের সংস্করণটি পছন্দ করেছি: (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)))))
সাম্প্রতিক ইম্যাক্স সহ, আপনি এটি অনুলিপি করার জন্য লাইনের যে কোনও জায়গায় মেগাওয়াট ব্যবহার করতে পারেন। সুতরাং এটি হয়ে যায়:
M-w C-a RET C-y
M-w
সাথে আবদ্ধ easy-kill
। আপনি যখন যা করেন তা কি তা পরীক্ষা করুনC-h c M-w
আমি খুব জটিল সমাধান দেখেছি, যাইহোক ...
(defun duplicate-line ()
"Duplicate current line"
(interactive)
(kill-whole-line)
(yank)
(yank))
(global-set-key (kbd "C-x M-d") 'duplicate-line)
ctrl- k, ctrl- k, (নতুন অবস্থানে অবস্থান) ctrl-y
একটি যুক্ত করুন ctrl- aআপনি যদি লাইনের শুরুতে শুরু না করেন। এবং দ্বিতীয় ctrl- kহ'ল নতুন লাইন চরিত্রটি দখল করা। আপনি কেবল পাঠ্যটি চাইলে এটি সরিয়ে ফেলা যায়।
যখন কোনও সক্রিয় অঞ্চল ছাড়া ইন্টারেক্টিভভাবে বলা হয়, পরিবর্তে একটি একক লাইন কপি (এমডব্লু):
(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)
আমি আমার পছন্দের জন্য একটি লিখি।
(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)
এই কার্যকারিতাটি লাইন বা অঞ্চল দ্বারা নকলকরণের ক্ষেত্রে জেটব্রেইনগুলির প্রয়োগের সাথে মিলে যায় এবং তারপরে বিন্দু এবং / অথবা সক্রিয় অঞ্চলটি প্রত্যাশার মতো ছেড়ে যায়:
ইন্টারেক্টিভ ফর্মের চারদিকে কেবল একটি মোড়ক:
(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)
অন্যান্য উত্তরে উল্লিখিত হিসাবে, লিস্প কোডে কী স্ট্রোককে বাঁধাই অন্য কী স্ট্রোকের সাথে আবদ্ধ করার চেয়ে ভাল ধারণা। @ এমডব্লিউর উত্তরের সাথে কোড লাইনটিকে সদৃশ করে এবং চিহ্নটিকে নতুন লাইনের শেষের দিকে নিয়ে যায়। এই পরিবর্তনটি নতুন লাইনের একই কলামে চিহ্নের অবস্থানটি রাখে:
fun duplicate-line ()
(interactive)
(let ((col (current-column)))
(move-beginning-of-line 1)
(kill-line)
(yank)
(newline)
(yank)
(move-to-column col)))
আপনি যদি স্পেসম্যাকস ব্যবহার করছেন তবে আপনি কেবল duplicate-line-or-region
আবদ্ধ করতে পারেন:
SPC x l d
উপসর্গ যুক্তি, এবং (আমি আশা করি) স্বজ্ঞাত আচরণের সাথে:
(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)
;; 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 করতে পারেন।
সহজ উপায় ক্রিস কনওয়ের পদ্ধতি is
C-a C-SPACE C-n M-w C-y
এটি ইএমএসিএসের দ্বারা নির্ধারিত ডিফল্ট উপায়। আমার মতে, মানটি ব্যবহার করা আরও ভাল। আমি EMACS- এ নিজস্ব কী-বন্ডিং কাস্টমাইজেশনের প্রতি সর্বদা সতর্ক। ইএমএসিএস ইতিমধ্যে যথেষ্ট শক্তিশালী, আমি মনে করি আমাদের নিজস্ব কী-বাইন্ডিংগুলিকে খাপ খাইয়ে নিতে আমাদের সর্বোপরি চেষ্টা করা উচিত।
যদিও এটি কিছুটা লম্বা, তবে আপনি যখন এটির অভ্যস্ত হন, আপনি দ্রুত করতে পারেন এবং এটি মজাদার বলে খুঁজে পাবেন!
বর্তমান লাইনের সদৃশ করার জন্য এখানে একটি ফাংশন রয়েছে। উপসর্গ যুক্তি সহ, এটি একাধিকবার লাইনটি সদৃশ করবে। উদাহরণস্বরূপ, 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)