टैमक्स और क्लिपबोर्ड के बीच पाठ चयन कॉपी / पेस्ट करें


15

मैं tmux (git रिपॉजिटरी से) और xclip (0.12) का नवीनतम संस्करण चला रहा हूं, और मैं क्लिपबोर्ड में पाठ copy-mode, कॉपी ( M-w) चयन के चारों ओर जाने के लिए Emacs जैसे कीबोर्ड बाइंडिंग का उपयोग करने में सक्षम होना चाहूंगा और C-yक्लिपबोर्ड पर कॉपी बफर में पेस्ट ( ) से।

अब तक मैं टेक्स्ट को पेस्ट करने में सक्षम रहा हूं C-y, और copy-modeEmacs जैसे कीबोर्ड बाइंडिंग के साथ घूमता रहा हूं , लेकिन मैं अभी भी tmux बफर (जैसे copy-mode) से टेक्स्ट कॉपी नहीं कर पा रहा हूं

मैंने इस थ्रेड को क्लिपबोर्ड (और वाइसवेरा) में पूरे बफर को कॉपी करने के लिए पाया , लेकिन यह मेरे लिए काम नहीं करता है।

इसके अलावा, tmux-usersमेल सूची में मुझे बताया गया था कि tmux के हाल के संस्करण (केवल गिट रेपो में) एक कमांड प्रदान करते हैं copy-pipe। मैन पेज इस कमांड के बारे में निम्नलिखित कहता है:

एक कमांड एक तर्क, कॉपी-पाइप को स्वीकार करता है, जो चयन की प्रतिलिपि बनाता है और इसे एक कमांड पर पाइप करता है। उदाहरण के लिए निम्नलिखित 'सी-क्यू' को चयन को कॉपी करने के लिए / tmp में और साथ ही पेस्ट बफर में बाँध देगा:

       bind-key -temacs-copy C-q copy-pipe "cat >/tmp/out"

ऐसा लगता copy-pipeहै कि चयन का उपयोग किसी अन्य कमांड को चयन करने के लिए भाग में किया जाना है। इस विवरण में और कमांड में कुछ टाइपो भी लगता है (क्या है temacs-copy?)

किसी भी तरह से, मैं क्या करना चाहूंगा:

कॉपी करना:

  1. कॉपी मोड दर्ज करें
  2. पाठ मैं Emacs नेविगेशन आदेशों का उपयोग करते (यानी प्रतिलिपि बनाना चाहते हैं पर ले जाएं C-f, C-b, M-f, M-b, C-a, C-eआदि कर्सर ले जाने के लिए)। इनमें से किसी के लिए कोई उपसर्ग नहीं
  3. चयनित पाठ को क्लिपबोर्ड में कॉपी करें: M-w( कोई उपसर्ग या तो नहीं)

चिपकाने:

  1. मैं टर्मिनल में पाठ चिपकाने के लिए C-y( बिना दर्ज किए copy-mode) टाइप करने में सक्षम होना चाहूंगा ( कोई उपसर्ग भी नहीं)

मैंने बिना किस्मत के नकल करने की कोशिश की है:

bind-key -n M-w run "tmux save-buffer - | xclip -i -selection clipboard" 

हालांकि, चिपकाना महान काम करता है:

bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"

अजीब बात यह है कि मुझे पता है कि xclip -i -selection clipboardऊपर कॉपी कमांड का हिस्सा अच्छी तरह से काम करता है, क्योंकि मैं कमांड लाइन में क्लिपबोर्ड पर चीजों को कॉपी कर सकता हूं , जैसे:

echo "Hello world. How are you?" | xclip -i -selection clipboard

इस सब के साथ, मैं कॉपी मोड से क्लिपबोर्ड पर चयन कैसे कर सकता हूं?

जवाबों:


19

निम्नलिखित का उपयोग tmux.confके साथ copy-pipetmux (1.8+) के नए संस्करण में:

set -g mouse on
# To copy:
bind-key -n -t emacs-copy M-w copy-pipe "xclip -i -sel p -f | xclip -i -sel c "

# To paste:
bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
  1. prefix+[ कॉपी-मोड में
  2. माउस के साथ सामग्री का चयन करें (होल्ड)
  3. M-w उस भाग को सिस्टम क्लिपबोर्ड में कॉपी करने के लिए
  4. C-yइसे tmux के अंदर C-vपेस्ट करें, वेब ब्राउज़र जैसे अन्य नियमित एप्लिकेशन के अंदर पेस्ट करने के लिए।

यह उत्तर अधिक उत्थान के योग्य है, यह लिनक्स-आधारित सेटअप के लिए सबसे अच्छा है।
लुई कोट्टमन

run-shellrun
Tmux

@LouisKottmann: क्यों सिर्फ लिनक्स-आधारित?
schaiba

मैं अन्य प्रणालियों पर टिप्पणी नहीं कर सकता, लेकिन मेरा मानना ​​है कि मैक आमतौर पर xp के बजाय bpaste का उपयोग करता है
Louis Kottmann

2.8 tmux में मुझे उन्हें बदलना पड़ा bind -Tcopy-mode M-w send-keys -X copy-pipe "xclip -i -sel p -f | xclip -i -sel c "स्टारफ्री द्वारा सुझाए गए इस वचन केbind-key -n C-y run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer" अनुसार

6

कृपया ध्यान दें कि, Tmux 2.4 ( इस कमिट के बाद ) के साथ, बाइंडिंग सिंटैक्स बदल गया है। मैं इस गीथूब टिप्पणी को परिवर्तन को संक्षेप में बताने के लिए कहता हूं :

  1. की जगह -tके साथ-T
  2. की जगह vi-<name>के साथ<name>-mode-vi
  3. के साथ कमांड उपसर्ग करें send-keys -X

मैंने लिया:

bind-key -n -t vi-copy Enter copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'
bind-key -n -t vi-copy MouseDragEnd1Pane copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'

जिसे मुझे बदलने की आवश्यकता है:

bind-key -n -T copy-mode-vi Enter send-keys -X copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'
bind-key -n -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'

से बदलाव का :

मुख्य तालिकाओं में बड़े बदलाव हुए हैं। मोड कुंजी टेबल अब मुख्य कुंजी तालिकाओं से अलग नहीं हैं। सभी मोड कुंजी तालिकाओं को हटा दिया गया है, साथ-साथ ध्वज को बाइंड-की और अनबाइंड-की।

कमांड प्रॉम्प्ट में इमैक-एडिट, vi-edit, emacs-choose और vi-choose टेबल को प्रमुख कुंजी बाइंडिंग द्वारा बदल दिया गया है और मोड चुनें। मोड-की और स्टेटस-कीज विकल्प रहते हैं।

इमैक-कॉपी और वी-कॉपी टेबल को कॉपी-मोड और कॉपी-मोड-vi टेबल द्वारा बदल दिया गया है। सेंड-की को -X और -N फ्लैग का उपयोग करके कमांड भेजे जाते हैं। तो निम्नलिखित है:

bind -temacs-copy C-Up scroll-up
bind -temacs-copy -R5 WheelUpPane scroll-up

हो जाता है:

bind -Tcopy-mode C-Up send -X scroll-up
bind -Tcopy-mode WheelUpPane send -N5 -X scroll-up

ये परिवर्तन पूर्ण कमांड पार्सर (कमांड अनुक्रमों सहित) और कमांड सेट का उपयोग करने की अनुमति देता है - उदाहरण के लिए, संपादन और इतिहास के साथ सामान्य कमांड प्रॉम्प्ट अब एक कस्टम के बजाय खोज, कूद और इतने पर उपयोग किया जाता है। डिफ़ॉल्ट Cr बाइंडिंग अब है:

bind -Tcopy-mode C-r command-prompt -p'search up' "send -X search-backward-incremental '%%'"

Send -X के साथ कुछ नए कमोड भी उपलब्ध हैं, जैसे कॉपी-पाइप-एंड-कैंसल।


2

-temacs-copyलिखने में कोई त्रुटि नहीं है। अग्रणी डैश का अर्थ है कि यह bind-keysकमांड का विकल्प है ( विकल्प के लिए एक तर्क के साथ)। -t emacs-copyयदि आप इसे बेहतर पसंद करते हैं, तो यह समान है ।

कॉपी मोड "सामान्य मोड" की तुलना में बाइंडिंग और कमांड 1 के एक अलग सेट का उपयोग करता है । copy-pipeआदेश वैकल्पिक "मोड" बाइंडिंग तालिकाओं में ही उपलब्ध है। जब mode-keysहै emacs, तो कॉपी मोड emacs-copyतालिका का उपयोग करेगा , इसलिए आपको copy-pipeउस तालिका में मेग को बांधने की आवश्यकता है ।

bind-key -temacs-copy M-w copy-pipe "xclip -i -selection clipboard"

कई "कोई उपसर्ग" बाइंडिंग बनाने से सावधान रहें। वे tmux के अंदर चल रहे प्रोग्राम के लिए उन बाध्य कुंजियों को टाइप करना मुश्किल बना देंगे (जैसे जब आप Cy को tmux के अंदर चलने वाले Emacs के ट्टी-मोड उदाहरण के लिए टाइप करना चाहते हैं )। आप हमेशा (उपसर्ग) कुछ कुंजी को बांधते हैं जो करता हैsend-keys C-y , लेकिन अगर आपको अक्सर इसकी आवश्यकता होती है तो यह अधिक बोझिल हो सकता है।


1 केवल आंदोलन और संपादन आदेश उपलब्ध हैं। के अपवाद के साथ copy-pipe, ये आदेश कोई तर्क नहीं लेते हैं (यह वही है जो मैन पेज का अर्थ है "एक आदेश एक तर्क को स्वीकार करता है", "" में "शायद एक टाइपो या एक संपादन गलती है)।


2

जबकि अन्य उत्तर मदद कर सकते हैं, यहाँ मैं वही करता हूँ:

  • कर्सर के साथ पाठ का चयन करें।
  • Ctrl + Shift + C टेक्स्ट को क्लिपबोर्ड पर कॉपी करने के लिए।

यह एक उचित जवाब है लेकिन समस्या तब शुरू होती है जब आपके पास दो या दो से अधिक पैन क्षैतिज रूप से व्यवस्थित होते हैं।
cjauvin

मैं देखता हूं, मुझे बताएं कि क्या आपको इसके लिए कुछ उपयोगी लगता है।
ऋषभ अग्रहरी

prefixzचयनित फलक पर + zooms ताकि होल्डिंग द्वारा tmux कॉपी चयन को दरकिनार करते समय क्षैतिज विभाजन एक मुद्दा न हो shift
joelostblom
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.