मैंने वीआईएम के लिए यही सवाल देखा और यह कुछ ऐसा था जिसे मैं खुद जानना चाहता था कि एमॅक्स के लिए क्या करना है। ReSharper में मैं इस क्रिया के लिए CTRL-D का उपयोग करता हूं। Emacs में यह प्रदर्शन करने के लिए कम से कम संख्या क्या है?
मैंने वीआईएम के लिए यही सवाल देखा और यह कुछ ऐसा था जिसे मैं खुद जानना चाहता था कि एमॅक्स के लिए क्या करना है। ReSharper में मैं इस क्रिया के लिए CTRL-D का उपयोग करता हूं। Emacs में यह प्रदर्शन करने के लिए कम से कम संख्या क्या है?
जवाबों:
मैं उपयोग करता हूं
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
आपके संपादक की तुलना में शर्मनाक क्रिया हैं , लेकिन Emacs में हमेशा एक अनुकूलन होता है। डिफ़ॉल्ट रूप 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")
(@ नाथन का संभावित संस्करण शायद बेहतर है, क्योंकि यदि कोई महत्वपूर्ण बाइंडिंग हैं, तो यह टूटेगा नहीं।)
खबरदार: कुछ Emacs मोड C-c C-d
कुछ और करने के लिए पुनः प्राप्त कर सकते हैं।
C-S-backspace C-y C-y
?
पिछले उत्तरों के अलावा आप एक पंक्ति को डुप्लिकेट करने के लिए अपने स्वयं के फ़ंक्शन को भी परिभाषित कर सकते हैं। उदाहरण के लिए, अपने .emacs फ़ाइल में निम्नलिखित डालने से Cd को वर्तमान लाइन डुप्लिकेट हो जाएगी।
(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.sources में चर्चा का परिणाम था ।
(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
नहीं करता है)।
यहाँ ऐसा करने के लिए एक और समारोह है। मेरा संस्करण किल रिंग को नहीं छूता है, और कर्सर नई लाइन पर समाप्त होता है जहां यह मूल पर था। यदि यह सक्रिय (क्षणिक चिह्न मोड) है, तो यह क्षेत्र को डुप्लिकेट करेगा या लाइन को डुप्लिकेट करने के लिए डिफ़ॉल्ट रूप से अन्यथा। यदि उपसर्ग arg दिया गया है, तो यह कई प्रतियाँ भी बनायेगा, और यदि ऋणात्मक उपसर्ग arg दिया जाता है, तो मूल पंक्ति पर टिप्पणी करें (यह पुराने को रखते हुए कमांड / स्टेटमेंट के भिन्न संस्करण के परीक्षण के लिए उपयोगी है)।
(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 25.1.1 उपयोग कर रहा हूँ Windows पर
आपके .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)
डंप से डुप्लिकेट-चीज़ स्थापित करें:
Mx पैकेज-स्थापित RET डुप्लिकेट-चीज़
और इस कीबाइंडिंग को init फाइल में जोड़ें :
(वैश्विक-सेट-कुंजी (kbd "Mc") 'डुप्लिकेट-चीज़'
मुझे यह बिल्कुल याद नहीं है कि रेखा का दोहराव कहीं और कैसे काम करता है, लेकिन एक पूर्व SciTE उपयोगकर्ता के रूप में मुझे SciTE-way के बारे में एक बात पसंद आई: यह कर्सर की स्थिति को नहीं छूता है! तो ऊपर दिए गए सभी प्राप्तकर्ता मेरे लिए पर्याप्त नहीं थे, यहाँ मेरा हिप्पी-संस्करण है:
(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))))
ध्यान दें कि प्रक्रिया में वास्तव में कुछ भी नहीं मारा जाता है, निशान और वर्तमान चयन को छोड़कर।
BTW, क्यों तुम लोग जब यह अच्छा'''''clean हत्या पूरे लाइन thingy (CS-backspace) के आसपास कर्सर मरोड़ते के शौकीन हैं?
क्योंकि मुझे नहीं पता, मैं गोल्फ के इस दौर को एक धीमी गति के साथ शुरू करूँगा:
ctrl-k, y, y
आप अपने .emacs में जो कुछ करना चाहते हैं, वह है
(setq kill-whole-line t)
जब भी आप जब भी किल-लाइन (Ck के माध्यम से) आह्वान करते हैं, तो मूल रूप से पूरी लाइन के साथ-साथ नई रेखा को भी मारता है। फिर अतिरिक्त कोड के बिना, आप बस लाइन को कॉपी करने के लिए 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.
लेकिन अगर आप अक्सर इसका इस्तेमाल करते हैं तो हो सकता है कि डेडिकेटेड की-बाइंडिंग एक बेहतर आइडिया हो, लेकिन Ca Ck Cy का इस्तेमाल करने का फायदा यह है कि आप लाइन को कहीं और डुप्लिकेट कर सकते हैं, बजाय मौजूदा लाइन के।
मैं copy-from-above-command
एक कुंजी के लिए बाध्य है और इसका उपयोग करता हूं । यह XEmacs के साथ उपलब्ध कराया गया है, लेकिन मुझे GNU Emacs के बारे में जानकारी नहीं है।
`प्रतिलिपि-से-ऊपर-कमान 'एक संकलित संकलित लिस्प फ़ंक्शन है
- जिसे " /usr/share/xemacs/21.4.15/lisp/misc.elc "(कॉपी-से-ऊपर-कमांड और वैकल्पिक ARG) से लोड किया गया हैदस्तावेज़ीकरण: पिछले गैर-रिक्त रेखा से वर्णों की प्रतिलिपि बनाएँ , बिंदु से ठीक ऊपर। ARG वर्णों की प्रतिलिपि बनाएँ, लेकिन उस पंक्ति के अंत में नहीं। यदि कोई तर्क नहीं दिया गया है, तो बाकी की पूरी पंक्ति की प्रतिलिपि बनाएँ। कॉपी किए गए पात्रों को बिंदु से पहले बफर में डाला जाता है।
GNU Emacs 23.2.1 (amd64-portbld-freebsd8.1) of 2010-11-14 on [host clipped]
।
एवी नामक पैकेज है इसमें कमांड एवी-कॉपी-लाइन है। जब आप उस कमांड का उपयोग करते हैं, तो आपकी विंडो की प्रत्येक पंक्ति में अक्षर संयोजन हो जाता है। फिर आपको बस संयोजन टाइप करना होगा और आपको वह लाइन मिल जाएगी। यह क्षेत्र के लिए भी काम करता है। फिर आपको बस दो संयोजन टाइप करना है।
यहाँ आप इंटरफ़ेस देख सकते हैं:
चूक इसके लिए भयानक हैं। हालाँकि, आप Emacs को SlickEdit और TextMate की तरह काम करने के लिए बढ़ा सकते हैं, अर्थात्, जब कोई पाठ नहीं चुना जाता है, तो वर्तमान लाइन को कॉपी / कट करें:
(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)
मुझे FraGGod का संस्करण पसंद आया, दो चीजों को छोड़कर: (1) यह जाँच नहीं करता है कि क्या बफर पहले से ही पढ़ा हुआ है (interactive "*")
, और (2) यह बफर की अंतिम पंक्ति में विफल रहता है अगर वह अंतिम पंक्ति खाली है (जैसे कि आप उस मामले में लाइन को नहीं मार सकता है), अपने बफर को केवल पढ़ने के लिए छोड़कर।
मैंने निम्नलिखित परिवर्तन किए हैं कि हल करने के लिए:
(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)
@ [केविन कोनर]: बहुत करीब है, जहाँ तक मुझे पता है। केवल दूसरी बात पर विचार kill-whole-line
करने के लिए Ck में newline को शामिल करना चालू है ।
[
और ]
में@[Kevin Conner]
ctrl- k, ctrl- k, (नए स्थान पर स्थिति) ctrl-y
यदि आप लाइन की शुरुआत में शुरू नहीं कर रहे हैं तो एक ctrl- जोड़ें a। और दूसरा ctrl- kन्यूलाइन वर्ण को हथियाना है। यदि आप केवल पाठ चाहते हैं तो इसे हटाया जा सकता है।
जब कोई सक्रिय क्षेत्र के साथ अंतःक्रियात्मक रूप से कहा जाता है, तो COPY (Mw) इसके बजाय एक ही पंक्ति:
(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)))))
जब कोई सक्रिय क्षेत्र के साथ अंतःक्रियात्मक रूप से कहा जाता है, तो KILL (Cw) के बजाय एक एकल पंक्ति।
(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)
लेकिन मैंने पाया कि यह तब कुछ समस्या होगी जब वर्तमान लाइन में मल्टी-बाइट वर्ण (जैसे CJK वर्ण) होते हैं। यदि आप इस समस्या का सामना करते हैं, तो इसके बजाय यह प्रयास करें:
(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)
यह कार्यक्षमता लाइन या क्षेत्र द्वारा दोनों को डुप्लिकेट करने के संदर्भ में JetBrains के कार्यान्वयन के साथ मेल खाना चाहिए, और फिर बिंदु और / या सक्रिय क्षेत्र को छोड़ देना चाहिए:
इंटरेक्टिव फॉर्म के चारों ओर बस एक आवरण:
(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)
जैसा कि अन्य उत्तरों में उल्लेख किया गया है, लिस्प कोड में कुंजी स्ट्रोक को बांधना एक अन्य कुंजी स्ट्रोक के लिए बाध्य करने से बेहतर विचार है। @ Mw के जवाब के साथ, कोड लाइन को डुप्लिकेट करता है और मार्क को नई लाइन के अंत तक ले जाता है। यह संशोधन नई पंक्ति में समान स्तंभ पर चिह्न स्थिति रखता है:
fun duplicate-line ()
(interactive)
(let ((col (current-column)))
(move-beginning-of-line 1)
(kill-line)
(yank)
(newline)
(yank)
(move-to-column col)))
उपसर्ग तर्कों के साथ, और क्या है (मुझे उम्मीद है) सहज व्यवहार:
(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 कर सकते हैं।
सबसे सरल तरीका क्रिस कॉनवे की विधि है।
C-a C-SPACE C-n M-w C-y
यह EMACS द्वारा अनिवार्य तरीका है। मेरी राय में, मानक का उपयोग करना बेहतर है। मैं हमेशा ईएमएसीएस में स्वयं की कुंजी-बंधन के अनुकूलन के प्रति सावधान हूं। 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)