Tmux में एक क्लिपबोर्ड पर चयन की प्रतिलिपि बनाएँ


23

यदि मैं macOS पर iTerm2 में tmux में माउस के साथ पाठ का चयन करता हूं तो मुझे चयनित क्लिप मेरे क्लिपबोर्ड में कॉपी किया हुआ मिलता है। मुझे कोई अतिरिक्त बटन क्लिक करने की आवश्यकता नहीं है - बस आपको इच्छित पाठ का चयन करें और आप कर रहे हैं।

मैंने macOS में टर्मिनल.app में tmux का परीक्षण किया है, लेकिन यह वहां काम नहीं करता है - मुझे yअपने क्लिपबोर्ड पर चयन की प्रतिलिपि बनाने के लिए हिट करना होगा।

मैंने सोचा था कि एक माउस बाइंडिंग है (कुछ MouseOnSelectionइसी तरह का MouseDown1Pane) लेकिन मुझे वेब पर कुछ भी उपयोगी नहीं मिला और man tmux

मुझे आश्चर्य है कि अगर Ubuntu 16.10 पर एक समान व्यवहार करने का एक तरीका है - अधिमानतः सूक्ति टर्मिनल में।

मेरे tmux dotfiles यहाँ उपलब्ध हैं (लिंक)

जवाबों:


45

Tmux 2.4+ vi प्रतिलिपि मोड बाइंडिंग और xclip के साथ :

set-option -g mouse on
set-option -s set-clipboard off
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -se c -i"

पुराने tmux संस्करणों के लिए, emacs कॉपी मोड बाइंडिंग (डिफ़ॉल्ट), या गैर- X प्लेटफ़ॉर्म (अर्थात, कोई xclip) नहीं है, नीचे विवरण देखें।


स्पष्टीकरण: पहले हमें माउस विकल्प को सक्षम करने की आवश्यकता है, इसलिए tmux माउस को पकड़ लेगा और हमें माउस घटनाओं को बाँध देगा:

set-option -g mouse on

सूक्ति-टर्मिनल xterm से बच दृश्यों का उपयोग करके क्लिपबोर्ड सेट करने का समर्थन नहीं करता है, इसलिए हमें यह सुनिश्चित करना चाहिए कि set-clipboardविकल्प बंद है:

set-option -s set-clipboard off

यह विकल्प iTerm2 ( set-clipboardtmux मैनुअल में देखें ) पर डिफ़ॉल्ट रूप से समर्थित और सक्षम हो सकता है , जो वहां के व्यवहार की व्याख्या करेगा।

हम तब कॉपी मोड MouseDragEnd1Pane"की" को बांध सकते हैं , यानी, जब माउस का पहला बटन क्लिक करने और एक फलक में खींचने के बाद जारी किया जाता है, एक tmux कमांड के लिए जो वर्तमान कॉपी मोड का चयन (डिफ़ॉल्ट बाइंडिंग द्वारा बनाया गया MouseDrag1Pane) लेता है और इसे पाइप करता है एक शेल कमांड को। यह tmux कमांड copy-pipetmux 2.4 से पहले था , और तब से बदल गया है send-keys -X copy-pipe[-and-cancel]। शेल कमांड के लिए, हमें बस कुछ चाहिए, जो सिस्टम क्लिपबोर्ड की सामग्री को जो कुछ भी इसके लिए पाइप करेगा; निम्न आदेशों में ऐसा करने के लिए xclip का उपयोग किया जाता है। "xclip -selection clipboard -i"गैर-एक्स प्लेटफार्मों पर नीचे के लिए कुछ समान प्रतिस्थापन हैं "wl-copy"(वेलैंड), "pbcopy"(मैकओएस), "clip.exe"(विंडोज, डब्ल्यूएसएल), और "cat /dev/clipboard"(सिग्विन, मिनगव)।

Tmux 2.4+:

# For vi copy mode bindings
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"
# For emacs copy mode bindings
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"

Tmux 2.2 से 2.4:

# For vi copy mode bindings
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "xclip -selection clipboard -i"
# For emacs copy mode bindings
bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "xclip -selection clipboard -i"

Tmux 2.2 से पहले:

माउस ड्रैग सपोर्ट के बाद कॉपी को मूल रूप से Tmux 1.3 में नया mode-mouseविकल्प सेट करने के माध्यम से जोड़ा गया था on। Tmux 2.1 ने माउस समर्थन को परिचित माउस कुंजी बाइंडिंग में बदल दिया, लेकिन इसमें DragEndबाइंडिंग नहीं थे, जिन्हें 2.2 में पेश किया गया था। इस प्रकार, 2.2 से पहले मुझे विश्वास है कि माउस ड्रैग पर सिस्टम क्लिपबोर्ड सेट करने का एकमात्र तरीका xterm एस्केप सीक्वेंस ( set-clipboardविकल्प) के अंतर्निहित उपयोग के माध्यम से था । इसका मतलब है कि set-clipboardगनोम टर्मिनल जैसे समर्थन नहीं करने वाले टर्मिनलों के लिए ड्रैग-एंड-कॉपी व्यवहार प्राप्त करने के लिए कम से कम tmux 2.2 को अपडेट करना आवश्यक है ।


3
यह उच्च गुणवत्ता का उत्तर है जो आखिरकार यह सब मेरे लिए क्लिक करता है .. धन्यवाद!
cjauvin

2
क्योंकि वे अपने टर्मिनल कार्यक्षमता और डिफ़ॉल्ट पद्धति के रूप में ओ पी ने कहा बदल दिया है पर एक मैक ऐसा करने की कोशिश कर किसी के लिए नहीं रह गया काम करता है (मैं Byobu जो अपनी ही कॉपी बफर है उपयोग कर रहा हूँ): जगह xclip...एक साधारण के साथ बयान pbcopyकरता है चाल।
डारेल होल्ट

इस सूत्र में कोई भी समाधान मेरे लिए काम नहीं करता है।
यांकी

1
हाय जोश, जब मैं स्रोत फ़ाइल ~ / .tmux.conf, यह पता चला:Unknown key: MouseDragEnd1Pane
Xifeng ली

@XifengLi आप किस tmux संस्करण और OS का उपयोग कर रहे हैं? मेरा मानना ​​है कि आपको DragEndचाबियों के लिए कम से कम tmux 2.2 की जरूरत है ।
जोश ब्रोबस्ट

8

स्वीकृत उत्तर के विस्तार के रूप में, लोगों को अक्सर यह पता चलता है कि माउस बटन को जारी करते समय कॉपी-मोड से बाहर निकलता है (यह वही होता है copy-pipe-and-cancel)। देखें: https://github.com/tmux/tmux/issues/140 । इसलिए, नए tmux में (मैं 2.6 का उपयोग करता हूं) हम चयन के copy-pipeसाथ clear selectionकॉपी करने के लिए एक साथ उपयोग कर सकते हैं लेकिन कॉपी-मोड से बाहर नहीं निकलते हैं:

bind-key -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe "xclip -selection clipboard -i" \; send -X clear-selection

2

Msys2 से विंडोज क्लिपबोर्ड पर कॉपी करने के लिए दोनों उत्तरों का विस्तार (और चयन को साफ़ करें):

# For vi copy mode bindings
bind -Tcopy-mode-vi MouseDragEnd1Pane send -X copy-pipe "cat > /dev/clipboard" \; send -X clear-selection
# For emacs copy mode bindings
bind -Tcopy-mode MouseDragEnd1Pane send -X copy-pipe "cat > /dev/clipboard" \; send -X clear-selection

अच्छी बात। मैं स्वयं कॉपी-मोड का उपयोग करता हूं (emacs शैली) और इसलिए परीक्षण के बाद मैंने अपना स्वयं का कॉन्फ़िगरेशन चिपकाया था। मैंने स्वीकार किए गए उत्तर में दोनों को शामिल करने के लिए उत्तर को अपडेट किया है।
शॉन हूवर

0

फिर भी एक और विस्तार Shiftकुंजी का उपयोग करने के बारे में है ।

Shiftमाउस के साथ पाठ का चयन करते समय पकड़ो । अब आपको एक मानक राइट-क्लिक मेनू मिलता है ( Shiftफिर से दबाए रखें या दबाएं ) और आप उपयोग कर सकते हैं Ctrl+Shift+Cऔर Ctrl+Shift+Vकॉपी और पेस्ट कर सकते हैं । सिस्टम क्लिपबोर्ड में नकल पाठ भी उपलब्ध होगा ।

के Ubuntu 18.04.1साथ परीक्षण किया गया tmux 2.6

स्रोत: https://forum.upcase.com/t/tmux-ctrl-shift-c-and-ctrl-shift-v-bindings/1208

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