Emacs में बैश में कॉपी और सेट-मार्क?


16

मैं (यानी का उपयोग कर कॉपी और बैश में कमांड लाइन में एक ही कुंजीपटल बाइंडिंग का उपयोग करने में पाठ चिपकाने के लिए सक्षम होना चाहते है कि Emacs डिफ़ॉल्ट रूप से उपयोग करता होगा C-spaceके लिए set-mark, M-w, पाठ की प्रतिलिपि करने के लिए C-y, M-y, पेस्ट करना आदि)।

जीएनयू बैश प्रलेखन का कहना है कि बैश इन प्रमुख बाइंडिंग डिफ़ॉल्ट रूप से की स्थापना से कुछ के साथ आता है।

उदाहरण के लिए, yanking ( C-y) मेरे टर्मिनल पर डिफ़ॉल्ट रूप से काम करता है। हालांकि, मैं नहीं मिल सकता है set-markऔर copyआदेशों काम करने के लिए, और वे डिफ़ॉल्ट रूप से किसी भी कुंजी को बाध्य होने के लिए नहीं है।

आमतौर पर, उपयोगकर्ता जिस तरह से अपनी खुद की कुंजी बाइंडिंग को परिभाषित कर सकता है, वह उन्हें जोड़ने के लिए है .inputrc। इसलिए मैंने दस्तावेज़ीकरण में निम्नलिखित बैश कार्यों को देखा और पाया, जो मुझे लगता है कि मुझे एमएसीएस जैसे व्यवहार को परिभाषित करने में मदद कर सकते हैं जो मैं चाहता हूं (यानी set-markसाथ C-spaceऔर copyसाथ M-w)।

copy-region-as-kill ()

इस क्षेत्र के पाठ को किल बफ़र में कॉपी करें, ताकि इसे तुरंत दूर किया जा सके। डिफ़ॉल्ट रूप से, यह कमांड अनबाउंड है।

तथा

set-mark (C-@)

चिह्न को बिंदु पर सेट करें। यदि कोई संख्यात्मक तर्क दिया जाता है, तो निशान उस स्थिति पर सेट होता है।

अगर मैं सही तरीके से समझूं, तो उपरोक्त का मतलब copy-region-as-killडिफ़ॉल्ट रूप से किसी भी कीबोर्ड अनुक्रम से बाध्य नहीं है, जबकि डिफ़ॉल्ट रूप set-markसे बाध्य है C-@

मैंने C-@अपने टर्मिनल पर कोशिश की , लेकिन मुझे नहीं लगता कि यह चलता है set-markक्योंकि मुझे अपना कर्सर हिलाने पर कोई टेक्स्ट हाइलाइटेड नहीं दिखता। किसी भी मामले में, मैं कुंजीपटल बाइंडिंग (जोड़ने की कोशिश की M-wऔर C-कार्यों के लिए) copy-region-as-killऔर set-markमेरे में ऊपर .inputrcऔर फिर से इसे फिर से लोड करने C-x C-rके लिए, लेकिन यह काम नहीं किया। मुझे पता है कि .inputrcकाम में मेरी अन्य प्रविष्टियां हैं क्योंकि मेरे पास अन्य उपयोगकर्ता-परिभाषित कीबाइंडिंग हैं जो इसमें परिभाषित हैं।

क्या मैं कुछ गलत कर रहा हूं? क्या मुझे कुछ याद आ रहा है?


आप किस संस्करण bashऔर किस टर्मिनल प्रोग्राम का उपयोग कर रहे हैं?
मिकेल

मैं GNU बैश, संस्करण 3.1.17 (1) -release (x86_64-redhat-linux-gnu) का उपयोग gnome-टर्मिनल (टर्मिनेटर पर भी) कर रहा हूं
Amelio Vazquez-Reina

जवाबों:


11

यह चयन को उजागर नहीं करता है, लेकिन अन्यथा मुझे लगता है कि यह ठीक काम करता है।

दौड़ने की कोशिश करो

$ bind -p | grep copy-region-as-kill

यह सुनिश्चित करने के लिए कि C-x C-rवास्तव में काम किया है।

यह कहना चाहिए:

"\ew": copy-region-as-kill

उसके बाद, यह ठीक काम करना चाहिए।

उदाहरण:

$ abc<C-Spc><C-a><M-w> def <C-y>

मुझे देता है

$ abc def abc

अगर आप कभी जानना चाहते हैं कि कहां markहै, बस करो C-x C-x

उदाहरण:

$ <C-Spc>abc<C-x><C-x>

कर्सर को वापस उस स्थान पर रख देंगे जहाँ आपने चिह्न (लाइन की शुरुआत) सेट किया था।

इसके अलावा, मुझे नहीं लगता कि आपको set-markबाध्यकारी जोड़ने की आवश्यकता है । मैंने नहीं किया।

$ bind -p | grep set-mark
"\C-@": set-mark
"\e ": set-mark
# vi-set-mark (not bound)

(ध्यान दें कि ज्यादातर टर्मिनलों भेज C-@जब C-Spcदबाया जाता है। मुझे लगता है तुम्हारा भी करता है।)

यदि यह सब विफल रहता है:

  • उसी टर्मिनल पर Ctrl+ Spaceकाम करता है emacs -nw?
  • क्या अन्य Alt/ Metaशॉर्टकट काम में आते हैं?

1
धन्यवाद! मेरे पास .inputrc में "mw" के बजाय "Mw" था। हाइलाइटिंग की कमी ने भी मुझे भ्रमित किया। सूचक को बाइंड कमांड के लिए धन्यवाद। यह अब एक आकर्षण की तरह काम करता है!
एमिलियो वाज़क्वेज़-रीना

2
स्वागत हे! हाँ, आप लिखने के लिए है \eया \M-रीडलाइन इनिट फ़ाइल सिंटैक्स देखें ।
मिकेल

क्या शानदार जवाब है! धन्यवाद। यह मेरे लिए इसी तरह के मुद्दों को मंजूरी दे दी: डी
एफिशिथ

सेट-मार्क और कॉपी-रीजन-ए-किल वर्क चुपचाप, क्या मैं इस क्षेत्र (ईमैक्स में) को उजागर कर सकता हूं?
मॉस

4

मैं हत्या-क्षेत्र के लिए सीडब्ल्यू भी बांधता हूं । यहाँ मेरे .inputrc:

# देखें http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00033.html
बाइंड-ट्टी-विशेष-वर्ण बंद सेट करें

# मेरी पसंदीदा Emacs कुंजी बाइंडिंग को परिभाषित करें।
"C- @": सेट-मार्क
"Cw": मार-क्षेत्र
"@ एमडब्ल्यू": कॉपी-क्षेत्र-ए-किल
"एम @- /" डबरेव-विस्तार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.