tmux copy मोड - टेक्स्ट ब्लॉक का चयन करें


39

मैं vi कुंजी के साथ tmux का उपयोग कर रहा हूं, और जब तक आप पाठ की एक पंक्ति का चयन कर रहे हैं, या यदि आपके पास केवल एक विंडो है, तो कॉपी / पेस्ट ठीक काम करता है। जब मैं पाठ का एक खंड (कई पंक्तियों, लेकिन पूरी चौड़ाई नहीं) का चयन करना चाहता हूं, तो मैं मुसीबत में चला जाता हूं। यदि मेरे पास कई विम विंडो हैं, तो यह उन सभी में से पाठ का चयन करेगा, और मुझे केवल एक विंडो से पाठ का चयन करने की आवश्यकता है। यानी, विजुअल सिलेक्‍ट इन विम जैसा।

क्या ऐसा करना संभव है?


आप tmux में Vi कीबाइंडिंग को कैसे सक्रिय करते हैं?
रोमेनिल

अपने ~ / .tmux.conf में "सेट-विंडो-ऑप्शन -g मोड-की vi" जोड़ें
Srećko Toroman

1
ऐसा लगता है कि दृश्य ब्लॉक मोड का उपयोग करने के आपके प्रश्न के उत्तर नहीं मिल रहे हैं - "कई लाइनें, लेकिन पूरी चौड़ाई नहीं" भी वही है जो मैं देख रहा हूं। क्या आपको अपना स्वयं का समाधान मिला?
डूमोपॉली

नहीं, अभी भी कोई समाधान नहीं है।
स्रीकोको टॉरमन

दरअसल, एक उपाय है।
स्रीकोको टोरमन

जवाबों:


46

आवश्यक बाइंडिंग के लिए इस पोस्ट के निचले भाग की जांच करना सुनिश्चित करें, जो आपके .tmux.conf फ़ाइल में जाने की आवश्यकता है।

मैं मान रहा हूँ कि आपकी उपसर्ग कुंजी है Ca:

  • सीए का मतलब है: प्रेस Ctrl+A
  • Ca [का अर्थ है: दबाएँ Ctrl+ Aफिर दबाएँ[

पाठ में (1,1) से (2,2) तक पाठ का आयत चयन करने के लिए :

  • कॉपी मोड पर जाएं: Ca [
  • एक पंक्ति के बीच में ले जाएँ
  • प्रेस सी.वी.
  • स्पेस बार दबाये
  • चयन को जाखल के साथ स्थानांतरित करें
  • एक बार जब आप अपने चयन प्रेस के साथ खुश हो जाते हैं (या यदि आप अपनी गोपनीय फाइल में बंधन रखते हैं तो y)।
  • आप द्वारा नवीनतम कॉपी बफर पेस्ट कर सकते हैं: Ca]

ध्यान दें कि spaceआयत चयन के लिए दबाव आवश्यक है।

सामान्य रूप से आप की तरह लाइनों का चयन करने के लिए, कॉपी मोड पर जाएं, और v दबाएं, jkhl कुंजियों के साथ चयन करें और y दबाएं।

मेरे पास मेरे .tmux.conf में ये बाइंडिंग हैं:

संस्करण 2.4 से पहले (20 अप्रैल 2017) :

setw -g mode-keys vi
bind-key -t vi-copy 'v' begin-selection     # Begin selection in copy mode.
bind-key -t vi-copy 'C-v' rectangle-toggle  # Begin selection in copy mode.
bind-key -t vi-copy 'y' copy-selection      # Yank selection in copy mode.

संस्करण 2.4 के बाद :

setw -g mode-keys vi
bind-key -T copy-mode-vi 'v' send -X begin-selection     # Begin selection in copy mode.
bind-key -T copy-mode-vi 'C-v' send -X rectangle-toggle  # Begin selection in copy mode.
bind-key -T copy-mode-vi 'y' send -X copy-selection      # Yank selection in copy mode.

डिफ़ॉल्ट आयत-टॉगल बाइंडिंग को अनबाइंड करना महत्वपूर्ण है:

unbind-key -t vi-copy v  # Prior to version 2.4
unbind-key -T copy-mode-vi v

अन्यथा नया 'Cv' बाइंडिंग काम नहीं करता है।

नोट: एक एकल है .tmux.confजो संस्करणों में काम करता है, इस प्रश्न को देखें ।


1
बहुत बहुत धन्यवाद। जोर अपने tmux.conf पर है - आप शुरुआत में बाइंड-की -t-vi-copy 'Cv' आयत-टॉगल शामिल करने के लिए उत्तर को संपादित कर सकते हैं।
स्रीकोको टॉरमन

मूल प्रश्न पूछता है कि "मोड-कीज़ vi" के साथ काम करने वाले आयताकार चयन कैसे प्राप्त करें। इस प्रश्न का उत्तर देने के लिए कुंजी को फिर से बाँधने की आवश्यकता नहीं है। अन्य उत्तर देखें; यह चयन मोड से सिर्फ "v" और "स्पेस" है।
लेक्वेर्विग

यह इस तथ्य से इतर काम करता है कि jkhl काम नहीं करता है, मुझे घूमने के लिए तीर कुंजियों का उपयोग करना पड़ता है, क्या इसे बदलने का कोई तरीका है?
मैक्स

बीच क्या अंतर है sendऔर send-keys। मैं देख रहा हूँ superuser.com/questions/196060/selecting-text-in-tmux-copy-mode send-key में उपयोग किया जाता है। क्या उद्धरण चिह्न भी महत्वपूर्ण हैं?
user2442366

15

चयन vशुरू करने से पहले आप vi की तरह एक दृश्य ब्लॉक का चयन कर सकते हैं । मैनपेज में, इसे "आयत टॉगल" कहा जाता है।


2
वही मैं उपयोग कर रहा हूं। लेकिन यह एक समस्या है जो मैंने ऊपर वर्णित की है। आयत हमेशा पूरी चौड़ाई की होती है। मुझे एक VIM- जैसी आयत (X1, y1) - (x2, y2) की आवश्यकता है :)
Srećko Toroman

1
@ स्रीकोको टॉरमन क्या आप पूरी चौड़ाई के साथ वास्तव में मतलब है?
गीताकार

9

जैसा कि लार्स बताते हैं, vवास्तव में वही करता है जो आप आयत मोड और फुल-लाइन चयन मोड के बीच टॉगल करके पूछ रहे हैं। spaceऔर enterएक नया चयन शुरू करने और उसे कॉपी करने के लिए क्रमशः उपयोग किया जाता है। अपने उपसर्ग का उपयोग करके कॉपी मोड दर्ज करें [और अपने कॉपी किए गए चयन को किसी भी tmux विंडो में उपयोग करके पेस्ट करें]

इस के बाद से भी मुझे उलझन में vvim में कार्य के रूप में spacetmux में करता है, चयन शुरू करने के लिए।

Tmux :list-keys -t vi-copyमें जारी करने से कमांड का पूरा टेबल कॉपी मोड में दिखाई देगा।

bind-key -t vi-copy    C-b page-up                                                      
bind-key -t vi-copy    C-c cancel
bind-key -t vi-copy    C-e scroll-down
bind-key -t vi-copy    C-f page-down
bind-key -t vi-copy    C-h cursor-left
bind-key -t vi-copy  Enter copy-selection
bind-key -t vi-copy    C-y scroll-up
bind-key -t vi-copy Escape clear-selection
bind-key -t vi-copy  Space begin-selection
bind-key -t vi-copy      $ end-of-line
bind-key -t vi-copy      , jump-reverse
bind-key -t vi-copy      / search-forward
bind-key -t vi-copy      0 start-of-line
bind-key -t vi-copy      1 start-number-prefix
bind-key -t vi-copy      2 start-number-prefix
bind-key -t vi-copy      3 start-number-prefix
bind-key -t vi-copy      4 start-number-prefix
bind-key -t vi-copy      5 start-number-prefix
bind-key -t vi-copy      6 start-number-prefix
bind-key -t vi-copy      7 start-number-prefix
bind-key -t vi-copy      8 start-number-prefix
bind-key -t vi-copy      9 start-number-prefix
bind-key -t vi-copy      : goto-line
bind-key -t vi-copy      ; jump-again
bind-key -t vi-copy      ? search-backward
bind-key -t vi-copy      B previous-space
bind-key -t vi-copy      D copy-end-of-line
bind-key -t vi-copy      E next-space-end
bind-key -t vi-copy      F jump-backward
bind-key -t vi-copy      G history-bottom
bind-key -t vi-copy      H top-line
bind-key -t vi-copy      J scroll-down
bind-key -t vi-copy      K scroll-up
bind-key -t vi-copy      L bottom-line
bind-key -t vi-copy      M middle-line
bind-key -t vi-copy      N search-reverse
bind-key -t vi-copy      T jump-to-backward
bind-key -t vi-copy      W next-space
bind-key -t vi-copy      ^ back-to-indentation
bind-key -t vi-copy      b previous-word
bind-key -t vi-copy      e next-word-end
bind-key -t vi-copy      f jump-forward
bind-key -t vi-copy      g history-top
bind-key -t vi-copy      h cursor-left
bind-key -t vi-copy      j cursor-down
bind-key -t vi-copy      k cursor-up
bind-key -t vi-copy      l cursor-right
bind-key -t vi-copy      n search-again
bind-key -t vi-copy      q cancel
bind-key -t vi-copy      t jump-to-forward
bind-key -t vi-copy      v rectangle-toggle
bind-key -t vi-copy      w next-word
bind-key -t vi-copy BSpace cursor-left
bind-key -t vi-copy  NPage page-down
bind-key -t vi-copy  PPage page-up
bind-key -t vi-copy     Up cursor-up
bind-key -t vi-copy   Down cursor-down
bind-key -t vi-copy   Left cursor-left
bind-key -t vi-copy  Right cursor-right
bind-key -t vi-copy   C-Up scroll-up
bind-key -t vi-copy C-Down scroll-down

मुझे यह दोबारा नहीं मिला। एक ऊर्ध्वाधर विभाजन के साथ एक विम विंडो को देखते हुए, आप केवल पहले विभाजन में एक आयत का चयन कैसे करते हैं? यहां, बहु-आयताकार हमेशा पूर्ण Tmux फलक लपेटेगा। यह विम ब्लॉक चयन जैसा नहीं है। मैं tmux 1.5 का उपयोग कर रहा हूं, हो सकता है कि यह आपके संस्करण में भिन्न हो?
सेरेकोको टॉरमन

हाँ, यहाँ, v को आरंभ-चयन के लिए मैप किया गया है। आयत-टॉगल अपरिभाषित है। इसलिए मुझे लगता है कि आप दोनों सही हैं, मुझे सिर्फ अपने क्लाइंट को अपडेट करने की आवश्यकता है?
स्रीकोको टॉरमन

यदि आपके पास एक एकल tmux फलक में खुली हुई vim विंडो खुली है, तो क्या आप vim के yank और पेस्ट क्षमता का उपयोग नहीं कर सकते? यदि दूसरी ओर आपके पास दो tmux पैन हैं, तो प्रत्येक की अपनी vim विंडो है, tmux select / copy फलक के किनारों पर लपेटने में सक्षम होना चाहिए। मैं tmux 1.7 का उपयोग कर रहा हूं
यहां

6

चूंकि अन्य उत्तरों में से कोई भी समस्या का एक इष्टतम समाधान नहीं देता है, इसलिए मैं नेक्रोमेंसी से ऊपर नहीं हूं।

वहाँ एक तरह से ब्लॉक का चयन करने का एक तरीका है जो वैम में उसी तरह काम करता है, जैसे कि अंतरिक्ष को दबाए बिना। बस एक सरल Ctrl-V, आपकी मांसपेशियों की मेमोरी में अंतर्ग्रहीत है।
इसे आपके .tmux.conf (लेकिन पहले से ही ऐसा करने वाले vi- मोड का उपयोग करना) को संपादित करने की आवश्यकता है और मुझे यकीन नहीं है कि यह tmux / 2.4 के लिए काम करता है।

विम चयन और यान बाइंडिंग को दोहराने के लिए इसे अपने .tmux.conf में जोड़ें:

# set vi-mode
set-window-option -g mode-keys vi
# keybindings
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle \; send -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
# comment the preceding line and uncomment the following to yank to X clipboard
# bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"

चयन मोड दर्ज करें और जहां आप चयन शुरू करना चाहते हैं, वहां नेविगेट करें। अब vनियमित (चरित्र-द्वारा चरित्र, लाइन-वार) चयन <C-v>शुरू होता है , ब्लॉक चयन शुरू होता है और V(शिफ्ट-वी) लाइन चयन शुरू होता है। चयन के प्रकार के बावजूद, ytmux पेस्ट बफर (या एक्स क्लिपबोर्ड पर yanks; ऊपर कोड टिप्पणियां देखें)।

विम के समान।


मेरे लिए काम किया है, अपने necomancy की ओर एक उत्थान है off
mahemoff

2

संपादित करें: स्रोत कोड की जाँच करने के बाद, मैंने अपना उत्तर पूरी तरह से लिख दिया है।

मैंने मूल रूप से सोचा था कि यह संभव नहीं था क्योंकि मुझे यह काम करने के लिए नहीं मिल सकता था, लेकिन अन्य उत्तर इसके vलिए सही कुंजी होने के बारे में सही हैं, लेकिन यह स्पष्ट नहीं है कि इसका उपयोग कैसे किया जाए, खासकर यदि आप इसका उपयोग करते हैं।

इसके अलावा, यह मेरे लिए काम नहीं करेगा क्योंकि मुझे vबाध्य किया गया था begin-selection- मुझे लगता है कि मुझे इस विचार को कहीं और से कॉपी करना चाहिए था ताकि एक चरित्र वार चयन शुरू करने के लिए इस तरह की नकल की जा सके, यह न जानते हुए कि इससे आगे की समस्याओं का सामना करना पड़ेगा। चयन ब्लॉक करें।

$ tmux -V
tmux 1.9a
$ tmux list-keys -t vi-copy  | grep " v "
bind-key -t vi-copy      v begin-selection     # suppressed my block selection mode

एक बार जब मैंने इस बंधन को हटा दिया (मेरी .tmux.confऔर रेखा को पुनः आरंभ करने की टिप्पणी करके ), यह काम करना शुरू कर दिया, लेकिन यह अभी भी भ्रमित है क्योंकि यह बिल्कुल भी समान नहीं है।

डिफ़ॉल्ट बाइंडिंग के साथ, इसे निम्नानुसार काम करना चाहिए:

  1. सुनिश्चित करें कि आप tmux साथ unning गए हैं setw -g mode-keys viअपने में .tmux.conf
  2. C-a [कॉपी मोड शुरू करने के लिए टाइप करें
  3. कर्सर को उस स्थान पर ले जाएं जहां आप चयन शुरू करना चाहते हैं
  4. प्रकार v
  5. Spaceचयन शुरू करने के लिए टाइप करें
  6. कर्सर ले जाएं और आपको एक आयताकार चयन दिखाई देगा
  7. आप vफिर से चयन को चरित्र-वार चयन या इसके विपरीत में वापस टॉगल करने के लिए दबा सकते हैं।

vप्रेस करने से पहले आपको टाइप करने की जरूरत नहीं है Space। आप Spaceपहले से चरित्र-वार चयन शुरू कर सकते हैं और vबाद में आयताकार चयन मोड को चालू करने के लिए दबा सकते हैं ।

यह vim से काफी भिन्न है कि tmux में आपको दो अक्षर टाइप करने होंगे: Spaceऔर vआयताकार चयन मोड में आने के लिए। Vim में आपको केवल टाइप करना है Ctrl-V

इसके अलावा, vएक चरित्र-वार चयन शुरू होता है, ब्लॉक नहीं।

अफसोस की बात है कि tmux ( Shift-vvim) में लाइन-वार चयन मोड प्रतीत नहीं होता है ।
संपादित करें: ऐसा लगता है कि Tmux संस्करण 2.0 के साथ एक लाइन-वार चयन मोड प्रदान करता है Shift-v(मैंने अभी तक इसकी कोशिश नहीं की है!)


"V" दबाएं और आप लाइनों का चयन कर सकते हैं। जगह की जरूरत नहीं।
अमीर एच। सगौई

1
@ AmirH.Sadoughi, ऐसा इसलिए है क्योंकि (आपके उत्तर के अनुसार) आपने डिफॉल्ट्स को बदल दिया है और "स्पेस" के बजाय चयन शुरू करने के लिए "v" को बाध्य किया है। यदि आप एक खाली .tmux.conf से शुरू करते हैं, तो आपको वह व्यवहार ढूंढना चाहिए जिसका मैं वर्णन करता हूं कि यह सही है; चयन शुरू करने के लिए आपको "स्पेस" दबाना होगा।
लैक्वेर्विग

1
मुझे सही करने के लिए धन्यवाद। आपके अंतिम वाक्य (लाइन-वार चयन के बारे में) को संबोधित करने के लिए, मैं यह कहने की कोशिश कर रहा था कि अपने कॉन्फिग के साथ, मैं cv-space के साथ एक ब्लॉक सिलेक्शन कर सकता हूं, और मैं v के साथ एक लाइन सिलेक्शन कर सकता हूं। "मुझे लाइनों का चयन करने की अनुमति देता है।
अमीर एच। सगौई

मुझे लगता है कि विश्वास करना बहुत कठिन है क्योंकि लाइन-वार चयन केवल हाल ही में ( Shift-vरिलीज़ 2.0 मार्च 2015 में) Tmux में जोड़ा गया था , निश्चित रूप से मेरे उत्तर के बाद और आपके मूल उत्तर के बाद। शायद आप और मैं दो अलग-अलग चीजों के बारे में बात कर रहे हैं जब हम लाइन-वार चयन के बारे में बात करते हैं। VIM ( v, Shift-vऔर Ctrl-v) में 3 चयन मोड के साथ तुलना करें ।
लेक्वेर्विग

आप सही हैं, मैंने अभी इसका परीक्षण किया है। मेरा vचयन चरित्र वार है। मैं 1.9a संस्करण पर हूं और मेरे पास लाइन-वार चयन नहीं है। तो, संस्करण 2.0 के साथ, सटीक तीन मोड जो विम के पास है वह भी tmux में संभव है, है ना?
अमीर एच। सगौई
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.