मैं Tmux में स्क्रॉलबैक बफर कैसे साफ़ कर सकता हूँ?


जवाबों:


211

यही सवाल काफी समय से मुझे कचोट रहा है। यहाँ सबसे अच्छा मैं आया हूँ। इसे अपने .tmux.conf फ़ाइल में डालें:

bind -n C-k clear-history

यह ttux clear-history कमांड को ctrl-k बाँधता है। बाँध के बाद -n बनाता है ताकि आपको tmux कमांड उपसर्ग (डिफ़ॉल्ट रूप से ctrl-b) जारी न करना पड़े। मैं बैश का उपयोग करता हूं, इसलिए ctrl-l पहले से ही कमांड लाइन पर "स्पष्ट" टाइप करने के बराबर है। इन दो चाबियों के साथ मुझे एक अच्छा ctrl-l, ctrl-k कॉम्बो मिलता है, जो स्क्रीन से सभी स्क्रॉल बफर ("स्पष्ट") को स्थानांतरित करता है और फिर उस सभी इतिहास (tmux "स्पष्ट-इतिहास" कमांड) को हटा देता है।

यह टर्मिनल के रूप में काफी अच्छा नहीं है, iTerm's, या इसे सांत्वना देने के लिए कॉन्सोल का 1-कुंजी कॉम्बो है, लेकिन यह हर समय स्पष्ट-इतिहास में टाइप करने से बेहतर है।


15
अच्छा लगा। मैं bind k send-keys "clear"\; send-keys "Enter"समाशोधन भाग के लिए कर रहा हूं , लेकिन अंतर्निहित का उपयोग करना ctrl+lसरल है, और clear-historyस्क्रॉलबैक इतिहास से छुटकारा पाने के लिए एक अच्छा अतिरिक्त है।
हेनरिक एन

1
यह बाइंडिंग मेरे पैन को खराब कर देती है, सभी पैन से सभी टेक्स्ट को हटा देती है और उनके चारों ओर की सीमाओं को हटा देती है! व्हाट्स अप पर कोई विचार?
इयान वॉन

ओह। आप किस शेल प्रोग्राम का उपयोग करते हैं? क्या यह संयोग से पहले से ही कुछ व्यवहार को ctrl + k के लिए परिभाषित करता है?
जुआनपाको

iTerm2। बस देखा कि ttux बाइंडिंग सेट के बिना ctrl + k पहले से ही ऐसा करता है, इसलिए इसे iTerm2 मैपिंग होना चाहिए।
इयान वॉन

अजीब। मैं iTerm2 का भी उपयोग करता हूं। मैंने इसे कुछ समय के लिए अपडेट नहीं किया है, इसलिए यह एक संस्करण अंतर हो सकता है। मैं अब Ck का उपयोग नहीं करता, क्योंकि इससे मेरी vim बाइंडिंग में समस्याएँ होती थीं। मैं अब Cn का उपयोग करता हूं।
जुआनपाको

58

जैसा कि @juanpaco ने सही कहा है, clear-historyस्क्रॉलबैक बफर को खाली करने की कमांड है।
मैं जोड़ूंगा कि मुझे यह भी स्पष्ट करना है कि एक ही कमांड में स्क्रीन पर क्या है। send-keys -Rस्क्रीन को रीसेट (क्लियर) जारी करना , इसलिए मैं अपने में निम्न का उपयोग करता हूं.tmux.conf

bind-key b send-keys -R \; clear-history

यह स्क्रीन और स्क्रॉलबैक बफर को साफ करता है।


1
सीधे tmux प्रलेखन से send-keys: "-R ध्वज टर्मिनल स्थिति को रीसेट करने का कारण बनता है।" आपको शायद अपडेट करने की जरूरत है।
z5h

20
-R का उपयोग करने का दोष यह है कि आपकी वर्तमान इनपुट-लाइन becames छिपी हुई है, जब आप Ctrl + l के साथ अपना टर्मिनल साफ़ करते हैं, तो अलग-अलग। मैंने जो कुछ किया हैbind -n C-l send-keys C-l \; clear-history
वोलापो

6
आप में से जो नहीं जानते (जैसे मैंने नहीं किया), clear-historyकमांड में प्रवेश करने के लिए राज्य में आने के लिए , प्रेस करें Ctrl+B, और फिर एक कॉलन ( :) के साथ कमांड शुरू करें ।
पलसिम

1
@volpato मुझे आपका दृष्टिकोण पसंद है, लेकिन मुझे लगता है कि यह अभी भी स्क्रॉल में वापस बफर की एक 'स्क्रीन' छोड़ता है। पता नहीं क्यों। -R प्रॉम्प्ट को खाली करता है, लेकिन मैंने अंत में एक अतिरिक्त सेमी जोड़कर इसे 'हल' कर दिया (लेकिन फिर इसे दूसरी पंक्ति में रखता है)।
गदोग 20

2
आप इसके लिए संक्षेपण कर सकते हैं send-keys -R C-l \; clear-history
ivan

35

यहाँ पर हर उत्तर नई कुंजी बाइंडिंग जोड़ने के बारे में बात करता है।

यदि आप इसे कभी-कभी करना चाहते हैं, तो आपको मानचित्रण की आवश्यकता नहीं है ...

उपसर्ग चूक <Ctrl-b>

बस <prefix>:संबंधित फलक में टाइप करें clear-historyऔर फिर टाइप करें और एंटर दबाएं।

Tmux के बारे में ठंडी चीजों में से एक यह है कि आप बस किसी भी तरह की कमांड को चला सकते हैं ... या उन्हें किसी शेल / स्क्रिप्ट में चला सकते हैं ... या उनके tmux commandलिए एक कीबोर्ड शॉर्टकट बना सकते हैं।


8
पहले तीन पात्रों को टाइप करना संभव है cle, और फिर <tab>पहली बार के साथ स्वत: पूर्ण , फिर दूसरी बार <up arrow>पिछली प्रविष्टि का उपयोग करने के लिए उपयोग करें। इस तरह यह काफी तेज है।
bct

1
यह मेरे लिए काम नहीं करता है क्योंकि जब मैं <Ctrl-b> the c` कुंजी मारने के बाद टाइप करना शुरू करता हूं तो एक नई विंडो बनाई जाती है।
फ्रैक्चर

@fraxture मुझे लगता है कि आप गलत समझ रहे हैं - आप प्रेस करने के बाद <Ctrl-b> फिर :इसे दबाएं आपको एक इंटरैक्टिव संकेत देता है - यही वह जगह है जहां आप 'c' टाइप करेंगे
JonnyRaa

21

यदि आप CTRL-Lप्लस-क्लियर-हिस्ट्री को जोड़ना चाहते हैं , तो इसे अपने साथ जोड़ें ~/.tmux.conf:

bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history

यह तब भी काम करता है जब आप उदाहरण के लिए MySQL शेल में हों।


1
यह काम के दौरान प्रतीत नहीं होता, कहते हैं tail -f some.log, ठीक है? क्या इसके ctrl-Zसाथ गठबंधन करने का कोई तरीका है ? यह सही लग सकता है।
आरोन जिब्राल्टर

19

मैं send-keys -Rथोड़ा धीमा होने का उपयोग कर पाया - यहां स्क्रीन और इतिहास को एक ही आदेश के साथ साफ़ करने का एक और तरीका है

bind-key C send-keys "clear && tmux clear-history" \; send-keys "Enter"  

एक नेस्टेड tmux कॉल को अधिक स्पष्ट के रूप में उपयोग किया जाता है

bind-key C send-keys "clear" \; send-keys "Enter" \; clear-history

इतिहास से स्क्रीन के वर्तमान पाठ को साफ़ करने में विफल रहता है - स्पष्ट-इतिहास आदेश भेजने के लिए एक अलग थ्रेड में चलता है।


5
इस दृष्टिकोण के साथ एक चेतावनी है और यह है कि यह केवल स्थानीय गोले पर काम करता है, क्योंकि यह tmux को स्पष्ट इतिहास को स्ट्रिंग के रूप में भेजता है जिसे सक्रिय फलक पर लिखा जाना है। मैंने इसे अनुकूलित किया है:bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
पी।

12

अधिकांश की तुलना में सरल, मैंने अभी-अभी एक शेल स्क्रिप्ट बनाई है cls, और जब भी मैं अपनी स्क्रीन और स्क्रोलबैक बफर को साफ़ करना चाहता हूं, तो इसे चलाएं।

यह सब यह है:

सीएलएस

clear;
tmux clear-history;

3
लेकिन क्या होगा यदि आपके पास कमांड लाइन तक पहुंच नहीं है। जैसे कि जब कोई सर्वर चल रहा हो और आप लॉग देख रहे हों।
zudduz

तुम कहाँ से लॉग देख रहे हो जाएगा? एक वेबसर्वर पर? यदि ऐसा है, तो मुझे नहीं लगता कि tmux क्यों शामिल है?
ब्रैड पार्क

1
सर्वर लॉग और आपके vim एडिटर को एक साथ देखने में सक्षम होना अच्छा है।
zudduz

क्या आप tmux विभाजन का उपयोग करते हैं? यदि नहीं, तो बस अपनी विंडो को 2 में विभाजित करें, और अपने लॉग को एक में देखें, और अपने tmux सेशन के अंदर सिर्फ `tmux विभाजित” चलाकर दूसरे में vim का उपयोग करें ... लेकिन शायद मुझे वह नहीं मिल रहा है जो आप कर रहे हैं?
ब्रैड पार्क्स

10

पाया यह टीएमयूएक्स 2.6 में सबसे अच्छा काम करता है, स्क्रीन को साफ़ करता है, स्क्रॉलबैक करता है, लेकिन इसके तुरंत बाद प्रदर्शित किया जाता है।

Ctrl-L का उपयोग करता है

bind-key -n C-l send-keys C-l \; send-keys -R \; clear-history

6

स्क्रीन को फिर से शुरू करने के लिए कंसोल एप्लिकेशन में Ctrl-L का उपयोग किया जाता है। मैंने पाया कि जब send-keys -Rयह बाध्य होता है तो तीर कुंजियाँ कुछ अनुप्रयोगों (जैसे vim, mc) में सही ढंग से कार्य नहीं करती हैं।

कंसोल अनुप्रयोगों में redraw कार्यक्षमता को बनाए रखने के लिए, मैंने उपयोग किया:

bind-key -n C-l if-shell -F '#{alternate_on}' 'send-keys C-l' 'send-keys -R C-l; clear-history'

इसके लिए tmux विकल्प alternate-screenका होना आवश्यक है (जो कि यह डिफ़ॉल्ट रूप से है)।


3

मैंने ऊपर दिए गए अन्य स्रोतों में से कुछ का उपयोग किया है:

bind k send-keys C-u \; send-keys C-k \; send-keys " clear && tmux clear-history" \; send-keys "Enter" \; run-shell "sleep .3s" \; send-keys "Up" \; send-keys C-u 

"स्पष्ट और& tmux स्पष्ट-इतिहास" में अग्रणी स्थान कमांड को इतिहास फ़ाइल में लिखे जाने से रोकता है (बशर्ते आपके पास अग्रणी स्थानों के इलाज के लिए अपना शेल सेटअप हो; Google "hist ignore space" + आपके शेल का नाम अधिक के लिए; जानकारी)। मुझे यह कमांड अपने इतिहास में नहीं दिखाना है क्योंकि टर्मिनल में ctrl-k के साथ यह अधिक इनलाइन है।

पहला सेंड-कीज़ Cu और सेंड-कीज़ Ck, जो भी प्रॉम्प्ट पर वर्तमान में टाइप किया गया है, उसे साफ़ कर देगा कि यह सुनिश्चित करने के लिए कि "clear && tmux clear-history" सफल है (जैसे, अगर आपने प्रॉम्प्ट पर "ABCDEFG" टाइप किया है) डी और ई के बीच आपका कर्सर, यह सुनिश्चित करता है कि "ABCD स्पष्ट और& tmux clear-historyEFG" को शेल में नहीं भेजा जाता है, जो विफल हो जाएगा)।

सेंड-की "अप" और लास्ट सें की-कीज़ आपके शेल आंतरिक इतिहास के अंतिम आइटम्स को हटा देती है। शेल के आंतरिक इतिहास के ऊपर उल्लिखित अनुगामी स्थान के साथ भी "स्पष्ट ..." रेखा शामिल होगी। इसे भेजने और Ctrl-u को इससे छुटकारा मिल जाता है।

अंत में, iTerm में मैंने ctrl-k को मैप करने के लिए ctrl-k को सेट किया है (मेरे पास मेरा tmux उपसर्ग है ctrl-a) के लिए सेट है, इसलिए मैं ctrl-k टाइप कर सकता हूं जो कि मेरे हाथ इतने सालों से करना चाहते हैं इसलिए। मैं ऐसा करता हूं, iTerm> वरीयताएँ> प्रोफ़ाइल> कुंजी पर जाकर और हेक्स कोड "0x01 0x6B" भेजने के लिए एक शॉर्टकट जोड़कर। यहाँ एक बढ़िया लेख है जो tmux और iTerm के साथ हेक्स कोड का उपयोग करने के बारे में अधिक जानकारी देता है: http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/

यह बहुत ज्यादा मुझे tmux के साथ ctrl-k देता है। केवल एक चीज जो अभी भी मुझे पसंद करती है, वह यह है कि tmux के बिना असली ctrl-k की समस्या नहीं है यदि आपके पास वर्तमान में प्रॉम्प्ट पर कुछ टाइप किया गया है और स्क्रीन को क्लीयर करते समय आपने जो टाइप किया है उसे संरक्षित करेगा। जैसा कि उल्लेख किया गया है, इस दृष्टिकोण को स्पष्ट करने की आवश्यकता है कि "स्पष्ट ..." टाइप किया गया कमांड विफल नहीं होता है। लेकिन यह बहुत करीब है!


2

क्यों नहीं? bind -n C-l send-keys C-l


मैं यह भी जानना चाहूंगा, अगर इसकी कोई सिफारिश नहीं है।
गैस्टन सांचेज

2
सबसे पहले, यह आवश्यक नहीं है: -n C-lमूल रूप से 'यह पकड़ लो' कहते हैं, और फिर आप तुरंत उसी चीज को पार कर रहे हैं। (यानी यह एक नो-ऑप है।) ... दूसरा, आपका इरादा बंद है, क्योंकि स्क्रीन को⌃L साफ़ करता है , स्क्रॉल को वापस नहीं: यदि आप हिट करते हैं ⌃B [और फिर स्क्रॉल करते हैं, तो आप देखेंगे कि सभी स्क्रॉलबैक अभी भी रिकॉर्ड किया गया है; इस प्रश्न का लक्ष्य स्पष्ट है कि (tmux का) स्क्रॉलबैक, दृश्यमान टर्मिनल नहीं।
ELLIOTTCABLE

2

काफी शोध और समय बिताने के बाद। मैंने zsh और terminal.app पर मेरे लिए सबसे अच्छा तरीका ढूंढा है

मैं prefix-cस्क्रीन prefix-Cको साफ़ करने और इतिहास और स्क्रॉल बफर को साफ़ करने और ऊपर कोई रेखा नहीं छोड़ने के लिए उपयोग कर रहा हूँ क्योंकि मुझे यह कष्टप्रद लगता है।

विम के बिना

# clear screen
bind c send-keys 'C-l'
# clear screen and history
bind C send-keys -R \; send-keys C-l \; clear-history \; send-keys

विम के साथ

# check if the pane is running vim
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"

# clear screen
bind c if-shell "$is_vim" "send-keys c" "send-keys 'C-l'"
# clear screen and history
bind C send-keys -R \; send-keys C-l \; clear-history \; send-keys

2

व्यक्तिगत tmux पैन को साफ़ करने के लिए एक त्वरित सुधार के लिए आप एक उपनाम सेट कर सकते हैं ...

# Tmux Clear pane
alias tc='clear; tmux clear-history; clear'

1

इसलिए, मैं थोड़ी देर के लिए ऊपर से प्लू के दृष्टिकोण का उपयोग कर रहा हूं , लेकिन मैं इसकी सीमाओं से तंग आ गया हूं (मूल रूप से, इससे गुजरना व्यर्थ है जब तक कि इसे समझने वाले किसी कार्यक्रम के लिए पाइप न किया जाए।)⌃L

इसलिए मैंने इस धागे के विभिन्न उत्तरों में विभिन्न दृष्टिकोणों में सुधार किया है; हालांकि जटिल, यह दृष्टिकोण दोनों गोले और अन्य कमांड के साथ काम करता है :

# ⌃K: Clears the current pane (from <https://stackoverflow.com/a/34162098>)
bind-key -n C-k \
   if-shell "test \"$(printf '#{pane_current_command}' | tail -c 2)\" = sh" \
      "send-keys C-l ; run-shell 'sleep .3s' ; clear-history" \
      "split-window -vp 100 ; clear-history -t ! ; kill-pane"

इसके साथ tail -f /private/var/log/system.logया कुछ और कोशिश करो !


चेतावनियां:

वहाँ एक महत्वपूर्ण नोट यहाँ है: इस अदृश्य है आकार बदलने फलक को मंजूरी दे दी जा रही है, अगर यह एक खोल नहीं है। यह एससी के लिए सुनने वाले कुछ कमांड-लाइन अनुप्रयोगों में व्यवहार के आकार को ट्रिगर कर सकता है SIGWINCH; लेकिन मेरा तर्क यह है कि यह एक बड़ी समस्या नहीं है, क्योंकि वे कार्यक्रम हैं जिनकी संभावना है कि आप वैसे भी 'स्पष्ट' होने की कोशिश नहीं करेंगे ।

इसके अलावा, शेल-कोटिंग स्थिति पहले से ही एक गड़बड़ है, और एम्बेड करते समय आसानी से एक से अधिक बन सकती है #{pane_current_command}, इसलिए सावधान रहें, आपको अपनी default-commandसेटिंग के आधार पर इसे संशोधित करना पड़ सकता है ।

वही उस कमांड मिलान के अंत के मेरे परीक्षण पर लागू होता है "sh"; यदि आपके पास default-commandकुछ ऐसा है /bin/bash --loginया कुछ जटिल शामिल है exec, तो वास्तविक आदेश समाप्त नहीं हो सकता है "sh"; ⌃B :निष्पादित करने के लिए उपयोग करें display-message '#{pane_current_command}'यदि आप यह देखना चाहते हैं कि किसके खिलाफ परीक्षण किया जा रहा है।

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