बाश में बहु-पंक्ति पेस्ट को रोकें


10

मैं अक्सर ctrl+cकुछ gui एप्लिकेशन से पाठ की प्रतिलिपि बनाने और उसके बाद दाएं-माउस-क्लिक-मेनू और पेस्ट का उपयोग करके अपने टर्मिनल एमुलेटर (टर्मिनेटर) में पेस्ट करता हूं। कभी-कभी मैं यह भूल जाता हूं कि क्लिपबोर्ड में कई लाइनें होती हैं, जो जब बैश में चिपकाई जाती हैं, तो प्रत्येक लाइन "निष्पादित" हो जाती है

क्या पूरी तरह से मल्टी-लाइन पेस्ट को रोकने के लिए कुछ समाधान है?


नोटपैड में पेस्ट करें, यह देखने के लिए कि आपके पास क्या है, अगर यह ठीक है तो इसे अपने आवेदन में पेस्ट करने के लिए आगे बढ़ें
स्केपरन

1
bash में कमांड चलाते हैं sleep 999999तो पेस्ट करें यदि यह ठीक लगे। नींद की कमान लाइनों को नहीं पढ़ती है और जब आप दबाते हैं तो उन्हें छोड़ दिया जाता है ctrl+c
स्केपरन



1
@ ओटस, printf '\e[?2004h'ज्यादातर एक्सटर्म-जैसे टर्मिनल एमुलेटर में एक ब्रैकेटेड-पेस्ट मोड को सक्षम करता है, जहां टर्मिनल पेस्ट किए गए टेक्स्ट को ब्रैकेट करता है ताकि एप्लिकेशन यह पता लगा सकें कि पेस्ट कहां से शुरू होता है और कहां खत्म होता है। xterm एक अन्य विधा का भी समर्थन करता है, \e[?2005hजहाँ सभी चिपके हुए वर्णों के साथ उपसर्ग किया ^Vजाता है (कई अनुप्रयोगों और tty लाइन अनुशासन के रूप में समझा जाता है litteral-next)।
स्टीफन चेज़लस

जवाबों:


5

यह उत्तर उपयोगकर्ता के प्रश्न के लिए सबसे विशिष्ट नहीं है। कृपया मेरा दूसरा उत्तर देखें। मैं इसे यहां छोड़ रहा हूं क्योंकि यह अधिक सामान्य मुद्दे को संबोधित करता है ।

अपने मूल पोस्ट के लिए टिप्पणियों के अनुसार, आप (1) एक टर्मिनल एमुलेटर जो समर्थन की जरूरत पेस्ट कोष्ठकों के भीतर और (2) जो कुछ भी, टर्मिनल में चल रहा है के लिए इसी समर्थन यानी, vim, bash, zsh। ब्रैकेटेड पेस्ट का समर्थन करने वाले टर्मिनल एमुलेटर (इस पोस्ट पर टिप्पणियों के आधार पर अद्यतन की जाने वाली सूची):

  • xterm - जबसे ??
  • gnome-terminal - जबसे ??
  • putty - 0.63 से (2013-08-06 रिलीज़ की तारीख)

ब्रैकेटेड मोड का समर्थन करने वाले अनुप्रयोग:

  • vim
  • zsh

के लिए bash, स्टीफनचेज़ेलैस ने उस मोड का पता लगाने और उचित कार्रवाई करने के लिए एक शेल स्क्रिप्ट को एक साथ रखा है।

एक और अधिक विशिष्ट उत्तर - लाइनों को कटा हुआ होने से रोकना - बिना यूनिक्स प्रोग्राम के बारे में जाने बिना अचूक है जो आपके हिट होने पर चल रहा है।

एक क्लिपबोर्ड प्रबंधक शायद आपको क्या चाहिए।


वहां की स्क्रिप्ट ब्रैकेटेड पेस्ट का पता नहीं लगाती है, यह एक पर्ल स्क्रिप्ट है, जो ब्रैकेटेड पेस्ट के एक 3 रूप का अनुकरण करती है, जिसे एप्लिकेशन को समर्थन के अलावा किसी अन्य एप्लिकेशन के समर्थन की आवश्यकता नहीं होती है। वास्तव में इस सवाल का जवाब है, हालांकि शायद सुधार की आवश्यकता होगी, यह सिर्फ एक PoC था)।
स्टीफन चेज़लस

@ StéphaneChazelas मेरी पोस्ट को संपादित / सुधारने के लिए स्वतंत्र महसूस कर रहा है। :) "आवेदन जरूरतों को समझने के लिए ^Vके रूप में literal-nextलेकिन यह कैसे करता है। ^Vआवेदन के इनपुट धारा में मिल सकता है?
Otheus

यह तब मिलता है जब आंतरिक टेंट डिवाइस icanon मोड में नहीं होता है (जैसे कि bashरीडलाइन के प्रॉम्प्ट इसे देखेंगे (और जैसा व्यवहार शाब्दिक-अगला होगा))। यदि इकोनॉन मोड में, उस आंतरिक tty डिवाइस का लाइन डिसिप्लिन इसे (जब तक lnextचरित्र है ^V) स्ट्रिप कर देगा , ठीक उसी तरह जब आप Ctrl-V X को मैन्युअल रूप से टाइप करते हैं ..
Stéphane Chazelas

1
यदि वह स्क्रिप्ट का उपयोग नहीं कर रहा है, तो कुछ भी सम्मिलित नहीं करता है ^Vजब तक कि आप xterm के quoted pasteमोड का उपयोग न करें (भेजकर सक्षम \e[?2005h)। यही कारण है कि perlस्क्रिप्ट है कि यह सभी को हटा लेकिन इतना अनुकूलित किया जा सकता है एक बहु लाइन का पेस्ट में पहली पंक्ति (हालांकि मज़बूती से बड़े चिपकाता के लिए नहीं), लेकिन यह पहले से ही है के रूप में के बाद से यह उद्धरण (ReadLine के लिए नई पंक्ति के रूप में यदि आप Ctrl- दबाया था V Ctrl-J), यह लाइनों को निष्पादित होने से रोकता है (वे सिर्फ संपादन बफर में जोड़े जाते हैं और आपको अभी भी उन्हें निष्पादित करने के लिए Enter दबाने की आवश्यकता है)।
स्टीफन चेज़लस

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