किसी फ़ाइल में सभी tmux स्क्रॉलबैक लिखें


194

मैं एक फ़ाइल में tmux सत्र में सभी स्क्रॉलबैक कैसे लिख सकता हूं?

capture-panel वर्तमान स्क्रीन को पकड़ सकता है, लेकिन संपूर्ण स्क्रॉलबैक को नहीं।

जवाबों:


52

यह उस मूल्य पर निर्भर करता है history-limitजिसे आपने अपने में सेट किया है .tmux.conf- डिफ़ॉल्ट 2000 है; यदि आप अधिक कैप्चर करना चाहते हैं, तो आपको स्पष्ट रूप से लाइनों की संख्या निर्धारित करनी होगी।

संपूर्ण स्क्रॉलबैक कैप्चर करने के लिए, कॉपी मोड दर्ज करें, पूरे स्क्रॉलबैक का चयन करें, और इसे बफर में जमा करें, फिर इसे अपनी फ़ाइल में पेस्ट करें।

आप इसे कैसे पूरा करेंगे यह mode-keysआपके द्वारा पसंद किए गए विकल्प पर निर्भर करेगा , vi या emacs। man tmuxसंबंधित कुंजियों का वर्णन करने में एक सहायक तालिका है।

.tmux.confइसे सरल बनाने के लिए मेरे पास निम्नलिखित हैं :

unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection

पूर्ण स्क्रॉलबैक कैप्चर करने की प्रक्रिया तब है:

PrefixEsc : कॉपी मोड में प्रवेश करने के लिए

v : दृश्य चयन शुरू करने के लिए (आप स्क्रीन के नीचे पहले से ही हैं)

gg : स्क्रॉलबैक में सब कुछ कैप्चर करने के लिए

y : इसे बफर में डालना

Prefixc : एक और tmux विंडो खोलें

vim scrollback.txt

i : vim में इन्सर्ट मोड डालें

Prefixp : फाइल में पेस्ट करें

यहाँ एक उत्तर यह भी है कि इसका उपयोग करने वाली अस्थायी फ़ाइल में बफर को कॉपीxsel करने का वर्णन कैसे उपयोगी हो सकता है।


2
यह सबसे अच्छा समस्याग्रस्त है ... विम में सम्मिलित मोड में चिपकाने से सभी प्रकार की समस्याएं होती हैं, उदाहरण के लिए जब आपके पास स्वचालित इंडेंटेशन सक्षम है। मुझे अपनी संतुष्टि के लिए यह काम करने के लिए कभी नहीं मिला।
कोनराड रूडोल्फ

13
यदि आप :set pasteविम का उपयोग करते हैं , तो विम स्वचालित इंडेंटेशन या किसी भी सम्मिलित-आधारित कीबाइंडिंग को जोड़ने पर ध्यान नहीं देगा।
21

@ अच्छा टिप!
जसोनव्रीयन

क्या यह डिफ़ॉल्ट कुंजी बाइंडिंग के साथ किया जा सकता है?
17

@ निश्चित रूप से, बस कीबाइंड विकल्पों का उपयोग न करें जिन्हें मैंने अपने में शामिल किया है .tmux.conf...
jasonwryan

223

एक सरल उत्तर की तलाश करने वालों के लिए, बस prefix+ का उपयोग करें :, फिर capture-pane -S -3000+ में टाइप करें return( 3000हालांकि कई पंक्तियों को आप सहेजना चाहेंगे।) यह उन पंक्तियों को एक बफर में कॉपी करता है।

फिर, बफर को एक फ़ाइल में सहेजने के लिए, बस prefix+ :फिर से उपयोग करें, और save-buffer filename.txt+ में टाइप करें, जो भी आप चाहते हैं उसके साथ returnप्रतिस्थापित filenameकरें।

(डिफ़ॉल्ट रूप से prefixहै ctrl + b।)


14
save-buffer filename.txt/में pwd(वर्तमान निर्देशिका) में नहीं, फ़ाइल को बचाने के लिए लगता है । इसके बजाय, मैंने एक पूर्ण फ़ाइल पथ प्रदान किया और इसने एक आकर्षण की तरह काम किया
मोहम्मद इज़

14
और यह मत भूलो कि सामने MINUS << राशि-के-बफर-लाइनों-आप-चाहते-बचाने के लिए >>
Yordan Georgiev

9
यह यहाँ का सबसे अच्छा जवाब है। बहुत बहुत धन्यवाद।
जेसी एटकिंसन

7
हां, आप जीत गए। यह शीर्ष उत्तर होना चाहिए।
शब्दफिरवाइज

1
+ n> 1 उत्थान में लॉग इन करने के बाद, ऐसा प्रतीत होता है कि यह कम से कम दूसरी बार है जब यह उत्तर मेरे लिए उपयोगी रहा है। XD
L0j1k

159

Tmux 1.5 के साथ , capture-paneकमांड स्वीकार करता है -Sऔर -Eकैप्चर की शुरुआत और अंत लाइनें निर्दिष्ट करता है ; इतिहास से लाइनें निर्दिष्ट करने के लिए नकारात्मक मानों का उपयोग किया जा सकता है। एक बार जब आपके पास एक बफर में डेटा होता है, तो आप इसे सहेज सकते हैं save-buffer

एक उदाहरण बाइंडिंग (इसके लिए उपयुक्त .tmux.conf) है जो इसे फ़ाइल नाम के लिए प्रांप्ट करता है:

bind-key P command-prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'

यह इतिहास के 32768 लाइनों के साथ-साथ वर्तमान में प्रदर्शित लाइनों को पकड़ता है। के साथ शुरू tmux 1.6, आप INT_MIN करने के लिए नीचे नंबरों का उपयोग कर सकते हैं यदि आपके फलक एक इतिहास है कि 32Ki लाइनों (आमतौर पर 2Gi लाइनों तक) की तुलना में गहरी है। Tmux 2.0 में शुरू , आप capture-pane -S -"इतिहास की शुरुआत में शुरू" (यानी कोई बड़ी, हार्ड-कोडेड नकारात्मक संख्या) का मतलब करने के लिए उपयोग कर सकते हैं ।


नोट: सहेजी गई फ़ाइल में पंक्तियों की संख्या हमेशा फलक की इतिहास सीमा और उसकी ऊँचाई के बराबर नहीं होगी।

जब एक फलक का इतिहास बफ़र भरा होता है, तो tmux केवल एक लाइन को छोड़ने के बजाय सबसे पुरानी 10% लाइनों को छोड़ देता है। इसका मतलब है कि फलक की प्रभावी इतिहास गहराई कभी-कभी इसकी कॉन्फ़िगर सीमा के 90% तक कम होगी।


1
आप शायद tmux 1.3 चला रहे हैं ; आप शायद tmux server-info | head -1अपने संस्करण को देखने के लिए उपयोग कर सकते हैं। tmux -Vtmux में काम करता है * 1.4 और बाद में।
क्रिस जॉन्सन

1
यह अब तक के सबसे उपयोगी tmux कमांड में से एक है जो मैंने पाया है।
केनी

1
और यदि आप पहले से ही अपनी tmux विंडो में हैं और आप [PrefixKey] : tmux कमांड लाइन में जाने के लिए बस पुनः आरंभ नहीं करना चाहते हैं , और फिर पूरी लाइन को पेस्ट करते हैं, तो आप बस [Prefix] P इसे कैपिटल P करते हैं और आप जा सकते हैं।
अली

1
@ ब्रैडेनबेस्ट एक एसआई उपसर्ग को एक इकाई से जुड़ा होना चाहिए। न तो "32Ki" और न ही "32K" मान्य है। कोई बात नहीं कि अपरकेस K एक SI उपसर्ग नहीं है। अच्छा काम भ्रम की स्थिति के कारण पेडिंग बुवाई और गलत हो रहा है।
डबिन्सकी

1
द्विआधारी उपसर्गों @BradenBest भ्रम बोना क्योंकि 1 एमबी करने के लिए इस्तेमाल एक सटीक अर्थ नहीं है, लेकिन अब यह दो अर्थ है। इससे भी बदतर, दशमलव का अर्थ आईटी उद्योग के लिए बेकार है, भंडारण निर्माताओं को छोड़कर जो इसका उपयोग झूठी विपणन के लिए करते हैं। यह भ्रम बालकों द्वारा शुरू किया गया था जिन्होंने व्यावहारिक होने से इनकार कर दिया था। यदि आप स्वयं इस तरह के पांडित्य नहीं हैं, तो मैं अपने स्वर के लिए माफी माँगता हूँ और आपसे द्विआधारी उपसर्गों के प्रति अपने उत्साह पर पुनर्विचार करने का आग्रह करता हूँ।
Aleksandr Dubinsky

19

मेरे पास मानक कुंजी बाइंडिंग थी जो @ jasonwryan के उत्तर की तुलना में थोड़ी भिन्न दिखाई देती थी और कॉन्फ़िगरेशन में कुछ भी नहीं बदलती थी।

नीचे नुस्खा है कि मेरे लिए काम किया है। हो सकता है कि आपको यह उपयोगी लगे अगर आप tmux config में कोई बदलाव नहीं करना चाहते हैं और बस जल्दी से कुछ स्क्रॉलबैक कॉपी करना चाहते हैं।

Prefix== Ctrl+bमेरे tmux (tmux 1.6, debian 7) में।

  1. चयन मोड दर्ज करें: Prefix+ [
  2. प्रारंभ चयन: Space
  3. विम नेविगेशन (उदाहरण के लिए, तीर कुंजी का उपयोग करें या ggआउटपुट इतिहास की शुरुआत तक पहुंचने के लिए प्रेस ) का उपयोग करके आवश्यक टेक्स्ट को हाइलाइट करें ।
  4. वास्तव में आंतरिक क्लिपबोर्ड का उपयोग करके कॉपी करें Enter। आपको कॉपी मोड से बाहर कर दिया जाएगा।
  5. किसी भी फ़ाइल का उपयोग vim (शायद नई tmux टैब पर) खोलें और पेस्ट सामग्री आप उपयोग करने से पहले की नकल की Prefix+ ]
  6. तब आप उस फ़ाइल की कैट कर सकते हैं या आउटपुट का उपयोग कर सकते हैं, जिसकी आपको आवश्यकता है।

आदमी tmux ने मुझे यह बताने में मदद की कि मेरा tmux emacs मोड में है, इसलिए ऊपर दिए गए की-बाइंडिंग में से कोई भी काम नहीं किया। आदमी tmux, फिर से, मुझे मदद मिली कि क्या उपयोग करना है। लेकिन सबसे बड़ी गलती जो मैंने की वह यह थी कि जिस होस्ट से मैंने सामग्री को बचाया था वह मेजबान नहीं था जिससे मैं tmux चला रहा था, इसलिए मैं गलत होस्ट पर सहेजी गई फ़ाइल को
ढूंढता रहा

16

यदि आप कुछ चाहते हैं तो आप कमांड लाइन से भाग सकते हैं (अपनी tmux उपसर्ग कुंजियों का उपयोग करने के बजाय), चलाने का प्रयास करें:

tmux capture-pane -pS -1000000

यदि आप इसे चलाते हैं और यह कुछ भी नहीं करने के लिए लगता है, ऐसा इसलिए है क्योंकि यह बिल्कुल वही है जो आपकी स्क्रीन पर था, इसलिए यह समान दिखता है।

बेशक, आप इसे एक फ़ाइल में भी पाइप कर सकते हैं:

tmux capture-pane -pS -1000000 > file.out

tmuxमैन पेज देखें और capture-paneउन अधिक चीजों की खोज करें, जो आप कर सकते हैं (जैसे रंग से बचना चाहते हैं, अगर आप नई लाइन में शामिल नहीं हैं, तो निर्दिष्ट करें कि क्या आप कई विजुअल लाइनों को जोड़ना चाहते हैं या शामिल होना चाहते हैं)


1
यह बहुत मददगार है, खासकर जब से स्वीकृत जवाब अब काम नहीं करता है।
पीजो

13

यहाँ एक tmux प्लगइन है जो इसे सक्षम करता है:

https://github.com/tmux-plugins/tmux-logging

इसे स्थापित करने के बाद, संपूर्ण स्क्रॉलबैक को इसके साथ सहेजें prefix + alt-shift-p


4

यह वास्तव में बहुत आसान है। प्रेस द्वारा आदेश मोड दर्ज करें prefix keyतो :। तो फिर ऐसा capture-pane -S -<line number you want to dump> तबsave-buffer <filepath>

उस फ़ाइल में सभी स्क्रॉलबैक आउटपुट शामिल हैं। आपको सुरक्षा कारणों से बफर को बाद में हटा देना चाहिए।


1

मैं एक फ़ाइल में tmux सत्र में सभी स्क्रॉलबैक कैसे लिख सकता हूं?

मैं इसका उपयोग अपने ~ / .tmux.conf में करता हूं , और अब जब मैं अपने रनिंग शेल से बाहर निकलता हूं, तो पेन आउटपुट अद्वितीय लॉग फ़ाइल में सहेजा जाता है:

set -g remain-on-exit
set-hook pane-died 'capture-pane -S - -E - ; save-buffer "$HOME/logs/tmux/tmux-saved.#{host_short}-#{session_id}:#{window_id}:#{pane_id}-#{pane_pid}-#{client_activity}.log"; delete-buffer; kill-pane'                        
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.