शेल पाइपों के साथ tmux 'क्लिपबोर्ड' की प्रतिलिपि कैसे बनाएं?


17

शेल वातावरण में काम करते समय मैं अक्सर 'इंटरमीडिएट पाइप आउटपुट' को कॉपी करने की आवश्यकता में भाग लेता हूं (जैसे। पहले से चल रहे संपादकों के लिए, अन्य शेल, अन्य मशीनों आदि के लिए)।

जब एक खिड़की के वातावरण में, इसे हल करने के लिए एक आसान (और सामान्य) विधि अक्सर सिस्टम क्लिपबोर्ड के माध्यम से होती है, उदाहरण के लिए:

  • X11: ... | xsel -i/xsel -o | ...
  • OS X: ... | pbcopy/pbpaste | ...

मैं tmux कॉपी / पेस्ट सुविधा का उपयोग करके समान रूप से सुविधाजनक व्यवहार कैसे प्राप्त कर सकता हूं?

जवाबों:


20

tl; डॉ

  • ... | tmux loadb -
  • tmux saveb - | ...

स्पष्टीकरण और पृष्ठभूमि

Tmux में, सभी कॉपी / पेस्ट गतिविधि बफर स्टैक के माध्यम से जाती है जहाँ शीर्ष (इंडेक्स 0) सबसे हाल ही में कॉपी किया गया टेक्स्ट है और जब कोई बफर इंडेक्स स्पष्ट रूप से प्रदान नहीं किया जाता है तो चिपकाने के लिए उपयोग किया जाएगा -b। आप वर्तमान बफ़र्स के साथ tmux list-buffersया डिफ़ॉल्ट शॉर्टकट tmux-prefix+ का निरीक्षण कर सकते हैं #

स्टैक के शीर्ष पर एक नया tmux बफर में पाइपिंग करने के लिए दो तरीके हैं, set-bufferएक स्ट्रिंग तर्क और load-bufferएक फ़ाइल तर्क ले रहा है। एक बफर में पाइप करने के लिए जिसे आप आमतौर पर load-bufferस्टडिन के साथ उपयोग करना चाहते हैं , जैसे .:

print -l **/* | tmux loadb -

संपादकों में इसे वापस लाना और यह बहुत स्पष्ट है ( tmux-prefix+ ]या जो कुछ भी आप के paste-bufferलिए बाध्य है), हालांकि, शेल के अंदर से पेस्ट को एक्सेस करना नहीं है, क्योंकि इनवॉइसिंग paste-bufferपेस्ट को स्टड में लिख देगा, जो आपके टर्मिनल के संपादन में समाप्त होता है बफर, और पेस्ट में कोई भी नई लाइन खोल को निष्पादित करेगी जो अब तक चिपकाया गया है (संभवतः आपके दिन को बर्बाद करने का एक शानदार तरीका)।

इस से निपटने के कुछ तरीके हैं:

  1. tmux pasteb -s ' ': -sआप जो भी विभाजक प्रदान करते हैं, उसके साथ सभी लाइन अंत (विभाजक) को बदल देता है। हालाँकि आप अभी भी paste-bufferइसका व्यवहार प्राप्त करते हैं जिसका अर्थ है कि आपके टर्मिनल एडिट बफर में पेस्ट समाप्त हो गया है, जो कि आप चाहते हैं, लेकिन आमतौर पर ऐसा नहीं है।
  2. tmux showb | ...: show-bufferबफर को स्टडआउट करने के लिए प्रिंट करता है, और यह लगभग आवश्यक है, लेकिन जैसा कि क्रिस जॉन्सन ने टिप्पणी में उल्लेख किया है , show-bufferगैर-मुद्रण योग्य ASCII वर्णों और गैर-ASCII वर्णों की अष्टकोणीय एन्कोडिंग करता है। यह दुर्भाग्य से अक्सर परेशान करने के लिए पर्याप्त रूप से टूट जाता है, यहां तक ​​कि सरल चीजों के साथ भी जैसे कि शून्य समाप्त तार या उच्चारण लैटिन वर्ण (जैसे। (zsh में) print -N á | tmux loadb - ; tmux showbप्रिंट \303\241\000)।
  3. tmux saveb - | ...: save-bufferबस उल्टा करता है load-bufferऔर कच्चे बाइट्स को स्टैमन में अनमॉडिफाइड लिखता है, जो कि ज्यादातर मामलों में वांछित है। फिर आप दूसरे पाइप को इकट्ठा करना जारी रख सकते हैं, और जैसे। के माध्यम से पारित | xargs -n1 -I{} ...प्रक्रिया लाइन बुद्धिमान, आदि के लिए ..

1
tmux show-bufferC0 नियंत्रण वर्ण और गैर- ASCII बाइट (जैसे उच्चारण लैटिन वर्ण, आदि) के अष्टकोणीय एन्कोडिंग करेंगे। आप tmux save-buffer -कच्चे बाइट्स का उपयोग कर सकते हैं (यह आमतौर पर आप क्या चाहते हैं)।
क्रिस जॉन्सन

@ क्रिसहॉन्सेन को पकड़ने के लिए बहुत धन्यवाद, मैंने उसी हिसाब से जवाब अपडेट किया।
unthought
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.