बैश: क्या मैं पिछड़े शब्द को हटाने के लिए Ctrl-Backspace सेट कर सकता हूं?


19

जब शेल (बैश) में - मैं "बैकवर्ड शब्द हटाना" के लिए Ctrl-Backspace बाँधना चाहता हूँ। क्या यह संभव है?

संपादित करें :

मैं konsoleकेडीई में टर्मिनल का उपयोग कर रहा हूं ।


2
सवाल सीधा है, इस बारे में कोई शिकायत नहीं है। मैं केवल यह टिप्पणी करना चाहता हूं कि "मानक" कुंजी बाइंडिंग को सुविधाजनक बनाने के लिए अक्सर बहुत कुछ होता है जो पहले से ही कई अनुप्रयोगों में मौजूद है, बजाय इसके कि कोई वास्तविक लाभ और विदेशी प्रणालियों पर व्यवहार को कभी न देखने की निश्चितता को अनुकूलित करना। Ctrl+wयह है कि आप क्या करने के लिए आदी होना चाहिए, imho।
डैनियल एंडरसन

@ डैनियल एंडरसन: या वैकल्पिक रूप से - आप अपनी सेटिंग्स को विदेशी मशीन में स्थानांतरित करने का एक तरीका विकसित कर सकते हैं ।
Adobe

डॉटफ़ाइल्स को साझा करना एक हल की गई समस्या है, लेकिन यह कम या ज्यादा स्थानीय कंप्यूटरों की तुलना में अन्य पर बहुत मदद नहीं करती है जहाँ आपके पास बहुत अधिक विशेषाधिकार हैं। यदि आप एक विदेशी प्रणाली पर हैं, तो आपको सबसे अधिक संभावना है कि इस तरह की चीजों को फिर से कॉन्फ़िगर करने की आजादी नहीं है (कम से कम बिना सहकर्मियों द्वारा टक्कर दिए बिना जो एक ही मशीन का उपयोग करते हैं :-))। साथ ही, हर नए एप्लिकेशन को विशेष उपचार की आवश्यकता होगी।
डैनियल एंडरसन

6
मुझे उलटा समस्या है, मुझे Ctrl-wकंसोल में "पिछले शब्द को हटाने" के रूप में उपयोग किया जाता है , और इसे एक्लिप्स या क्रोम में भी वृत्ति के द्वारा किया जाता है, जहां इसका मतलब क्लोज टैब / क्लोज करंट फाइल है। काफी कष्टप्रद।
एज़ेक्विअल मुन्स

1
मुझे Chrome SShInATab के साथ भी यही समस्या है। मैं बिना ctrl-W के ctrl-W कैसे करूं? :)
रिकार्डो एससीई

जवाबों:


11

क्यों न केवल Alt+ Backspaceया Ctrl+ का उपयोग करें Wजो पहले से ही अधिकांश टर्मिनलों में मैप किए गए हैं। कंसोल के बारे में निश्चित नहीं है। Xmodmap (आदमी xmodmap) का उपयोग अन्य कस्टम कुंजी को हटाने के लिए भी किया जा सकता है। (विरोधाभासी रूप से, xmodmap बैकस्पेस को बहुत अच्छी तरह से रिमैप नहीं कर सकता क्योंकि टर्मिनल मैपिंग को ओवरराइड करता है, लेकिन यह अधिकांश कुंजियों के साथ अच्छी तरह से काम करता है ...)।


9
क्योंकि मैं अपने Emacs में Ctrl-Backspace इस्तेमाल करता था। मुझे Ctrl-w के बारे में पता था। Alt-Backspace मेरे लिए नया है (+1)।
Adobe

1
अच्छी बात है, @hellork। आप एक्स सर्वर पर (xmodmap के माध्यम से) नियंत्रण + बैकस्पेस को रोक सकते हैं और इसे कुछ अप्रयुक्त चरित्र (जैसे कि ऑल-बैकस्पेस) के लिए मैप कर सकते हैं।

4
इसके बारे में कष्टप्रद बात यह है कि ctrl + backspace अधिकांश प्रमुख ऑपरेटिंग सिस्टम पर GUI ऐप्स में "शब्द को पीछे की ओर हटाएं" के लिए वास्तव में एक सामान्य मानचित्रण है। इसी तरह, Ctrl + W "क्लोज विंडो" के लिए विस्तृत है। GUIs में किसी भी चीज़ के लिए Alt + w का उपयोग शायद ही कभी किया जाता है, जिसके बारे में मैं सोच सकता हूं। मानकीकरण महान होगा। मुझे आश्चर्य है कि बड़े विघटन, बदलते टर्मिनलों या जीयूआई को बदलना क्या होगा?
n

1
@naught, Control-W यूनिक्स टर्मिनलों पर पहले से ही डिफ़ॉल्ट शब्द-मिटा कुंजी है। हाँ, यह विंडोज / जीयूआई सम्मेलन के साथ संघर्ष करता है, लेकिन वास्तव में यह पहले आया था - कई वर्षों से। Microsoft को दोष दें!
एलेक्सिस

11

मुझे यह धागा Google के माध्यम से मिला, लेकिन इसका उत्तर वह नहीं था जो मैं सुनना चाहता था। इसलिए मैंने आसपास खेला:

मेरे टर्मिनल पर, सामान्य बैकस्पेस भेजता है ^H, जबकि ctrl + बैकस्पेस भेजता है ^?। तो यह ^?एक शब्द को हटाने के लिए रीबाइंडिंग का मामला होना चाहिए , जो डिफ़ॉल्ट रूप से Ctrl + W के माध्यम से उपलब्ध है।

पहली (असफल कोशिश):

$ bind -P | grep 'C-w'
unix-word-rubout can be found on "\C-w".

इसलिए यह काम करना चाहिए:

$ bind '"\C-?":unix-word-rubout'

हालांकि यह नहीं है ... किसी को समझाने में सक्षम?

दूसरी (सफल) कोशिश:

$ bind '"\C-?":"^W"'

जहाँ ^Wएक शाब्दिक / कच्चा ^W(प्रेस ctrl + V है तो ctrl + W इसे प्रदर्शित करने के लिए)।


आपके पहले समाधान ने मेरे लिए काम किया, वास्तव में! दूसरा नहीं किया।
ड्रू होस्किन्स

दूसरा प्रयास Ctrl-Backspace के बजाय स्वयं बैकस्पेस को बदलने का लगता है?
user541686

7

बस अपना संपादन करें ~/.inputrc(आपको एक बनाने की आवश्यकता हो सकती है या एक को /etc/inputrcवहां कॉपी करना होगा) ताकि उसमें यह शामिल हो:

# Ctrl-Delete: delete next word
"\e[3;5~": shell-kill-word

# Ctrl-Backspace
"\C-H": shell-backward-kill-word

यह कर्सर के बगल के शब्द को हटाने के लिए भी Ctrl+ मैप करेगा Delete


मेरे लिए काम नहीं करता है।
जोनाथन

6

वहाँ कुछ अच्छा जवाब यहाँ हैं, लेकिन मैं सेटिंग्स> संपादित करें वर्तमान प्रोफाइल-> कीबोर्ड-> संपादित साथ कंसोल में इसे हल है, तो से एक मानचित्रण जोड़ने Backspace+Controlके लिए \x17। (मुझे Ctrl-w के उपयोग के लिए ASCII कोड मिला showkey --ascii।)


के साथ बात को इंगित करने के लिए धन्यवाद showkey। इस प्रकार मैं समझ गया कि ALT+Dकर्सर के सामने डिलीट शब्द के लिए अनुरूप होगा \x1b\x64
लोकी

धन्यवाद, इसने मेरी समस्या हल कर दी। मेरे मामले में मुझे Alt + Backspace को हटाने की आवश्यकता है और इसका क्रम है \x1b\x7f
DDMC

3

यह इस बात पर निर्भर करता है कि बैश क्या देखता है। नियमित टर्मिनल इंटरैक्शन पर, बैश यह नहीं देखता है कि आपने कौन से प्रमुख संशोधक दबाए हैं, केवल परिणामस्वरूप चरित्र। उदाहरण के लिए बैकस्पेस पहले से ही नियंत्रण-एच के समान है। नीचे शिफ्ट या कंट्रोल रखने से कोई फर्क नहीं पड़ता।

कैसे, अपने टर्मिनल आवेदन (xterm? Cmd? टर्मिनल? पोटीन? अपने ओएस पर निर्भर करता है) अपने keypresses देख सकते हैं, और कुछ बैश करने के लिए नियंत्रण-बैकस्पेस कुंजी संयोजन को मैप करने का एक तरीका हो सकता है जो बैकस्पेस के अलावा बता सकता है।


मैंने पाया कि मेरा बैश बैकस्पेस नहीं दिखता है। लेकिन यह संभव है कि यह देखने के लिए है कि हो सकता है।
Adobe

@ आदो, तुम्हारा क्या मतलब है? अपने टर्मिनल पर 'स्ट्टी' टाइप करें और फिर इसके बारे में मैनुअल पढ़ें। यदि ^ H आपके मिटाए गए चरित्र के लिए सेट है, तो आप इसे किसी अन्य चीज़ पर सेट कर सकते हैं ... यदि आपके पास एक अच्छा कारण है।

1
यह कैसे github.com/calj/gtconf/blob/master/zsh/zshrc पर ऐसा करने का एक अच्छा उदाहरण है । कॉनसोल आपको ऐसा करने देता है। * .Keytab फ़ाइलों में से किसी एक को / usr / share / kde4 / apps / konsole / में ~ / .kde / share / apps / konsole से कॉपी करें और ऊपर दिए गए लिंक में सुझावों के साथ इसे संशोधित करें, "कुंजी बैकस्पेस" लाइन हटा दें और जोड़ते समय: key Backspace-Shift-Control : "\x7f"और key Backspace-Shift+Control : "\E[9;3~"इसके साथ ही शीर्षक पंक्ति को बदल दें: keyboard "Xfree4 Modlist"उदाहरण के लिए। फिर आप "\e[9;3~": backward-kill-word"~ / .inputrc
एडम

2

इसे इस्तेमाल करे:

bind '"\C-_":backward-kill-word'

वैकल्पिक रूप से इसे स्थायी बनाने के लिए ~ / .inputrc में निम्न जोड़ें:

"\C-_": backward-kill-word

कुबंटु 14.04 में बैश 4.3.11 पर काम करता है


2
नियंत्रण-बैकस्पेस नियंत्रण-अंडरस्कोर के समान होने की संभावना नहीं है।
थॉमस डिके

1
सभी चीजों में से मैंने इस धागे में कोशिश की, यह काम किया! "GNU बैश, संस्करण 4.3.48 (1) -release (x86_64-pc-linux-gnu) का उपयोग करके" bash on windows / WSL
Markus Jevring

यह मेरे लिए cygwin में बहुत काम करता है, का उपयोग करके GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin)
ज़गयी

1

कोनो कंसोल में:

  • क्लिक Settings -> Edit current profile
  • 'कीबोर्ड' टैब -> पर क्लिक करें [Edit...]
  • [Add]बटन पर क्लिक करें और Key Combinationकॉलम प्रकार के तहत Backspace+Ctrl। में Outputस्तंभ प्रकार 0x08(जो पारंपरिक बैकस्पेस चरित्र है)

अब आप के लिए है कि कुंजी मैप करने के लिए सक्षम होना चाहिए backward-kill-wordके माध्यम से

# ~/.bashrc

bind '"\x08":backward-kill-word'

धन्यवाद। मेरे लिए, कम से कम xfce4- टर्मिनल में काम करता है।
मर्यादा

0

अधिकांश टर्मिनलों पर CTRL + W को पहले से ही एक शब्द को पीछे हटाना चाहिए। यह xterm के साथ काम करता है और मुझे लगता है कि यह konsole के साथ काम करता है। CTRL + W टेक्स्ट-आधारित प्रोग्राम पर एक मानक कुंजी बाइंडिंग है जो इन्सर्ट मोड, ईमैक्स और हर शेल में विम के साथ काम करेगा।


5
मुझे Ctrl-w को Emacs, FireFox, Krusader में "क्लोज़ टैब" में बाँध दिया गया है - इसलिए मैंने इसे कंसोल में भी टैब-क्लोजिंग संयोजन के रूप में सेट किया।
एडोब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.