क्लिपबोर्ड पर बफर की प्रतिलिपि बनाने के लिए tmux प्राप्त करना


118

मैं एक अच्छे तरीके से यह पता लगाने की कोशिश कर रहा हूं कि मेरे क्लिपबोर्ड में एक tmux बफर में क्या है। मैंने कुछ अलग-अलग चीजों की कोशिश की है

bind-key p select-pane -t 2 \; split-window 'xsel -i -b' \; paste-buffer

जो मुझे काफी करीब आता है, मुझे उपसर्ग-पी करने के बाद कंट्रोल-डी मारना पड़ता है।

मैंने ठीक करने की कोशिश की

bind-key p select-pane -t 2 \; split-window 'xsel -i -b << HERE\; tmux paste-buffer\; echo HERE'

लेकिन वह सिर्फ काम नहीं करता है। वास्तव में अगर मैं इसे नीचे जोड़ी बस

bind-key p select-pane -t 2 \; split-window 'xsel -i -b << HERE'

यह कुछ भी नहीं करता है इसलिए मैं मान रहा हूं कि विभाजन-विंडो को शेल कमांड में << पसंद नहीं है।

कोई विचार?

संपादित करें: select-pane -t 2यदि आप चाहें तो इसे छोड़ सकते हैं, यह वास्तव में महत्वपूर्ण नहीं है। मैं बस एक विशिष्ट लेआउट का उपयोग करता हूं और फलक 2 वह है जिसे मैं विभाजित करना पसंद करता हूं जब मैं कुछ और कर रहा हूं ताकि डिफ़ॉल्ट रूप से विभाजन से जुड़े मेरे बाइंडिंग में चला जाए।


2
नीचे दिए गए 2014 के उत्तर पर ध्यान देना सुनिश्चित करें, जो अन्य लोगों की तुलना में हाल ही में अधिक है। यह tmux yank plugin की सिफारिश करता है जो बहुत अच्छी तरह से काम करता है।
डोनोपॉली

एक उत्तर के लिए जो Tmux 2.4 के साथ अद्यतित है (अप्रैल 2017 को जारी किया गया) और 2.6 मेरा उत्तर
जेसन एक्सेलसन 20

जवाबों:


26

यहां दस्तावेजों को नए सिरे से देखना होगा। उदाहरण के लिए, एक शेल स्क्रिप्ट में, आप लिख सकते हैं

cat <<EOF >somefile; echo  done
file contents
EOF

मुझे नहीं लगता कि tmux की मदद से आप वहां नई रूपरेखाएँ बना सकते हैं, और अगर ऐसा किया भी, तो यह एक अच्छा तरीका नहीं होगा। क्या होगा यदि डेटा खुद HEREएक लाइन पर अकेला होता है (जैसे कि आप अपनी कॉपी कर रहे हैं .tmux.conf)?

मैं बफर सामग्री को एक अस्थायी फ़ाइल में लिखने का सुझाव देता हूं। untested:

bind-key p save-buffer ~/.tmux-buffer \; run-shell "xsel -i -b <~/.tmux-buffer && rm ~/.tmux-buffer"

यदि आप दो अलग-अलग tmux इंस्टेंस में इस कमांड का उपयोग करते हैं तो एक दौड़ की स्थिति है। मुझे नहीं पता कि इसे कैसे हल किया जाए।


धन्यवाद पूरी तरह से काम करता है, दौड़ की स्थिति मेरे लिए चिंता का विषय नहीं है, मैं केवल 1 सत्र का उपयोग करता हूं।
डिजिटल पॉवर्स

दौड़ की स्थिति से बचने के लिए, मैं सुझाव देता हूं कि mktempयह व्यापक रूप से उपलब्ध है
शोक

@ दुख अच्छा विचार। इस मामले में, tmux प्रक्रिया के PID का उपयोग करने के साथ-साथ काम करना संभव होगा और संभवतः इसे व्यवस्थित करना आसान होगा ( $PPIDtmux द्वारा लॉन्च किए गए शेल में)। लेकिन आपको चर फ़ाइल का नाम कैसे मिलता है (हालाँकि इसका निर्माण) तर्क में है save-buffer? मुझे लगता है कि save-buffer - | …में तरह Grauwolf का जवाब है, जो पूरी तरह से एक अस्थायी फ़ाइल को दूर करता है?
गाइल्स

आप सही हैं, मेरी गलती है, यह संभव नहीं होगा।
शोक

93

यह काम करना चाहिए:

# move x clipboard into tmux paste buffer
bind C-p run "tmux set-buffer \"$(xclip -o)\"; tmux paste-buffer"
# move tmux copy buffer into x clipboard
bind C-y run "tmux save-buffer - | xclip -i"

1
तो यह करता है। यह एक अस्थायी फ़ाइल का उपयोग करने की तुलना में बहुत अच्छा है, धन्यवाद। यह TMUXपर्यावरण चर के लिए कई समवर्ती सत्रों के साथ स्वचालित रूप से मुकाबला करता है।
गिल्स

22
इस के लिए एक बेहतर निर्देश C-pहोगा: bind C-p run "xclip -o | tmux load-buffer - ; tmux paste-buffer"- कोई उद्धृत मुद्दे या कमांड लाइन सीमा मुद्दे नहीं।
docwhat

8
क्या tmux में क्लिपबोर्ड में चयन की प्रतिलिपि बनाने के लिए एक हुक है copy-mode?
एहतेश चौधरी

1
xclip -oविकल्प ने मेरे लिए काम नहीं किया है इसलिए मैं बदल गया हूंbind C-c run "tmux save-buffer - | xclip -selection c"\; display-message "Buffer copied to clipboard"
पवका

6
जब भी मैं इस तरह से कॉपी करता हूं, tmux किसी भी कीबोर्ड शॉर्टकट का जवाब देना बंद कर देता है। इसका कोई हल?
स्कट्र

41

मैक ओएस-एक्स के लिए एक सरल समाधान

यह एलेक्स के उत्तर का निर्माण करता है और उस सामान का उपयोग करता है जो उस समय मौजूद नहीं था।

यदि आप homebrew का उपयोग कर रहे हैं (और यदि आप नहीं हैं, तो आप क्यों नहीं हैं?) तो आप बस ऐसा कर सकते हैं:

brew install reattach-to-user-namespace

फिर अपने में ~/.tmux.conf:

set-option -g default-command "reattach-to-user-namespace -l zsh" # or bash...
bind C-c run "tmux save-buffer - | reattach-to-user-namespace pbcopy"
bind C-v run "reattach-to-user-namespace pbpaste | tmux load-buffer - && tmux paste-buffer"

मैक पेस्टबोर्ड में बफर को tmux से कॉपी करने के लिए (आपको पहले से ही tmux का उपयोग करके कुछ कॉपी करना चाहिए) <tmux-key> Control-c। यह अब के लिए उपलब्ध होगा Command-vयाpbpaste

मैक पेस्टबोर्ड से कुछ चिपकाने के लिए, का उपयोग करें <tmux-key> Control-v


2
यह जवाब शानदार है। मैं उपयोग कर रहा था tmux show-bufferजिसके कारण लाइन रैप मुद्दों tmux save-buffer -ने इसे हल किया।
Event_jr

-अंत में क्या करता tmux save-buffer -है?
हेकविंट्रान

पीछा करने के save-bufferलिए निकलता है। आप -एक फ़ाइल नाम के साथ बदल सकते हैं और इसे वहां सहेजेंगे। यह आपको एक फ़ाइल लिखने (और सफाई करने) से रोकता है।
docwhat

1
OS X के रूप में 10.10 reattach-to-user-namespace अब आवश्यक नहीं है। Tmux और OS X के बारे में लगभग हर ट्यूटोरियल और प्रलेखन में इसका उल्लेख है, क्योंकि कुछ साल पहले कॉपी और पेस्ट करना आसानी से संभव नहीं था। इन दिनों यह (ज्यादातर) बॉक्स से बाहर काम करता है।
राफेल बुगाजेव्स्की

40

copy-pipeआदेश संस्करण 1.8 के रूप में जोड़ा गया है। यह tmux बफर के लिए एक चयन की प्रतिलिपि बनाता है और इसे एक कमांड पर भेजता है। अब उपसर्ग बंधन की कोई आवश्यकता नहीं है। यहाँ एक उदाहरण है:

bind -t vi-copy y copy-pipe "xclip"

# For OS X users:
bind -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"

अब जब आपके पास कुछ पाठ चयनित है copy-mode, yतो उस पाठ को tmux बफर के साथ-साथ OS क्लिपबोर्ड पर कॉपी कर लेंगे। हालाँकि, यदि आप क्लिपबोर्ड से tmux बफर में टेक्स्ट प्राप्त करना चाहते हैं तो यह मदद नहीं करता है।


1
पूरी तरह से काम करता है और गुच्छा का सबसे सरल समाधान है।
नसीर

2
लिनक्स के तहत मेरे लिए काम नहीं करता है, यह एक करता है: unix.stackexchange.com/a/131074/13601
सेबस्टियन

1
OS X 10.10 तक, ऐसा प्रतीत होता reattach-to-user-namespaceहै कि आवश्यक नहीं है।
क्रिस

एल कैपिटन पर काम करता है
ओललेह

2
यह अब Tmux 2.4 के लिए काम नहीं करता है, जो 20 अप्रैल, 2017 को जारी किया गया था। इसके बजाय आपको bind-key -T copy-mode-vi y send-keys -X copy-pipe "xclip"ओएस एक्स का उपयोग करने की आवश्यकता है :bind-key -T copy-mode-vi y send-keys -X copy-pipe "reattach-to-user-namespace pbcopy"
जेसन एक्सलसन

16

आप tmux-yank plugin ट्राई करना चाह सकते हैं । यह सिस्टम क्लिपबोर्ड (OS X और Linux) पर सीधे कॉपी करने में सक्षम बनाता है और कुछ अन्य अच्छाइयों जैसे कि वर्तमान शेल लाइन को yanking करता है।


7
यह एक महान, स्वच्छ समाधान है और इसे और अधिक माना जाना चाहिए क्योंकि यह दूसरों की तुलना में बहुत अधिक हालिया उत्तर है। साझा करने के लिए धन्यवाद!
5

9

अलग समाधान की कोशिश करने के बाद, यहाँ मेरा अंतिम सेटअप है:

# move x clipboard into tmux paste buffer
bind C-p run "xclip -o | tmux load-buffer -
# move tmux copy buffer into x clipboard
bind C-y run "tmux save-buffer - | xclip -i -selection clipboard"

शो-बफर के बजाय सेव-बफर का उपयोग करना डेटा को बिना वास्तविक डेटा देता है जैसा कि विभाजन के दौरान लाइन-ब्रेक के साथ दिखाया गया है।

मैं भी tmux कॉपी-मोड में चयन / कॉपी शुरू करने के लिए इसका उपयोग करता हूं:

bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection

मुझे लगता है कि कॉपी-चयन को 'y' कुंजी के साथ मर्ज करना और x क्लिपबोर्ड पर ले जाना संभव हो सकता है।


जैसा कि आपने बिना किसी सफलता के उल्लेख किया, मैं दोनों आज्ञाओं को मिलाने की कोशिश कर रहा था। यह कैसे करना है पर कोई विचार?
राफेल वेगा

9

यहाँ एक व्यापक उत्तर में एक प्रयास है।

पहले थोड़ा इतिहास

जब यह प्रश्न पहली बार (जून, 2011) पूछा गया था, तोमक्स से क्लिपबोर्ड पर पाठ की प्रतिलिपि बनाना दो चरणों वाली प्रक्रिया थी, पहले चयनित पाठ को Tmux के बफर में कॉपी करें, फिर Tmux के बफर से सिस्टम कीबोर्ड में पाठ की प्रतिलिपि बनाएँ।

1.8 (मार्च, 2013) में copy-pipeकमांड जोड़ा गया था जो आपको चयनित पाठ को सीधे सिस्टम क्लिपबोर्ड (या अन्य गंतव्य) में कॉपी करने की अनुमति देता है।

फिर 2.4 (अप्रैल, 2017) में इस पेज पर दिए गए कई उत्तरों को अप्रचलित करने के लिए प्रमुख तालिकाओं को महत्वपूर्ण रूप से बदला गया था।

मूल प्रश्न का उत्तर देना

लिनक्स :

bind-key C-y run-shell "tmux save-buffer - | xclip -i -r > /dev/null" \; display-message "Copied tmux buffer to selection"
bind-key C-Y run-shell "tmux save-buffer - | xclip -i -r -selection clipboard > /dev/null" \; display-message "Copied tmux buffer to clipboard"
bind-key C-p run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer"

मैक :

यदि आप होमब्रे का उपयोग कर रहे हैं तो आपको reattach-to-user-namespaceटर्मिनल में निम्न कमांड चलाकर इंस्टॉल करना चाहिए :

brew install reattach-to-user-namespace

फिर अपने ~ / .tmux.conf में:

bind-key C-y run-shell "tmux save-buffer - | reattach-to-user-namespace pbcopy" \; display-message "Copied tmux buffer to clipboard"
bind-key C-p run-shell "reattach-to-user-namespace pbpaste | tmux load-buffer - ; tmux paste-buffer"

छोटा तरीका (कॉपी और सीधे tmux> 2.4 के लिए क्लिपबोर्ड पर पेस्ट करें)

नोट: लिनक्स के लिए दो संस्करण हैं क्योंकि लिनक्स में एक प्राथमिक और द्वितीयक क्लिपबोर्ड है (चयन के रूप में भी जाना जाता है)।

लिनक्स :

bind-key -T copy-mode-vi y send-keys -X copy-pipe "xclip -r" \; display-message "Copied to selection"
bind-key -T copy-mode-vi Y send-keys -X copy-pipe "xclip -r -selection clipboard" \; display-message "Copied to clipboard"
bind-key C-p run-shell "xclip -o | tmux load-buffer - && tmux paste-buffer"

मैक :

bind-key -T copy-mode-vi y send-keys -X copy-pipe "reattach-to-user-namespace pbcopy" \; display-message "Copied to clipboard"

इन आदेशों को अनुकूलित करना

  • यदि आप नहीं चाहते हैं कि कमांड आपको बताए कि उसने स्टेटस लाइन में क्या किया है, तो बस display-message(साथ ही \;इससे पहले आने वाले को हटा दें )।

  • यदि आप vi के बजाय Emacs स्टाइल कॉपी-मोड का उपयोग कर रहे हैं, तो किसी भी उदाहरण को copy-mode-viबस के साथ बदलेंcopy-mode

  • यदि आप लिनक्स चला रहे हैं और आप के साथ और साथ xselकी xclipजगह का उपयोग करना चाहते हैंxclip -rxsel -i -pxclip -oxsel -o -p

  • -rमें xclip -rवैकल्पिक है, यह पिछले न्यू लाइन निकाल देता है। यह कमांड्स को कॉपी करने के लिए उपयोगी है, फिर जब आप उन्हें पेस्ट करते हैं तो उन्हें तुरंत निष्पादित नहीं किया जाएगा।

  • यदि आप SSH के ऊपर सुरंग बना रहे हैं तो आपको https://unix.stackexchange.com/a/354581/14252 से परामर्श करना चाहिए

संदर्भ:


क्या यह आदेश bind-key C-p run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer", अभी भी मान्य है? के लिएtmux>2.4
अल्फा_989

7

मुझे अतिरिक्त मुख्य प्रेस नापसंद हैं, इसलिए मैं कुछ अधिक महत्वाकांक्षी चाहता था। कॉपी मोड को [, सही टेक्स्ट हाइलाइट करें, और फिर प्रेस] को क्लिपबोर्ड पर कॉपी करने के लिए एंटर करें।

इसके अलावा, tmux उन अभिव्यक्तियों में नईलाइनों को शामिल करना पसंद करता है, जो लपेटती हैं (और अजीब तरह से उन newlines गलत जगह पर हैं! वे स्क्रीन पर लिपटे हुए अभिव्यक्ति नहीं हैं)। इसलिए मैं चाहता था कि C-] अभिव्यक्ति को कॉपी करने के लिए newlines को हटा दें।

1.6 tmux पर मैंने यह कोशिश की:

bind [ copy-mode
bind -t vi-copy ] run "tmux send-keys Enter; tmux show-buffer | xclip -i -selection clipboard;"
bind -t vi-copy C-] run "tmux send-keys Enter; tmux show-buffer | perl -pe 's/\n//' | xclip -i -selection clipboard;"

लेकिन यह काम नहीं किया क्योंकि tmux vi-copy तालिका में जटिल चीजों को बांधने के लिए खुश नहीं है। इसलिए मैंने इसके बजाय यह करना समाप्त कर दिया:

bind [ copy-mode \;                                                        \
    bind -n ] run                                                          \
    "tmux send-keys Enter;                                                 \
     tmux show-buffer | xclip -i -selection clipboard;                     \
     tmux unbind -n C-];                                                   \
     tmux unbind -n ]" \;                                                  \
    bind -n C-] run                                                        \
    "tmux send-keys Enter;                                                 \
     tmux show-buffer | perl -pe 's/\n//' | xclip -i -selection clipboard; \
     tmux unbind -n C-];                                                   \
     tmux unbind -n ]"

यह अजीब चीजों () या C-] को अगली बार आपके द्वारा उपयोग किए जाने पर अजीब कार्य करेगा, लेकिन केवल एक बार) यदि आप इसके अलावा किसी अन्य तरीके से कॉपी मोड से बाहर निकलते हैं] या C-]। यह मेरे द्वारा कल्पना की जाने वाली कुछ और बाइंडिंग के साथ तय किया जा सकता है, लेकिन यह वही है जो मैं ज्यादातर समय चाहता हूं।



4

आर्क विकी पर एक समाधान है xclip:

# move tmux copy buffer into x clipboard
bind-key C-y save-buffer /tmp/tmux-buffer \; run-shell "cat /tmp/tmux-buffer | xclip"

https://wiki.archlinux.org/index.php/Tmux


2
क्या tmux save-bufferकिसी साझा निर्देशिका में फ़ाइल को सुरक्षित रूप से बनाता है ? अन्यथा इसे लगाना /tmpएक सुरक्षा छेद है। का एक बेकार उपयोग है cat, और अस्थायी फ़ाइल को हटाने से गायब है। फिर यह xselबनाम की बात है xclip, जो यहां बराबर हैं, और आपके पास मेरे (अप्रत्यक्ष रूप से लिखित) समाधान है।
गाइल्स

1
धन्यवाद गिल्स। मैं आपकी बातों को दर्शाने के लिए विकी को अपडेट करूंगा।
जसोनव्रीयन

4

मैक ओएस एक्स के लिए एक समाधान। इन 2 चरणों का पालन करें:

  1. क्रिस जॉन्सन के वर्कअराउंड का उपयोग करें: https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard

  2. इस कोड को अपने tmux config (~ / .tmux.conf) में जोड़ें

# paste clipboard into tmux buffer
bind v run-shell "reattach-to-user-namespace -l zsh -c 'tmux set-buffer \\"$(pbpaste)\\"; tmux paste-buffer'"
# put tmux buffer into x clipboard
bind y run-shell "reattach-to-user-namespace -l zsh -c 'tmux show-buffer | pbcopy'"


4

स्वीकृत उत्तर का थोड़ा संशोधित संस्करण, जिसे मैंने पकाया।

मैं सिस्टम के क्लिपबोर्ड (Ctrl-C, Ctrl-V) को xclip के primaryडिफ़ॉल्ट क्लिपबोर्ड के अलावा (माउस चयन और माउस मध्य-क्लिक के साथ प्राप्त करने वाला) का उपयोग करना पसंद करता हूं । सिस्टम क्लिपबोर्ड चुनने के लिए आपको -selection clipboardतर्क पास करना होगा xclip

इसके अलावा एक क्लिपबोर्ड में एक बफर कॉपी करते समय, मुझे यह चुनने की क्षमता पसंद है कि मैं किस बफर को कॉपी करना चाहता हूं। यह प्रयोग किया जाता है choose-bufferऔर फिर बफर का save-bufferउपयोग करने के लिए तर्क गुजरता है -b %%

# Copy into clipboard
bind C-c choose-buffer "run \"tmux save-buffer -b %% - | xclip -i -selection clipboard\""
# Paste from clipboard
bind C-v run "xclip -o -selection clipboard | tmux load-buffer - ; tmux paste-buffer"
# Copy into primary
bind C-y choose-buffer "run \"tmux save-buffer -b %% - | xclip -i \""
# Paste from primary
bind C-p run "xclip -o | tmux load-buffer - ; tmux paste-buffer"

अद्यतन: किसी तरह tmux 1.8 और मेरे दो खुले 12.2 प्रतिष्ठानों के साथ, मुझे एक लटका दिखाई देता है जब एक पाइप पर स्टड से पढ़ने के tmux run-shellसाथ आमंत्रित किया जाता है xclip। मैंने इसके बजाय xselएक कोशिश देने का फैसला किया और वह काम करने लगता है। ये समान कुंजी बाइंडिंग हैं xsel। मैं भी &&अधिक मजबूती के लिए पेस्ट में आदेशों की श्रृंखला करता था।

# Copy into clipboard
bind C-c choose-buffer "run \"tmux save-buffer -b '%%' - | xsel -i -b\""
# Paste from clipboard
bind C-v run "xsel -o -b | tmux load-buffer - && tmux paste-buffer"
# Copy into primary
bind C-y choose-buffer "run \"tmux save-buffer -b '%%' - | xsel -i\""
# Paste from primary
bind C-p run "xsel -o | tmux load-buffer - && tmux paste-buffer"

4

यह मेरे बजाय लंबा जवाब है कि एक दूरस्थ (ssh) tuxux से बफर कॉपी करने के लिए xclip का उपयोग करने के साथ दो प्रमुख समस्याओं को ठीक करना चाहिए:

1. गैरकानूनी xclip

मेरे लिए @ Grauwolf के जवाब के साथ xclipकाम नहीं किया (पूरी तरह से लापरवाह फलक tmux renders)। मुझे पता चला कि आर्क विकि के Tmux पृष्ठ में क्यों :

उस उद्देश्य के लिए भी xclip का उपयोग किया जा सकता है, xsel के विपरीत यह कच्चे बिटस्ट्रीम को प्रिंट करने में बेहतर काम करता है जो वर्तमान लोकेल में फिट नहीं होता है। फिर भी, यह xclip के बजाय xsel का उपयोग करने के लिए neater है, क्योंकि tmux के बफर से पढ़े जाने के बाद xl STDOUT को बंद नहीं करता है। इस प्रकार, tmux को पता नहीं है कि प्रतिलिपि कार्य पूरा हो गया है, और xclip की समाप्ति की प्रतीक्षा करना जारी रखता है, जिससे tmux अप्रतिसादी हो जाता है। एक वर्कअराउंड STDOUT xclip को / dev / null में रीडायरेक्ट करना है

तो बंधन होना चाहिए:

bind-key C-y run "tmux save-buffer - | xclip -i -sel clip > /dev/null"

अब, यदि आपका tmux सत्र स्थानीय है तो यह काम करेगा।

2. एक्स से कनेक्ट करने में असमर्थ एक्लिप्स

यदि आप ssh-x पर tmux का उपयोग कर रहे हैं , तो बड़ी संभावना है कि यह सीधे काम नहीं करेगा

ऐसा इसलिए है क्योंकि शेल चर $DISPLAYको ठीक से सेट करने की आवश्यकता है।

पूरा समाधान

तो मेरे लिए, पूर्ण कार्य समाधान निम्नलिखित लाइनों को अपने में रखना है ~/.tmux.conf:

set-option -g update-environment "DISPLAY"
bind-key C-y run "export DISPLAY=`tmux show-env | sed -n 's/^DISPLAY=//p'`; tmux save-buffer - | xclip -i -selection clipboard >/dev/null"
# Or more concise:
bind-key C-y run "tmux save-buffer - | xclip -i -selection clipboard -d `tmux show-env | sed -n 's/^DISPLAY=//p'` >/dev/null

प्राथमिक से चिपकाने के लिए:

bind-key C-p run "xclip -d `tmux show-env | sed -n s/^DISPLAY=//p` -o | tmux load-buffer - && tmux paste-buffer"

मुझे पूरी तरह से समझ नहीं आया कि $DISPLAYसोर्सिंग करते समय सही तरीके से सेट क्यों नहीं किया गया है .tmux.conf, इसलिए यही कारण है कि मुझे इसे tmux show-envऔर साथ निकालना है sed

यदि आपके पास tmux> = 1.8 है, तो आप इस कमांड को इसके साथ अनुकूलित कर सकते हैं copy-pipe:

bind-key -t vi-copy y copy-pipe 'xclip -in -selection clipboard -d `tmux show-env | sed -n s/^DISPLAY=//p` >/dev/null'

/home/linux/.tmux.conf:11: invalid or unknown command: bind-key C-y run "tmux save-buffer - | xclip -i -selection clipboard -d `tmux show-env | sed -n 's[0/0] PLAY=//p'` >/dev/null
उपयोगकर्ता

@ sedआप जो आदेश दिखाते हैं, वह वैसा नहीं है जैसा मैंने लिखा था ... क्या यह वही है जो आपने लिखा है .tmux.conf?
प्लाज़्माबंटूरोंग

मैंने अभी आपका कोड कॉपी और पेस्ट किया है।
उपयोगकर्ता

@user, अजीब है। त्रुटियों के कई स्रोत हो सकते हैं। पहले जांचें कि आपका उद्धरण ठीक है। फिर, क्या आप परिचित हैं sed? आदेश होना चाहिए: sed -n s/^DISPLAY=//p। वैकल्पिक रूप से, आप इस्तेमाल कर सकते हैं cut: tmux show-env DISPLAY | cut -d'=' -f2। यह आपके tmux संस्करण की जाँच के लायक भी हो सकता है।
प्लाज्माबिन्टॉन्ग

3

मैं एक अच्छे तरीके से यह पता लगाने की कोशिश कर रहा हूं कि मेरे क्लिपबोर्ड में एक tmux बफर में क्या है। मैंने कुछ अलग चीजों की तरह की कोशिश की है

Emacs स्टाइल बाइंडिंग के लिए कुछ अलग विकल्प हैं। (Vi- शैली समान होनी चाहिए?) Emacs में "कॉपी-सिलेक्शन" करने के लिए विशिष्ट बाइंडिंग Mw है, इसलिए tmux में समान बाइंडिंग करना बहुत सुविधाजनक होगा।

1 - आदर्श होगा, लेकिन गैर-काम कर रहा है (tmux सीमा के कारण?)

unbind-key -t emacs-copy M-w
bind-key -t emacs-copy M-w copy-selection\; \
  run-shell "tmux save-buffer - | xsel --input --clipboard"

2 - मेरे लिए अच्छी तरह से काम करता है समझौता करें: tmux में emacs- कॉपी के लिए एक अलग कीबाइंडिंग का उपयोग करके स्वीकार करें। उदाहरण के लिए CMw का उपयोग करें। (यह बाध्यकारी जिसे "विश्व स्तर पर" परिभाषित किया जाएगा - न केवल कॉपी-मोड में - बल्कि कॉपी-मोड में केवल उपयोगी है)

bind-key -n C-M-w send-keys M-w\; \
 run-shell "tmux save-buffer - | xsel --input --clipboard" 

3

इनमें से कई जवाब मेरे Ubuntu 14.04 के लिए zsh-as पर काम नहीं किए। यह निश्चित नहीं है कि मेरे शेल का इससे कोई लेना-देना है, लेकिन यहां कॉपी के लिए इस रणनीति का उपयोग करने का मेरा कार्य संस्करण है, और पेस्ट के लिए यह रणनीति

    bind-key -t vi-copy 'v' begin-selection
    bind-key -t vi-copy 'y' copy-pipe "xclip -sel clip -i"
    bind-key ] run-shell "xclip -sel clip -o | tmux load-buffer - ; tmux paste-buffer" 

कुछ नोट:

  • कॉपी-पाइप के लिए, मुझे अपना क्लिपबोर्ड निर्दिष्ट करना होगा -sel clip -i। वह रेखा ym को tmux बफर में जोड़ती है और इसे xclip पर भेजती है।
  • वास्तव में इसे पेस्ट करने के लिए, मुझे फिर से निर्दिष्ट करने की आवश्यकता है कि किस क्लिपबोर्ड के साथ -sel clip -o

यह मेरे vim / zsh / tmux सेटअप के लिए अब खूबसूरती से काम करता है।


धन्यवाद! -sel clip -iसमस्या हल करता है। हालांकि, मुझे समझ नहीं आता क्यों आप इसे (मानक चिपकाने के लिए क्लिपबोर्ड फिर से निर्दिष्ट करने की आवश्यकता ]मेरे लिए काम करता है)
melekes

1

और @Leif उत्तर का उन्नत संस्करण हो सकता है:

tmux bind-key '[' run "tmux copy-mode;
tmux bind-key -n ']' run \"tmux send-keys Enter; tmux save-buffer - | xclip -i -selection clipboard;
tmux unbind-key -n ']'\";
tmux bind-key -n q run \"tmux unbind -n ']'; tmux send-keys q\";
tmux bind-key -n C-c run \"tmux unbind -n ']'; tmux send-keys C-c\""

इस तरह से कोई परिणाम नहीं हैं यदि आप इसके अलावा किसी अन्य तरीके से कॉपी मोड से बाहर निकलते हैं], उपरोक्त कोड को tundle / tmux-yank में लपेटा जाता है tmux टेक्स्ट को सिस्टम क्लिपबोर्ड में कॉपी करने के लिए प्लगइन, यह tmux = = 1.6 को OS X पर लक्षित करता है और लिनक्स।


1

OS-X पर tmux संस्करण 2.2 के साथ या बाद में निम्नलिखित काम करेगा:

bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "pbcopy"
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "pbcopy"

1

मैं copyqएक बहुस्तरीय क्लिपबोर्ड प्रबंधक का उपयोग करता हूं । (यह विंडोज, ओएसएक्स, लिनक्स के साथ काम करता है।)

  • निम्नलिखित पंक्तियों को इसमें जोड़ें ~/.tmux.conf:

    set-window-option -g mode-keys vi
    bind C-y run 'out=`tmux save-buffer - ` && copyq add "$out"'
    
  • cygwincopyq.exeस्थान मांगता है ~/.bashrc:

    export PATH="$PATH:/cygdrive/c/Program Files (x86)/CopyQ"
    
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.