2008-09-16 6 views
18

मैं Emacs में आसानी से 10 बार एक पंक्ति कैसे कॉपी कर सकता हूं? मुझे कॉपी-लाइन शॉर्टकट या फ़ंक्शन नहीं मिल रहा है। मैं सी-एसी-एसपीसीसी-ईएम-डब्ल्यू का प्रयोग श्रमिक रूप से लाइन की प्रतिलिपि बनाने के लिए कर सकता हूं लेकिन फिर मैं इसे एक से अधिक बार कैसे पेस्ट कर सकता हूं?Emacs Vim's yy10p के बराबर है?

मेरे विचारों से पहले और मेरे विचार लिखने से पहले कोई विचार।

उत्तर

11

प्रतिलिपि बनाई जा रही: फिर

(defadvice kill-ring-save (before slickcopy activate compile) 
    "When called interactively with no active region, copy a single line instead." 
    (interactive 
    (if mark-active (list (region-beginning) (region-end)) 
    (list (line-beginning-position) 
      (line-beginning-position 2))))) 
(defadvice kill-region (before slickcut 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))))) 

:

आप अक्सर लाइनों के साथ काम करते हैं, आप प्रतिलिपि (kill-ring-save) और कटौती (kill-region) तर्ज पर काम करने के लिए जब कोई क्षेत्र चयनित है चाहते हो सकता है आप सिर्फ एमडब्ल्यू के साथ लाइन की प्रतिलिपि बना सकते हैं।

चिपकाया जा रहा है:

अक्सर एक उपसर्ग तर्क सिर्फ एक कार्रवाई कई बार, तो आप Cu 10 Cy काम करने के लिए उम्मीद थी करता है, लेकिन इस मामले में Cy अपने तर्क का उपयोग करता है जो kill- के तत्व मतलब करने के लिए "यंक" (पेस्ट) के लिए रिंग। एकमात्र समाधान जो मैं सोच सकता हूं वह है क्रोनोज़ कहता है: सीएक्स (सीएक्स सीएक्स) के साथ एक मैक्रो रिकॉर्ड करें और उसके बाद क्यू का तर्क kmacro-end-and-call-macro पर जाएं (यह क्यू 9 सीएक्स ई है या यहां तक ​​कि केवल सी -9 सीएक्स ई या एम-9 सीएक्स ई)।

एक और तरीका है: आप, साथ ही M-x viper-mode में रहने और yy10p :)

+1

मैं अनुशंसा करता हूं [ईविल] (http://www.emacswiki.org/emacs/Evil) 'वाइपर-मोड' पर; [इसमें कई विम विशेषताएं हैं जो वाइपर नहीं करती हैं] (http://stackoverflow.com/questions/14291260/difference-between-viper-vimpulse-and-evil-for-emacs)। –

0

आप लाइन को मारना चाहते हैं: सी-ए-सी, और फिर सी-वाई या?

+1

er .. प्रश्न यह है कि इसे दस बार कैसे करें, एक बार नहीं। – Baxissimo

18

आप उसके लिए एक कुंजीपटल मैक्रो का उपयोग कर सकते हैं: -

सीए सी.के. Cx (Cy मुख्य न्यायाधीश Cx) Cu 9 Cx ई

स्पष्टीकरण: -

  • सीए: शुरू करने के लिए जाओ लाइन की
  • सी.के.: लाइन मारने
  • Cx (: कुंजीपटल मैक्रो
  • रिकॉर्डिंग प्रारंभ
  • Cy: झटका लाइन
  • मारे गए
  • मुख्य न्यायाधीश: अगली पंक्ति
  • Cx) ले जाएं: कुंजीपटल मैक्रो
  • Cu 9 रिकॉर्डिंग बंद करो: दोहराएँ 9 बार
  • Cx ई: कुंजीपटल मैक्रो निष्पादित
+3

ध्यान दें कि Emacs 22.1 के रिलीज के बाद से आप वास्तव में ' 'का उपयोग कर सकते हैं जो' मार-पूर्ण-रेखा 'चलाता है और vi में' dd' के बराबर है। इसलिए जब भी आप स्वयं को 'सी-ए-सी-के-सी' कर पाते हैं तो आप केवल '<सी-एस-बैकस्पेस>' कर सकते हैं। –

+0

उपर्युक्त काम ठीक है, लेकिन 'सी-एक्स ('और' सी-एक्स) 'के बजाय Emacs 25 (संभवतया पहले के संस्करण भी?) में केवल FYI क्रमशः' F3' और 'F4' कुंजी' टाइप कर सकते हैं। [अधिक जानकारी के लिए Emacs मैन्युअल देखें] (https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#Basic-Keyboard-Macro) – user12345

0

मुझे प्रत्यक्ष समकक्ष के बारे में पता नहीं है (साइ 10 बार मुझे सबसे अच्छा पता है), लेकिन आपको वाइपर में दिलचस्पी हो सकती है, जो एमएक्स के लिए वीआई इम्यूलेशन पैकेज है। यह मानक emacs वितरण का हिस्सा है।

2

एक ही रास्ता मैं मनमाना आदेशों को दोहराने के लिए जानते हैं "तर्क करके बार-बार" का उपयोग करने के लिए है कुंजीपटल मैक्रो की सुविधा का उपयोग कर सकते हैं।

मेगावाट Cx (Cy Cx) सी-9 Cx ई नीचे

सीए सी अंतरिक्ष

  • सीए: लाइन के शुरू करने के लिए जाओ
  • सी जगह: सेट निशान
  • नीचे: शुरू करने के लिए जाओ निम्नलिखित पंक्ति का
  • मेगावाट: प्रतिलिपि क्षेत्र
  • Cx (: प्रारंभ कुंजीपटल मैक्रो
  • Cy: झटका लाइन की नकल की
  • सी-एक्स): एंड कीबोर्ड मैक्रो
  • सी -9 सी-एक्स ई: कीबोर्ड मैक्रो नौ बार निष्पादित करें।

तरह का कमजोर है कि vim की तुलना में। लेकिन केवल इसलिए कि इस तरह की चीज पर विम आश्चर्यजनक रूप से कुशल है।

तुम सच में मोडल vi की तरह बातचीत के लिए pining रहे हैं, तो आप इस तरह के सांप-मोड के रूप में vi अनुकरण मोड, में से एक इस्तेमाल कर सकते हैं। ऑनलाइन emacs मैनुअल के अनुभाग "इम्यूलेशन" में जांचें।

+1

हे हे, यह 8 कीस्ट्रोक की तुलना में 10 की तुलना में केवल सी-वाई की धुन की बात दस गुना है। मैं गारंटी देता हूं कि मैं सी-वाई दस गुना तेज टाइप कर सकता हूं, इससे पहले कि मैं इसे टाइप कर सकूं। – Baxissimo

7

आप इसे जानते हैं, लेकिन के लिए कई आदेश "सी-यू 10" उपसर्ग चाल करेगा। दुर्भाग्यवश सी-वाई यांक कमांड के लिए, "सी-यू" का मतलब है "हत्या की अंगूठी में कई चीजें वापस जाएं, और उस वस्तु को यंक करें"।

मैंने सोचा कि आप उपयोग करने में सक्षम हो सकता है की नकल करने के लिए रजिस्टर और डालने से रजिस्टर सी-यू उपसर्ग कमांड के साथ आदेश, लेकिन जाहिरा तौर पर है कि या तो काम नहीं करता।

इसके अलावा सी-एक्स जेड, "अंतिम आदेश दोहराएं" सी-यू के प्रति प्रतिरोधी प्रतीत होता है।

एक और विचार एम- का उपयोग करना होगा: एक इवल प्रॉम्प्ट प्राप्त करने के लिए और थोड़ा सा कुरकुरा टाइप करें। मैंने सोचा कि कुछ ऐसा है (dotimes '10 'yank) ऐसा कर सकता है, लेकिन ऐसा प्रतीत नहीं होता है।

तो यह एक मैक्रो पर सी-यू का उपयोग कर वास्तव में सबसे अच्छा आप अपने खुद के छोटे से समारोह लेखन की कमी कर सकते हैं हो सकता है की तरह लग रहा है।

क्या मैं एक वोट था, मैं क्रोनोज़ उत्तर के लिए वोट दूंगा।

+5

(dotimes '10 (yank)) मेरे लिए काम करता है – quodlibetor

+0

मैं दूसरा सी-यू (न्यूनतम वर्ण सीमा स्पूफिंग)। – ychaouche

3

यहां एक ऐसा कार्य है जिसे मैंने ओएसएक्स के ओएस/2 बंदरगाह से लिया है। (हाँ, मैं थोड़ी देर के लिए Emacs का उपयोग कर रहे हैं।)

;; Author: Eberhard Mattes <[email protected]> 
(defun emx-dup-line (arg) 
    "Duplicate current line. 
Set mark to the beginning of the new line. 
With argument, do this that many times." 
    (interactive "*p") 
    (setq last-command 'identity) ; Don't append to kill ring 
    (let ((s (point))) 
    (beginning-of-line) 
    (let ((b (point))) 
     (forward-line) 
     (if (not (eq (preceding-char) ?\n)) (insert ?\n)) 
     (copy-region-as-kill b (point)) 
    (while (> arg 0) 
     (yank) 
     (setq arg (1- arg))) 
    (goto-char s)))) 

मुझे लगता है कि F9 घ करने के लिए बाध्य है:

(global-set-key [f9 ?d] 'emx-dup-line) 

तब मैं Cu 10 F9 घ का उपयोग करेंगे एक लाइन नकल करने के लिए 10 बार।

-1

आपको सी-के साथ लाइन मिलती है, तो आप अगली कमांड सी-यू 10 के साथ दस बार करते हैं, फिर आप सी-वाई के साथ लाइन पेस्ट करते हैं। बहुत साधारण।

यदि आप हमेशा सी-के पूरे लाइन को करना चाहते हैं, तो आप टी को मारने के लिए पूरी लाइन सेट कर सकते हैं। सी-ए या सी-ई के साथ और अधिक झुकाव नहीं।

फैंसी मारने के छल्ले, रजिस्टरों और मैक्रोज़ के साथ आप बहुत कुछ कर सकते हैं, और मैं आपको उन्हें सीखने के लिए प्रोत्साहित करता हूं, लेकिन दस बार लाइन को झुकाव कठिन या अजीब नहीं होना चाहिए।

+1

अच्छा अनुमान है, लेकिन क्या आपने वास्तव में इसे आजमाया? सी-यू उपसर्ग आदेश सी-वाई के साथ कॉम्बो में उपयोग किए जाने पर हत्या की अंगूठी से यंक तक कौन सा तत्व चुनता है। यह 10 बार कमांड दोहराता नहीं है। – Baxissimo

6

आपको इस उदाहरण में सी-एक्स दोनों और सी-एक्स ई की आवश्यकता नहीं है।

आप केवल दोहराना तर्क सीधे सी-एक्स को दे सकते हैं)। यह रिकॉर्डिंग बंद कर देता है और मैक्रो को एक चरण में दोहराता है। या आप सी-एक्स छोड़ सकते हैं) और सीधे सी-एक्स ई पर जाएं, क्योंकि सी-एक्स ई दोहराने से पहले रिकॉर्डिंग समाप्त कर देगा।

चुनने का कौन सा तरीका इस बात पर निर्भर करता है कि आप काम करने के लिए अपनी दोहराना गणना कैसे पसंद करते हैं। सी-एक्स के लिए) आप कहते हैं कि आप कुल में कितनी बार दोहराना चाहते थे (इसलिए इस मामले में 10)। सी-एक्स के लिए आपको यह कहना होगा कि कितने अधिक दोहराए गए हैं (यानी 9)।


सी-एक सी कश्मीर सी-कश्मीर भी अनुगामी न्यू लाइन मारने ताकि आप इसे बाद अपने आप को वापस डाल करने के लिए की जरूरत नहीं है जाएगा। यह चिह्न का उपयोग करने से तेज़ है, और आपको किसी भी चर को बदलने की आवश्यकता नहीं है।

यहां तक ​​कि बेहतर (जब तक कि आप टर्मिनल में न हों), आप पूरी लाइन को मारने के लिए सी-एस-बैकस्पेस * का उपयोग कर सकते हैं, भले ही आप इसमें हों।

[* यदि आप एक्स विंडोज़ का उपयोग कर रहे हैं, पाली (नहीं alt) टाइप करने के लिए सुनिश्चित करें या आप अपने सत्र समाप्त कर सकते हैं!] एम-9 यदि आप एक अच्छा विकल्प है

टर्मिनलों के भाषण, लगता है कि आप सी-9 टाइप नहीं कर सकते हैं।


Emacs 22 और उच्चतम में, डिफ़ॉल्ट रूप से F3 एक मैक्रो शुरू करता है और F4 अंत/मैक्रो दोहराता है। रिकॉर्डिंग शुरू करने के लिए आपने केवल F3 दबाया है, जब आप पूरा कर चुके हैं तो F4 दबाएं, और मैक्रो को दोहराने के लिए फिर से F4 दबाएं। (F4 भी एक तर्क लेता है।)


सब एक साथ इस लाना, वर्तमान पंक्ति के 10 प्रतियां प्राप्त करने के लिए:

  • CS-बैकस्पेस: इस लाइन को मारने
  • F3: मैक्रो शुरू
  • Cy: लाइन
  • सी -1 सी 0 एफ 4 झटका: बनाना है कि 10 yanks

वाई वाई 10 पी जितना छोटा नहीं है, लेकिन बहुत करीब है।

(defun yank-n-times (arg) 
    "yank prefix-arg number of times. Not safe in any way." 
    (interactive "*p") 
    (dotimes 'arg (yank))) 

सेट है कि कुछ महत्वपूर्ण करने के लिए, यह एक उपसर्ग तर्क के साथ कहते हैं, और बंद तुम जाओ: :) मैं इस defuned

0

Baxissimo के जवाब के आधार पर।

संपादित (भी संशोधित ऊपर इंटरैक्टिव कॉल कम घटिया होने के लिए)

या, यहाँ एक संस्करण है कि एक तरह से झटका पॉप की जगह ले सकता है:

(defun yank-n-times (&optional arg) 
    "yank prefix-arg number of times. Call yank-pop if last command was yank." 
    (interactive "*p") 
    (if (or (string= last-command "yank") 
     (string= last-command "yank-pop")) 
     (yank-pop arg) 
    (if (> arg 1) 
    (dotimes 'arg (yank)) 
     (message "Previous arg was not a yank, and called without a prefix.")))) 

संदेश एक की तरह है झूठ बोलो, लेकिन आपको इसे 1 से अधिक के उपसर्ग के बिना कॉल नहीं करना चाहिए, इसलिए।

यह सुनिश्चित नहीं है कि यह एक अच्छा विचार है, लेकिन मैंने एम-वाई को इसके साथ बदल दिया, मैं देखता हूं कि यह कैसे जाता है।

0

आपको एक पंक्ति (या एक क्षेत्र) कम कीस्ट्रोक्स के साथ दस बार झटका सकता है:

C-w C-x (C-y C-1 C-0 C-x):

  • एक पंक्ति (या क्षेत्र)
  • चयनित पाठ 10 बार झटका निशान

    वैकल्पिक रूप से, कीबोर्ड मैक्रो शुरू करने और समाप्त करने के लिए F3 और F4 फ़ंक्शन कुंजियों का उपयोग करें:

    C-w F3 C-y C-1 C-0 F4

संबंधित मुद्दे