Ctrl-C जैसे बैश शॉर्टकट कुंजियाँ बदलें?


21

मैं कुबंटु 10.04 का उपयोग कर रहा हूं। मैं बैश (टर्मिनल) के लिए कुछ मानक शॉर्टकट कुंजियों को बदलना चाहूंगा।

यहां वे शॉर्टकट हैं जो मैं सेट करना चाहता हूं:

  • Ctrl- Cटर्मिनल में चयनित टेक्स्ट को क्लिपबोर्ड पर कॉपी करने के लिए।

  • Ctrl- Vक्लिपबोर्ड से टर्मिनल में पेस्ट करने के लिए।

  • Ctrl- Zटर्मिनल में वर्तमान लाइन पर संपादन को पूर्ववत करने के लिए।

  • Ctrl- Shift- C(या इससे भी बेहतर, Super- C) कमांड को समाप्त करने के लिए।

  • Ctrl- Shift- Z(या Super- Z) पृष्ठभूमि कमांड होने के लिए।

  • Ctrl- Shift- V(या Super- V) शाब्दिक डालने आदेश होने के लिए (या जो भी Ctrl- zपहले किया था)।

मैं ये परिवर्तन कैसे करूँ?

BTW, मुझे पसंद है कि जिस तरह टर्मिनल OS X पर काम करता है। कमांड कुंजी का उपयोग सभी कॉपी / पेस्ट कमांड को बहुत सुसंगत बनाता है (OS X में कई अन्य चीजों के विपरीत)।

PS मैं बैश मैन पेज पढ़ता हूं और इससे कोई मदद नहीं मिली। इसने मुझे विचार दिए, लेकिन मुझे उपरोक्त संयोजनों के लिए विशिष्ट उदाहरणों की आवश्यकता है। धन्यवाद।


इनमें से कुछ "शॉर्टकट" को "बैश" में लागू नहीं किया जा सकता है, लेकिन उन्हें टर्मिनल (xterm, gnome-terminal, konsole इत्यादि) पर ही लगाना होगा। उदाहरण के लिए "चयनित टेक्स्ट", "क्लिपबोर्ड"
akul

जवाबों:


10

वे बैश की विशेषताएं नहीं हैं, वे टर्मिनल ड्राइवर की विशेषताएं हैं। जैसे, वे द्वारा निर्दिष्ट कर रहे हैं stty(1)

$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

5
ठीक। सुराग के लिए धन्यवाद। अब, मैं अभी भी अपना लक्ष्य पूरा करना चाहूंगा। और मुझे यह भी पता है कि inputrc Ctrl-C को रीमैप कर सकता है। लेकिन मुझे वास्तव में परवाह नहीं है कि मैं इसे कैसे करता हूं, मैं सिर्फ यह जानना चाहता हूं कि एक टर्मिनल में इन शॉर्टकट को कैसे रिमैप किया जाए।
पॉल

15
यहाँ "मछली" है: stty intr \ ^ k (जहां समाप्ति आदेश, पूर्व में Ctrl-C अब Ctrl-K बन गया है, K कोई भी अल्फा कुंजी हो सकता है) कोई भी "मुझे उस मछली को नहीं दिया"। मैंने इसे अपने दम पर खोजने के लिए कड़ी मेहनत की। इसलिए कहावतों के साथ प्रचार करना आपको एक झटका, आईएमओ जैसा दिखता है।
पॉल

आप इसे Ctrl + Shift + C पर कैसे रीमैप कर सकते हैं?
crypdick

8

यह अब लगभग पूरी तरह से हल हो गया है। समाधान का एक हिस्सा सबसे पहले मेरे ध्यान में लाया गया MTK358 द्वारा http://www.linuxquestions.org/questions/linux-software-2/change-bash-shortcut-keys-such-as-ctrl-c-818170/ । उन्होंने कहा (बल्कि स्पष्ट रूप से, मेरे शर्मिंदगी के लिए बहुत कुछ) तथ्य यह है कि कॉपी और पेस्ट शॉर्टकट कुंजियों को आसानी से konsole की मेनू सेटिंग्स द्वारा बदला जा सकता है। एक बार जब मैंने इसे देखा, तो टर्मिनल के साथ कॉपी और पेस्ट करने के लिए Ctrl-C और Ctrl-V को सेट करने में लगभग 1 मिनट का समय लगा।

समाधान का दूसरा हिस्सा स्टेंट मैन पेज से स्पष्ट होना चाहिए था, लेकिन यह मेरे लिए नहीं था। मैंने विभिन्न सुरागों के आधार पर प्रयोग करना समाप्त कर दिया, जैसे कि ऊपर पोस्ट किए गए।

मैंने निर्णय लिया कि मैं कौन सी गैर-संख्यात्मक कुंजी को समाप्त करने के कमांड के रूप में Ctrl-C को बदलना चाहता था। (मैंने "के" का उपयोग किया)। मुझे कभी भी इस बारे में कोई जानकारी नहीं मिली कि कैसे एक बदलाव संशोधक को डंक मारना है, इसलिए मैंने उस पर ध्यान दिया। उस निर्णय के साथ, मुझे केवल इतना करना था कि कमांड लाइन पर निम्नलिखित दर्ज करें:

stty इंट्रा \ ^ के

मैंने सत्यापित किया कि सब कुछ वांछित के रूप में काम किया।

अब मुझे केवल एक स्टार्टअप स्क्रिप्ट में ऊपर दिए गए एकल कमांड (stty intr \ ^ k) को रखना था। मुझे यकीन नहीं है कि कौन सा "उचित" है। मुझे लगता है कि यह परिवर्तन प्रणाली के लिए व्यापक और स्थायी होगा।

किसी भी सुझाव के रूप में जो स्क्रिप्ट के लिए मैं कमान में जगह चाहिए?

और अंत में, जैसा कि उपदेशात्मक उत्तर देते हैं, वे अनावश्यक और अनैतिक हैं।


क्या आपने कभी यह निर्धारित किया कि "सही" स्टार्टअप स्क्रिप्ट का उपयोग करने के लिए क्या है, या ऐसा करने का एक बेहतर तरीका है? मैं इसी समस्या (आपके मूल प्रश्न) से जूझ रहा हूं। लेकिन जब मैं 'stty intr \ ^ k' को bt ctrl-k बना सकता हूं, तो यह ctrl-c unbinding नहीं है और न ही 'stty intr undef' और न ही 'stty intr = ^ -' करते हैं, ctrl-c अभी भी एक इंटरप्ट भेजता है । और 'स्ट्टी-ए' ने कभी भी मेरे द्वारा किए गए किसी भी बदलाव को नहीं दिखाया।
एरिकस

4

थोड़े से सामान्य केडीई कीबोर्ड शॉर्टकट तंत्र का उपयोग करके सेट किया जा सकता है। कॉनसोल के "सेटिंग्स" मेनू में, "शॉर्टकट कॉन्फ़िगर करें" पर क्लिक करें, और आपको एक संवाद मिलेगा जिसका उपयोग आप केडीई द्वारा नियंत्रित किए जाने वाले कार्यों के लिए प्रमुख बाइंडिंग को बदलने के लिए कर सकते हैं। यह आपको कॉपी करने के लिए Ctrl + C को कॉपी करने और Ctrl + V को पेस्ट करने की अनुमति देगा - लेकिन ध्यान रखें कि एक बार ऐसा करने के बाद, वे महत्वपूर्ण क्रम टर्मिनल के माध्यम से पारित नहीं किए जाएंगे, इसलिए आप उपयोग नहीं कर पाएंगे उदाहरण के लिए, प्रोग्राम को बाधित करने के लिए Ctrl + C।

अन्य कार्यों को readlineपुस्तकालय द्वारा नियंत्रित किया जाता है, जिसे आप फ़ाइल को संपादित करके कॉन्फ़िगर कर सकते हैं ~/.inputrc। वर्तमान लाइन पर किए गए किसी भी संपादन को वापस लेने के लिए Ctrl + Z प्राप्त करना चाहते हैं, आप जोड़ना चाहते हैं

C-z: revert-line

लेकिन वह मुख्य अनुक्रम शायद पहले से ही टर्मिनल द्वारा फंसा हुआ है, इसलिए आपको sttyकाम करने से पहले इसे अनबाइंड करने के लिए उपयोग करना पड़ सकता है । ^Zके उत्पादन में पहली बार देखो stty -a(जैसा कि इग्नासियो के जवाब में दिखाया गया है) और फिर, उदाहरण के लिए, अगर यह अंदर दिखाया गया है susp = ^Z, तो चलाएं

stty susp ^-

उस कुंजी मैपिंग को अनबाइंड करने के लिए।

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


3

बैश कमांड लाइन पर उपयोग emacsया viमोड करता है । इसमें "चयन" या "क्लिपबोर्ड" की कोई अवधारणा नहीं है। यह "किल बफर" और "पॉइंट", "मार्क", "वर्ड", "लाइन", "किल" और "यैंक", आदि जैसी चीजों का उपयोग करता है।

इसमें GUI- स्टाइल फंक्शनलिटी को शूह्र करने की कोशिश करना सबसे अच्छा होगा और यह पूरी तरह से काम नहीं करेगा। आप के कार्यों गठबंधन करने के लिए प्रयास करने के लिए होगा stty, readlineऔर अपने टर्मिनल (संभवतः Terminal.appआप के लिए)। आप इस तरह के रूप में भी कार्य को पुन: मैप करने की आवश्यकता होगी intr, susp, lnextतो आप अभी भी अपने सुविधाओं का उपयोग कर सकते हैं, आदि।

मैं इस तरह के कट्टरपंथी संशोधनों के खिलाफ जोरदार सिफारिश करता हूं। यह सिर्फ वही नहीं करना चाहिए जो आप चाहते हैं।

जब रोम में...


डेव, एक सिस्टम के लिए जो कि OS X की तरह काम करता है, क्या मैं आपको OS X का उपयोग करने का सुझाव दूंगा? जैसा कि डेनिस ने संकेत दिया, भले ही आप इसे काम करने के लिए प्राप्त कर सकते हैं, जब आप कुछ भी लॉग इन करते हैं तो आप बहुत ही शौकीन होंगे, लेकिन आप अपनी मशीन पर।
msw

मैं अन्य आदेशों के लिए वाउच नहीं कर सकता, लेकिन कॉपी और पेस्ट एक कमांड विंडो में सही अर्थों में बनाते हैं और बहुत आसान होते हैं। मैं अन्य विंडो और कंसोल के बीच कॉपी और पेस्ट करने के लिए लगातार उनका उपयोग करता हूं, और कई वर्षों से ऐसा कर रहा हूं। Shift-Ctrl-C और Shift-Ctrl-V बॉक्स के बाहर कोनसोल के लिए इस तरह से काम करते हैं। और यद्यपि मैंने वर्षों से हर दिन ऐसा किया है, मैं अनिवार्य रूप से कोनसोल में Ctrl-c को भूल गया और मारा। निजी तौर पर, मैं "रोम में जब" को लागू करने से रोकने के लिए तैयार हूं और वस्तुतः हर जगह अन्य एप्लिकेशन की तरह काम करने के लिए उन्हें फिर से तैयार कर रहा हूं।
एरिकस

1

मैंने उबंटू चलाया और कॉपी के लिए शॉर्टकट को डिफ़ॉल्ट Ctrl+ Shift+ से बदलकर Cसामान्य और सरल Ctrl+ कर दिया C। हालाँकि इसने मुझे समस्या में चला दिया कि इंटरप्ट कमांड ^ C भेजने में सक्षम नहीं है

@Paul के जवाब की बदौलत मैंने कमांड को चलाया

tty intr \^k

मुझे Ctrl+ का उपयोग करके व्यवधान आदेश भेजने की अनुमति देगा K। हालाँकि इस कमांड को हर बार चलाने की आवश्यकता होती है जब मैं टर्मिनल खोलता हूं जो एक परेशानी है (जैसे उसने खुद का उल्लेख किया है)।

थोड़ा और अनुसंधान के साथ (googling ling) मैंने पाया कि हर बार टर्मिनल को खोलने के लिए एक कमांड को कैसे निष्पादित किया जाता है (उबंटू में)

इस प्रकार, अंत में निम्नलिखित कमांड (एक बार) (उबंटू में 18.04 और संभवतः अधिक) चलने से अपेक्षित व्यवहार हर बार मिल जाएगा।

echo $'# Make Ctrl+K interrupt command in terminal\nstty intr \^k\n' >> ~/.bashrc

अंत में, यह उल्लेख के लायक है कि आपको Kबटन का उपयोग नहीं करना चाहिए । आप अपनी पसंद के किसी भी अक्षर कुंजी के ऊपर दिए गए सभी अक्षरों में k अक्षर का आदान-प्रदान कर सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.