क्या ctrl-w (शब्द हटाना) को कॉन्फ़िगर करना संभव है?


40

आम तौर पर, Ctrl+ Wअंतिम व्हाट्सएप पर वापस हटा देता है।

क्या अतिरिक्त वर्णों का उपयोग करने के लिए इसे कॉन्फ़िगर करना संभव है, जैसे कि /?

संपादित करें: अधिक स्पष्ट होने के लिए: मैं इसके लिए कुंजी को कॉन्फ़िगर नहीं करना चाहता, मैं चाहता हूं कि विलोपन भी बंद हो /

उदाहरण:

vim /foo/bar^W
vim /foo/

जवाबों:


29

मेरे लिए क्या काम किया गया था मेरे .bashrc में निम्नलिखित पंक्तियों को जोड़ना

stty werase undef
bind '\C-w:unix-filename-rubout'

आपको अपरिभाषित पंक्ति की आवश्यकता है अन्यथा बैश आपके नए बंधन को अनदेखा करता है C-w


3
यह ध्यान दिया जाना चाहिए कि stty werase undefआपको किसी भी कार्यक्रम में सीडब्ल्यू का उपयोग करने से रोकना होगा (बाइंड आपको रीडलाइन में उपयोग करने की अनुमति देगा)
0fnt

24

आपको Esc, फिर बैकस्पेस को स्लैश द्वारा सीमांकित शब्दों को हटाने में सक्षम होना चाहिए।

आप इसे .bashrc में डालकर इसे बदल सकते हैं:

bind '\C-f:unix-filename-rubout'

अब Ctrl+f आप जो चाहते हैं वह करने के लिए उपयोग करें।


1
धन्यवाद, यह आदेश है कि काम करता है। क्या Cw की कमांड को अधिलेखित करने का एक तरीका है? अगर मैं इसे बदल देता हूं C-w:..., तो अगले स्थान पर हटाने का डिफ़ॉल्ट व्यवहार अभी भी ठीक काम करने पर एक अलग कुंजी (जैसे एफ) पर किक करता है।
स्कवेरैट

मुझे नहीं लगता कि ctrl-w अकेले शेल द्वारा प्रबंधित किया जाता है। यह tty द्वारा भी प्रबंधित किया जा सकता है। आपके tty सेटिंग द्वारा stty -aक्या दिखाया गया है ? क्या आपके पास वेयरसे के लिए डिफ़ॉल्ट चार के रूप में नियंत्रण-डब्ल्यू है? यदि आप टैटी से उस सेटिंग को कॉमन के साथ हटाते हैं stty werase undef, तो क्या उम्मीद के मुताबिक काम करता है?
इप्सुइग

23

इस विशिष्ट समस्या के लिए, आप भी उपयोग कर सकते हैं:

Alt + Backspace

$ cd /home/me/test/a_dir/    # Alt + Backspace
$ cd /home/me/test/          # Alt + Backspace
$ cd /home/me/               # ...

अच्छा संदर्भ: बैश शब्द के साथ एडवेंचर्स मिट जाता है


2
बहुत बढ़िया! अधिकांश अन्य उत्तर रिबाइंडिंग Ctrl+wया Ctrl + b या कुछ करने का सुझाव देते हैं unix-filename-rubout, लेकिन यह इतना बेहतर है कि इसमें अंतर्निहित बाइंडिंग है: M-backspace (Alt + backspace या Esc backspace)
कॉलिन डी बेनेट

मेरे लिए काम नहीं किया
ethanjyx

@ethanjyx ओह। मैं ग्नू बैश पर काम कर रहा हूं। क्या आप भी इस स्वाद में हैं?
फेडोरक्वि

7

बैश के साथ, आप अपनी ~ / .bashrc फ़ाइल में निम्नलिखित डालकर, वांछित प्रभाव प्राप्त कर सकते हैं:

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

मारो CTRL+Vऔर अपने कुंजी संयोजन को देखने के लिए कि यह आपके टर्मिनल एमुलेटर के लिए कैसा दिखता है। उदाहरण के लिए CTRL+bkspअलग-अलग टर्मिनलों पर अलग-अलग व्याख्या की जा सकती है जैसे ^Hया ^?^चरित्र के रूप में ही है CTRL


मुझे लगता है कि मैं अपने प्रश्न के साथ पर्याप्त विशिष्ट नहीं था। मैं /एक अतिरिक्त स्टॉप-कैरेक्टर के रूप में काम करना चाहता था , न कि डिलीट-वर्ड-कमांड को दूसरी कुंजी पर बाँधने का तरीका। मैंने अपना प्रश्न संपादित किया
SkaveRat

बैकवर्ड-किल-वर्ड को \ _w पर बाँधने का प्रयोग करने पर, यह अंतिम दिए गए फ़ॉरवर्ड स्लैश में पीछे की ओर जाएगा यदि एक शब्द में मौजूद है और यह व्हाट्सएप द्वारा सीमांकित शब्दों को मिटा देगा। यह वह नहीं है जो आप चाहते थे?

मेरी प्रणाली का उपयोग करता है ^F- लेकिन "\^F"ऊपर की स्क्रिप्ट में उपयोग करने से काम नहीं होता है
SkaveRat

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