बैश में, कोई वर्तमान इनपुट कैसे साफ़ करता है?


172

मान लीजिए बैश में आप एक कमांड लिखना शुरू करते हैं:

$ rm -rf /foo/bar/really/long/path/here

और तब एहसास होता है कि आप इसे अंजाम नहीं देना चाहते। क्या एक या दो कीस्ट्रोक्स के साथ इनपुट को साफ़ करने का कोई तरीका है?

जो मैं हाल ही में कर रहा हूं वह प्रतिध्वनियों को पूर्ववत कर रहा है और इनपुट को उद्धरणों में संलग्न कर रहा है (Ctrl + A echo ", Ctrl + E ") , फिर एंटर दबाएं । क्या कोई तेज़ तरीका है?


या, मान लीजिए कि आप एक कमांड पेस्ट करते हैं, और यह महसूस करते हैं कि यह गलत एक-लाइनर था। लगभग 20 पात्रों के बाद बैकस्पेस वास्तव में पुराना हो जाता है!
bgStack15

<kbd> Ctrl </ kbd> - <kbd> C </ kbd>, यदि आप इतिहास को stackoverflow.com/a/9679852/6521116
क्रिस रूफ

जवाबों:


286
  1. प्रेस Ctrl- Uकर्सर से पहले सब कुछ हटाने के लिए। हटाए गए आदेश को एक बफर में संग्रहीत किया जाएगा। प्रेस Ctrl- Yहटाए गए कमांड को पेस्ट करने के लिए।

    (वैकल्पिक: पहले इनपुट के अंत में जाने के लिए प्रेस Endया Ctrl- E)

  2. वैकल्पिक रूप से, प्रेस Ctrl- Cगर्भपात करने के लिए जो आप टाइप कर रहे हैं।


28
एक चेतावनी है: Ctrl-C वर्तमान प्रॉम्प्ट को मार देगा, एक नया प्रॉम्प्ट शुरू करेगा, और वापसी कोड को 1. पर सेट करेगा
user716468

14
उस की आदत न डालें, Ctrl-U का उपयोग करें। Ctrl-C बैश में उतना बुरा नहीं है, लेकिन अगर आपके पास उदाहरण के लिए mysql क्लाइंट प्रॉम्प्ट है, तो Ctrl-C सर्वर से डिस्कनेक्ट हो जाएगा जो वास्तव में कष्टप्रद है।
क्रिश्चियन

1
ध्यान दें कि कई प्रणालियों पर, एक टर्मिनल 'किल' वर्ण भी है जो अब तक के इनपुट को मारता है। अक्सर, यह नियंत्रण-एक्स है। आप के साथ जाँच कर सकते हैं stty -a। और वह किसी भी प्रोग्राम के साथ काम करेगा जो टर्मिनल नियंत्रणों को सक्रिय रूप से संशोधित नहीं कर रहा है।
जोनाथन लेफ़लर

Ctrl-A के बाद Ctrl-A भी काम करता है। 'मारा' पाठ संग्रहीत है और आप इसे Ctrl-Y का उपयोग करके पेस्ट कर सकते हैं। ये कीस्ट्रोक्स वास्तव में रीड लाइन लाइब्रेरी से आते हैं: cnswww.cns.cw.c.ru.edu/php/chet/readline/rluserman.html .. इसलिए आप इन्हें किसी भी टूल में पा सकते हैं, जो यूजर इंटरफेस लाइब्रेरी का उपयोग करता है (दरअसल Emacs, bash) आदि..)। आप .inputrc फ़ाइल को संपादित करके इसके व्यवहार को अनुकूलित कर सकते हैं (अधिक जानकारी के लिए ऊपर दिए गए लिंक पर एक नज़र डालें)।
racachach

93

कोशिश Ctrl+ करें U। यह इनपुट लाइन को साफ करता है।


7
धन्यवाद, मैंने लगभग इसे उत्तर के रूप में स्वीकार किया। लेकिन मैंने पाया कि यह कर्सर से पहले केवल इनपुट को साफ करता है। कुछ मामलों में मैं कमांड को संपादित करने के बीच में हूं, इसलिए मैं Ctrl + U के बजाय Ctrl + C को याद रखूंगा क्योंकि "वर्तमान इनपुट को छोड़ दें"।
user85509


21

Ctrl- U, Ctrl- Kचाल भी करता है।

Ctrl- Uकर्सर के लिए लाइन की शुरुआत से सब कुछ हटाता है, Ctrl- Kकर्सर से लाइन के अंत तक सब कुछ हटा देता है। (कभी-कभी उनमें से केवल एक का उपयोग करना उपयोगी होता है।)


13

ऐसा करने के लिए दो विकल्प हैं

ctrl+c - यह पूरी लाइन को साफ करता है, कोई फर्क नहीं पड़ता कि कर्सर कहां है।

ctrl+ u- यह कर्सर की स्थिति से शुरुआत तक लाइन को साफ करता है।


2
"इस बात पर विचार करें कि Cu (या Ce और फिर Cu) का उपयोग करके आप एक बफर में जो कुछ भी स्पष्ट करेंगे उसे स्टोर करेंगे ताकि आप इसे बाद में Cy का उपयोग करके पेस्ट कर सकें।" Markisisme एक सरल एकल कमांड ctrl + _ है। stackoverflow.com/questions/1056440/… john kug द्वारा उत्तर दिया गया - बस स्टैकओवरफ़्लो शुरू न ही आपके उत्तर में टिप्पणी जोड़ने के लिए पर्याप्त बिंदु हैं।
VKS

9

एक अच्छा शॉर्टकट दबा रहा है Esc#। यह एक #चरित्र को प्रस्तुत करेगा (इस प्रकार लाइन को एक टिप्पणी बनाता है) और फिर एंटर दबाएं। यदि आप तब निर्णय लेते हैं कि आपको अभी भी कमांड की आवश्यकता है, तो आप अभी भी इसे अपने इतिहास में रखते हैं :)


3
अधिकांश टर्मिनलों में, यह Alt + # के समान भी है, जो इसे एक (chorded) कीस्ट्रोक बनाता है।
डोडा

एक सरल अभी तक चतुर समाधान है और मुझे लगता है कि यह एक कमांड को रद्द करने का एक अधिक उपयोगकर्ता के अनुकूल तरीका है। वास्तव में मैं क्या खोज रहा था :)
कैस

9

दबाने वाला Escप्लसBackspace टू बैश में कर्सर की स्थिति तक सबकुछ साफ हो जाएगा।

(साइग्विन में, यह अगले शब्द तक इनपुट को साफ कर देगा। शब्दों को रिक्त स्थान, अंडरस्कोर, ... से अलग किया जाता है)


3

इस बात पर विचार करें कि क्या Ctrl- U(या Ctrl- Eऔर Ctrl- U) का उपयोग करके आप एक बफर में जो कुछ भी स्पष्ट करेंगे उसे स्टोर करेंगे ताकि आप बाद में उपयोग करके इसे पेस्ट कर सकें Ctrl- Y


3

यदि आप vi मोड में बैश का उपयोग कर रहे हैं (इसे सेट करें set -o vi), तो Escvi के सामान्य मोड पर स्विच करने के लिए दबाएँ , और ddवर्तमान लाइन को हटाने के लिए टाइप करें!


3

यह निट के जवाब का विस्तार है हैश के साथ उपसर्ग करके कंसोल इतिहास में लाइन को संग्रहीत करता है। क्लिपबोर्ड की कमियों पर काबू पाना, जैसे आकस्मिक ओवरराइटिंग या संदर्भ के लिए कट लाइन को देखने में असमर्थ होना।

टिप्पणी लाइन और वापसी नई प्रॉम्प्ट

या तो मुख्य शॉर्टकट का उपयोग करें:

  • Esc,#
  • Alt+#

एक हैश चरित्र #लाइन के लिए तैयार किया जाएगा, इस प्रकार पूरी लाइन को एक टिप्पणी में बदल दिया जाएगा। यह एक नया संकेत भी लौटाएगा, जैसे कि उपयोगकर्ता द्वारा दर्ज किया गया था। जैसे

$ #rm -rf /foo/bar/really/long/path/here
$

रिटायर्ड कमेंट किया

कंसोल इतिहास से पुरानी लाइन को पुनर्प्राप्त करने के लिए निम्नलिखित शॉर्टकट में से एक का उपयोग करें:

  • Up
  • Ctrl+p

जब तक वांछित लाइन दिखाई नहीं देती तब तक मुख्य शॉर्टकट दोहराएं।


त्वरित हैश उपसर्ग हटाने

लाइन के हैश #उपसर्ग को हटाने के लिए कुछ अलग विकल्प उपलब्ध हैं:

पहला चरित्र निकालें और तुरंत कमांड निष्पादित करें:

  • Esc, 1, Esc,#
  • Alt+ -, Alt+#

कमांड निष्पादित किए बिना, पहले वर्ण को शुरू करने और हटाने के लिए कर्सर ले जाएँ:

  • Home, Delete
  • Ctrl+ a, Ctrl+d

2

वर्तमान लाइन को हटाने के लिए, प्रयास करें:

Ctrl- X, Ctrl-U

एक विकल्प के रूप में आप उपयोग कर सकते हैं:

Esc-D

जिसमें ~ / .inputrc की आवश्यकता होती है:

"\ed": kill-whole-line 

देखें: http://codesnippets.joyent.com/posts/show/1690


यदि आप पूरी लाइन ऐड को क्लियर करने के लिए बस एस्केप कुंजी चाहते हैं "\e\e": kill-whole-line(हालांकि
एस्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.