मैं tmux शेल के आउटपुट बफर के भीतर कैसे खोज सकता हूं?


180

मैं यह काम करने के लिए नहीं मिल सकता। मैं tmux शेल के बफर को कैसे खोज सकता हूं?


1
tmux( tmux -V) का क्या संस्करण है ? मेरा मानना ​​है कि यह संस्करण 0.9 में जोड़ा गया था।
डेनिस विलियमसन

@ डेनिस यह 1.3-1
NES

1
संस्करण के साथ संस्करण खोजना tmux -Vकेवल बाद के संस्करणों में काम करता है। उबंटू / डेबियन में आप कर सकते हैं: dpkg -l | grep tmux
नील्स बॉम

जवाबों:


275

कॉपी मोड सर्च

tmuxवर्तमान विंडो के लिए इतिहास बफर में खोज करने के लिए, प्रेस Ctrl- b [दर्ज करने के लिए copy mode

यदि आप emacs कुंजी बाइंडिंग (डिफ़ॉल्ट) का उपयोग कर रहे हैं, तो दबाएं Ctrl- sफिर खोजने के लिए स्ट्रिंग टाइप करें और दबाएं Enternउसी स्ट्रिंग को फिर से खोजने के लिए दबाएँ । प्रेस Shift- nरिवर्स खोज के लिए। Escapeबाहर निकलने के लिए दो बार दबाएँ copy mode। आप उपयोग कर सकते हैं Ctrl- rरिवर्स दिशा में खोज करने के लिए। ध्यान दें कि चूंकि tmuxकीबोर्ड में नियंत्रण है copy mode, Ctrl- सेटिंग sकी परवाह किए बिना काम करता है stty ixon(जो मुझे stty -ixonबैश में आगे की खोजों को सक्षम करने के लिए पसंद है )।

यदि आप vi कुंजी बाइंडिंग ( Ctrl- b:set-window-option -g mode-keys vi) का उपयोग कर रहे हैं , /तो दबाएँ और खोज करने के लिए स्ट्रिंग टाइप करें Enternउसी स्ट्रिंग को फिर से खोजने के लिए दबाएँ । प्रेस Shift- nएमएसीएस मोड में रिवर्स खोज के लिए। qबाहर निकलने के लिए दो बार दबाएँ copy mode। आप ?रिवर्स दिशा में खोज करने के लिए उपयोग कर सकते हैं ।

लगता है खिड़की

यदि आप इसमें प्रदर्शित कुछ के आधार पर एक विंडो पर स्विच करना चाहते हैं (इसमें विंडो नाम और शीर्षक भी शामिल हैं, लेकिन इतिहास नहीं), (एक से अधिक विंडो ओपन के साथ शुरू) प्रेस Ctrl- b fफिर स्ट्रिंग को खोजने और प्रेस करने के लिए टाइप करें Enter। अगर यह मिल जाए तो आपको उस पाठ वाली विंडो पर स्विच कर दिया जाएगा। यदि एक से अधिक विंडो मेल खाती हैं, तो आपको चयन करने के लिए एक सूची दिखाई देगी।


3
मैं बंधन शैली कैसे सेट कर सकता हूं? (emacs बनाम vi)
डैनियल क्यू

2
@ डैनियलक्यू: tmux मैन पेज पर एक नज़र डालें और "मोड-कीज़" और "स्टेटस-कीज़" खोजें। वे उप-कमांड हैं जो आपको बाध्यकारी शैली सेट करने की अनुमति देते हैं। वैकल्पिक रूप से, पर्यावरण चर ( EDITORया VISUAL) उस शैली को सेट करना आसान हो सकता है जिसे आप शुरू करने से पहले चाहते हैं tmux
डेनिस विलियमसन

6
धन्यवाद, मुझे यह set-window-option -g mode-keys viमेरे साथ काम करने के लिए मिला .tmux.conf। लेकिन मैं पर्यावरण चर विकल्प के बारे में उत्सुक था और इसे काम करने के लिए नहीं मिला। क्या यह शेल पर्यावरण वैरिएबल है, या tmux एन्वायर्नमेंट वैरिएबल है जिसे कॉन्फिडेंस फाइल में सेट करना है?
डैनियल Que

2
@ डैनियलक्यू: एक शेल पर्यावरण चर। इसे निर्यात करना होगा या इस तरह से tmux के संवर्धन में रखा जाना चाहिए:VISUAL=vi tmux
डेनिस विलियम्सन

1
यह भी ध्यान दें कि अभी तक कोई रेगेक्स खोज नहीं हुई है, यहाँ एक खुला मुद्दा है sourceforge.net/p/tmux/ticket/9
एलिजा लिन

7

कॉपी मोड दर्ज करें और एक बार में खोज शुरू करें

bind-key / copy-mode \; send-key ?

आपको बस करने की अनुमति देता है:

 Ctrl + B /

और खोज शब्द लिखना शुरू करें।

फ़ाइल को डंप करें और विम का उपयोग करें

जब चीजें अधिक जुड़ जाती हैं, तो मैं बस एक उचित संपादक का उपयोग करना चाहता हूं: https://unix.stackexchange.com/questions/26548/write-all-tmux-scrollback-to-a-file

bind-key P 'capture-pane' \; capture-pane -S - \; save-buffer /tmp/tmux \; delete-buffer

अब Pबफ़र को फ़ाइल में डंप करता है, और फिर मैं बस:

vim /tmp/tmux

Tmux 2.6 में परीक्षण किया गया।


मैं फ़ाइल नाम के लिए यह संकेत कैसे बनाऊं (इसलिए मुझे हार्डकोड नहीं करना है /tmp/tmux)?
पीयूष कुशवाहा

@PeeyushKushwaha क्षमा करें, लेकिन मेरा tmux फू इतना अच्छा नहीं है, मुझे गूगल करना होगा, मुझे बताएं कि क्या आपको पता है।
सिरो सेंटिल्ली 新疆 i iro i 事件 '19

1

आप स्क्रीन लॉग को देखने / संपादित करने / खोजने / सहेजने के लिए vim का उपयोग कर सकते हैं, प्रत्येक bash प्रॉम्प्ट पर लॉग को मोड़ो:

tmux capture-pane -pS -1000000 |
  vim +":setl fen fdm=expr fde=getline(v:lnum)=~'^\\\\S\\+\\\\$\\\\s'?'>1':1"  -  

अपने प्रॉम्प्ट के अनुसार रेगेक्स को समायोजित करें, रेगेक्स में प्रत्येक बैकस्लैश के लिए चार बैकस्लैश का उपयोग करें।

या vim फंक्शन को ~ / .vimrc में डालें:

command!           MoshFoldTmuxLog :setl fen fdm=expr
  \   fde=getline(v:lnum)=~'^\\S\\+\\$\\s'?'>1':1 

और ~ / .bashrc में शीघ्रता से तारीख जोड़ें, यदि आपके पास खोज के लिए बहुत सारे लॉग हैं। जैसे

PS1='\u@\h:\w:\D{%F-%T}$?:\$ ' # user-host-pwd-date-time-errno 
alias tmux-log='tmux capture-pane -pS -1000000 | vi +MoshFoldTmuxLog -'         

0

यहाँ एक समाधान है जो मैंने पाया।

आप लक्ष्य पथ और फ़ाइल नाम को भी संशोधित कर सकते हैं:

# Save screen content to file
bind p command-prompt -p 'Save history to:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'

Tmux config फाइल को पुनः लोड करने के बाद आप prefix pमेरे मामले में दबा Ctrl+a p सकते हैं आप bind pअपने पसंदीदा कुंजी संयोजन में बदल सकते हैं ।

पहली खदान काम नहीं कर रही थी क्योंकि मैं bind pदूसरी लाइन में ओवर राइटिंग कर रहा था इसलिए मैंने सिर्फ यह टिप्पणी की।

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