Emacs में गैर-सन्निहित क्षेत्रों का चयन कैसे करें?


31

मान लीजिए कि मैंने पहले से ही वर्तमान बफर में कुछ पाठ का चयन किया है। क्या पिछले चयन (और इसी तरह) को ध्यान में रखते हुए पाठ का एक और खिंचाव चुनना संभव है?

जोड़ा गया : इस कार्यक्षमता के लिए एक प्रेरणा इस प्रकार है: मान लें कि मेरे पास कुछ पाठ है जो इस तरह दिखता है:

paragraph 1 ...

paragraph 2 ...

paragraph 3 ...

paragraph 4 ...

paragraph 5 ...

मैं कुछ पैराग्राफ (जैसे 2, 4 और 6) को निकालना चाहूंगा और उन्हें पैराग्राफ 1 से पहले डालूंगा।



2
एक पैकेज मल्टीसेलेक्ट है : skamphausen.de/cgi-bin/ska/multiselect यह एक तेज हैक की तरह दिखता है।
टोबियास

आप जो चयन कर रहे हैं और क्यों कर रहे हैं, उसके आकार के आधार पर, multiple-cursorsआप एक समाधान दे सकते हैं।
जॉर्डन बियोनडो

@wasamasa मैंने आपके द्वारा दिए गए लिंक में दिए गए निर्देशों का पालन किया। पहले चयन के बाद, मैंने मेटा कीपिंग रखते हुए दूसरे क्षेत्र का चयन किया। इसे चुना गया था, लेकिन दो समस्याएं हैं: (1) दूसरा चयन वास्तविक चयन नहीं लगता है, क्योंकि काम नहीं करना या हटाना है। (२) इस तरह से तीसरा चयन करना संभव नहीं है।
नाम

1
Emacs Wiki का माध्यमिक चयन के बारे में एक अच्छा खंड है । उदाहरण के लिए, विभिन्न संवर्द्धन इसे कीबोर्ड से अधिक उपयोगी बनाते हैं।
ड्रयू

जवाबों:


43

आप उस पाठ को संचित append-next-killकरने के लिए ( C-M-wडिफ़ॉल्ट रूप से बाध्य ) का उपयोग कर सकते हैं जिसे आप ऊपर डालना चाहते हैं paragraph 1:

  1. paragraph 2जैसा कि आप सामान्य रूप से मारेंगे ।

  2. मारने से पहले निशान paragraph 4और दबाएं C-M-w। उन सभी पैराग्राफ के लिए इस चरण को दोहराएं जिन्हें आप पहले स्थानांतरित करना चाहते हैं paragraph 1

जब आप काम पूरा कर लें, तो आप पहले जमा हुए पाठ को यैंक कर सकते हैं paragraph 1


5
यहां तक ​​कि बुनियादी सामान के साथ, सीखने के लिए हमेशा कुछ नई चीजें होती हैं! यह बहुत उपयोगी है, क्योंकि जब मुझे ऐसा करने की आवश्यकता होती है, तो मैं आमतौर पर किल रिंग की यात्रा करके बहुत अधिक महत्वपूर्ण दबाव को बर्बाद कर देता हूं। काश मैं इसे कुछ और बढ़ा पाता ...
सार्थक यूजरनेम

9

आप मार्क रिंग के साथ संयुक्त रजिस्टरों का उपयोग कर सकते हैं। वर्तमान चिह्नों को साथ रखें C-<SPC> C-<SPC>, बाद में उन्हें पुनर्प्राप्त करें C-u C-<SPC>, या उन्हें एक रजिस्टर में सहेजें, कहें b, के माध्यम से C-x r <SPC> b, और बाद में वापस कूदें C-x r j b

अब दूसरे क्षेत्र को चिह्नित करें। पाठ C-u C-x r s aको पंजीकृत करने aऔर हटाने के लिए चिह्नित क्षेत्र की प्रतिलिपि बनाएगा । फिर अगले क्षेत्र को चिह्नित करें और C-u C-x r + aउस रजिस्टर में एक और चयन जोड़ देगा aऔर इसे हटा देगा।

इसके बाद आप सामग्री डाल सकते हैं C-x r i a

Emacs मैन्युअल के "रजिस्टर में रजिस्टरिंग सेविंग" अनुभाग देखें।


5

Emacs-24.4 में नए आयत-क्षेत्र समर्थन वास्तव में शुरू की बुनियादी सुविधाओं के इस कार्यक्षमता के लिए आवश्यक (का एक बड़ा हिस्सा) [सब के बाद, एक आयताकार क्षेत्र है एक गैर-निरंतर क्षेत्र]।

इसलिए, अब "स्प्लिट-रीजन" पैकेज लागू करना संभव है, जो आपके द्वारा मांगी जा रही कार्यक्षमता प्रदान करता है।

माना जाता है कि बहुत सारे Emacs कमांड अभी भी नए इन्फ्रास्ट्रक्चर (जैसे कि upcase- रीजन, या पूर्ववत क्षेत्र, क्वेरी-रिप्लेसमेंट, ...) का उपयोग करने के लिए अनुकूलित नहीं किए गए हैं और इसलिए अभी तक आयतों पर ठीक से काम नहीं करते हैं (इसलिए वे "स्प्लिट-रीजन" पर भी ठीक से काम नहीं करेंगे), लेकिन ये ऐसे बग हैं जो उम्मीद के साथ समय के साथ तय होने चाहिए।


4

ब्राउज़-किल-रिंग.एल स्थापित करें

ब्याज के सभी क्षेत्रों की प्रतिलिपि बनाएँ और मारें।

उस बिंदु पर गया, जहां पुन: सम्मिलित होना चाहिए।

M-x browse-kill-ring RET एक बफर खोल देगा और इसमें कर्सर रखेगा।

nयात्रा के प्रकार ।

RET मूल / अन्य बफर में बिंदु पर चंक को सम्मिलित करेगा।


3

यदि आप जिन लाइनों में हेरफेर करना चाहते हैं, उन्हें एक रेक्सक्स मैच के माध्यम से पहचाना जा सकता है, तो आप उन्हें एक नई विंडो में देखने के लिए आ -मोड का उपयोग कर सकते हैं। तब आप उन्हें संपादित करने के लिए ओरिजनल -एडिट-मोड का उपयोग कर सकते हैं, ऑरिजनल बफर में आपके द्वारा किए गए परिवर्तनों को दर्शाते हुए मूल बफर के साथ।

यह आश्चर्यजनक रूप से काम करता है, उदाहरण के लिए, कई-कर्सर-मोड के संयोजन में : क्योंकि आपने जिन रेखाओं को ऑवर बफर में प्रदर्शित करने के लिए चुना है, वे मूल रूप से इस बात की परवाह किए बिना प्रदर्शित होते हैं कि वे मूल बफर में कितनी दूर हैं, आप उन सभी को चिह्नित कर सकते हैं या एक सबसेट और फिर सक्रिय mc/edit-linesकरें और उन सभी को एक साथ संपादित करें। (हां, मुझे पता है कि कई-शापदाता यह सब अपने आप से कर सकते हैं mc/mark-all-like-this, लेकिन विकल्प होना अच्छा है।)

कोई अन्य संपादन ऑपरेशन जो अधिक आसानी से किया जाएगा यदि आप केवल उन पंक्तियों को देख रहे थे जिन पर आप काम करना चाहते थे, जैसे कि एक जटिल रेगेक्स खोज और प्रतिस्थापित करना, या एक मैक्रो जिसे बारी-बारी से बफर की प्रत्येक पंक्ति पर चलाने की आवश्यकता होती है, इस तरह से भी किया जा सकता है।


3

यह आपके सामान्य प्रश्न का उत्तर देता है, लेकिन विशेष रूप से आपके द्वारा उल्लेखित केस (कोड के बिट्स के घूमने) के उपयोग के लिए नहीं।

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

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

यदि आप लाइब्रेरी बुकमार्क + का भी उपयोग करते हैं, तो आप ज़ोन की सूचियों को लगातार बचा सकते हैं और उन्हें बाद के Emacs सत्रों में पुनर्स्थापित कर सकते हैं। बुकमार्क + आपको एक बुकमार्क पर मनमाने टैग लगाने की सुविधा भी देता है। इसका मतलब है कि आप ज़ोन की सूची को टैग कर सकते हैं।

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

ज़ोन बनाने के कई तरीके हैं। सबसे आसान उपयोग में C-x n aसे एक है: यह सक्रिय क्षेत्र से एक क्षेत्र को परिभाषित करता है, और इसे वर्तमान क्षेत्र सेट में जोड़ता है। ( C-x n n( narrow-to-region) संकीर्णता के अलावा भी ऐसा करता है।)

ये कुछ चीजें हैं जो आप ज़ोन के सेट (सूची) के साथ कर सकते हैं:

  • उन्हें क्रमबद्ध करें।
  • समीपस्थ (अतिव्यापी) या समीपवर्ती क्षेत्र (जिसमें उन्हें छांटना शामिल है)।
  • उन्हें आत्मसात करें।
  • सूची में एक क्षेत्र में बफर को संकीर्ण करें। संकीर्णताओं के बीच चक्र। एकाधिक संकीर्णताएँ देखें ।
  • सक्रिय क्षेत्र के रूप में सूची में एक क्षेत्र का चयन करें। क्षेत्रों के बीच चक्र।
  • उन्हें खोजें (वे पहले स्वतः एकजुट हो जाते हैं)। इसके लिए आपको लाइब्रेरी Isearch + की आवश्यकता है ।
  • उन पर क्वेरी-प्रतिस्थापित करें।
  • उन्हें हाइलाइट करें और अनहेल्दी करें। (इसके लिए आपको लाइब्रेरी हाईलाइट या लाइब्रेरी चाहिए facemenu+.el

नैरो इनडायरेक्ट भी देखें , जो आपको अप्रत्यक्ष बफ़र्स बनाने देता है जो किसी दिए गए बफ़र के क्लोन हैं और जो इसके अलग-अलग हिस्सों में संकरे हैं।


2

एक अन्य विकल्प: पैराग्राफ को बदलना

पूर्णता की खातिर, आप चिह्नित क्षेत्रों के साथ पैराग्राफ (क्रमिक रूप से) के अपने पुनर्मूल्यांकन को प्राप्त कर सकते हैं और M-0 M-x transpose-paragraphशून्य तर्क tra-parउन पैराग्राफों को स्वैप करता है जहां बिंदु और चिह्न अंदर होते हैं, यानी क्षेत्र शुरू होता है और समाप्त होता है)!

वैसे यह सभी transpose-.*कमांड (-words, -sexp, -sentences, ...) के लिए काम करता है और कई स्थितियों में बेहद उपयोगी है।


2

दूसरा तरीका यह है कि आप मोटे पैकेज (मैं लेखक हूं) का उपयोग करूं । आप किसी भी टेक्स्ट ऑब्जेक्ट को mउस बिंदु के साथ चिह्नित कर सकते हैं जिसे वर्तमान प्रकार के अगले ऑब्जेक्ट पर स्वचालित रूप से ले जाया जाता है। इसे नेविगेट करके किसी भी ऑब्जेक्ट को अनचेक करें और फिर से m दबाएं। यहाँ एक उदाहरण स्क्रैन्कास्ट है (रेखाओं को चिह्नित करता है लेकिन अन्य वस्तुओं जैसे पैराग्राफ, डिफ्यून्स ... साथ ही साथ) के लिए काम करता है:

यहाँ छवि विवरण दर्ज करें


जब मैं Melpa से इस पैकेज को स्थापित करने का प्रयास करता हूं तो मुझे त्रुटि मिलती है package-install-from-archive: http://melpa.milkbox.net/packages/objed-20181201.1346.tar: Not found
नाम

@ ऐसा लगता है कि आपको पैकेज सूची अपडेट करने की आवश्यकता है। कोशिश करो M-x package-refresh-contentsऔर फिर M-x package-install
क्लेमर

@ अब क्या यह काम करता है? अगर आपको कोई शंका हो तो मुझे बतायें।
क्लेमर

मैं पैकेज स्थापित करने में सक्षम था। अच्छा काम करने लगता है, मैंने इसकी सभी विशेषताओं का परीक्षण नहीं किया है। धन्यवाद।
नाम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.