जवाबों:
यही सवाल काफी समय से मुझे कचोट रहा है। यहाँ सबसे अच्छा मैं आया हूँ। इसे अपने .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-कुंजी कॉम्बो है, लेकिन यह हर समय स्पष्ट-इतिहास में टाइप करने से बेहतर है।
bind k send-keys "clear"\; send-keys "Enter"
समाशोधन भाग के लिए कर रहा हूं , लेकिन अंतर्निहित का उपयोग करना ctrl+l
सरल है, और clear-history
स्क्रॉलबैक इतिहास से छुटकारा पाने के लिए एक अच्छा अतिरिक्त है।
जैसा कि @juanpaco ने सही कहा है, clear-history
स्क्रॉलबैक बफर को खाली करने की कमांड है।
मैं जोड़ूंगा कि मुझे यह भी स्पष्ट करना है कि एक ही कमांड में स्क्रीन पर क्या है। send-keys -R
स्क्रीन को रीसेट (क्लियर) जारी करना , इसलिए मैं अपने में निम्न का उपयोग करता हूं.tmux.conf
bind-key b send-keys -R \; clear-history
यह स्क्रीन और स्क्रॉलबैक बफर को साफ करता है।
send-keys
: "-R ध्वज टर्मिनल स्थिति को रीसेट करने का कारण बनता है।" आपको शायद अपडेट करने की जरूरत है।
bind -n C-l send-keys C-l \; clear-history
clear-history
कमांड में प्रवेश करने के लिए राज्य में आने के लिए , प्रेस करें Ctrl+B
, और फिर एक कॉलन ( :
) के साथ कमांड शुरू करें ।
send-keys -R C-l \; clear-history
।
यहाँ पर हर उत्तर नई कुंजी बाइंडिंग जोड़ने के बारे में बात करता है।
यदि आप इसे कभी-कभी करना चाहते हैं, तो आपको मानचित्रण की आवश्यकता नहीं है ...
उपसर्ग चूक <Ctrl-b>
बस <prefix>:
संबंधित फलक में टाइप करें clear-history
और फिर टाइप करें और एंटर दबाएं।
Tmux के बारे में ठंडी चीजों में से एक यह है कि आप बस किसी भी तरह की कमांड को चला सकते हैं ... या उन्हें किसी शेल / स्क्रिप्ट में चला सकते हैं ... या उनके tmux command
लिए एक कीबोर्ड शॉर्टकट बना सकते हैं।
cle
, और फिर <tab>
पहली बार के साथ स्वत: पूर्ण , फिर दूसरी बार <up arrow>
पिछली प्रविष्टि का उपयोग करने के लिए उपयोग करें। इस तरह यह काफी तेज है।
<Ctrl-b> the
c` कुंजी मारने के बाद टाइप करना शुरू करता हूं तो एक नई विंडो बनाई जाती है।
:
इसे दबाएं आपको एक इंटरैक्टिव संकेत देता है - यही वह जगह है जहां आप 'c' टाइप करेंगे
यदि आप CTRL-L
प्लस-क्लियर-हिस्ट्री को जोड़ना चाहते हैं , तो इसे अपने साथ जोड़ें ~/.tmux.conf
:
bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history
यह तब भी काम करता है जब आप उदाहरण के लिए MySQL शेल में हों।
tail -f some.log
, ठीक है? क्या इसके ctrl-Z
साथ गठबंधन करने का कोई तरीका है ? यह सही लग सकता है।
मैं 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
इतिहास से स्क्रीन के वर्तमान पाठ को साफ़ करने में विफल रहता है - स्पष्ट-इतिहास आदेश भेजने के लिए एक अलग थ्रेड में चलता है।
bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
अधिकांश की तुलना में सरल, मैंने अभी-अभी एक शेल स्क्रिप्ट बनाई है cls
, और जब भी मैं अपनी स्क्रीन और स्क्रोलबैक बफर को साफ़ करना चाहता हूं, तो इसे चलाएं।
यह सब यह है:
सीएलएस
clear;
tmux clear-history;
पाया यह टीएमयूएक्स 2.6 में सबसे अच्छा काम करता है, स्क्रीन को साफ़ करता है, स्क्रॉलबैक करता है, लेकिन इसके तुरंत बाद प्रदर्शित किया जाता है।
Ctrl-L का उपयोग करता है
bind-key -n C-l send-keys C-l \; send-keys -R \; clear-history
स्क्रीन को फिर से शुरू करने के लिए कंसोल एप्लिकेशन में 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
का होना आवश्यक है (जो कि यह डिफ़ॉल्ट रूप से है)।
मैंने ऊपर दिए गए अन्य स्रोतों में से कुछ का उपयोग किया है:
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 की समस्या नहीं है यदि आपके पास वर्तमान में प्रॉम्प्ट पर कुछ टाइप किया गया है और स्क्रीन को क्लीयर करते समय आपने जो टाइप किया है उसे संरक्षित करेगा। जैसा कि उल्लेख किया गया है, इस दृष्टिकोण को स्पष्ट करने की आवश्यकता है कि "स्पष्ट ..." टाइप किया गया कमांड विफल नहीं होता है। लेकिन यह बहुत करीब है!
क्यों नहीं? bind -n C-l send-keys C-l
-n C-l
मूल रूप से 'यह पकड़ लो' कहते हैं, और फिर आप तुरंत उसी चीज को पार कर रहे हैं। (यानी यह एक नो-ऑप है।) ... दूसरा, आपका इरादा बंद है, क्योंकि स्क्रीन को⌃L
साफ़ करता है , स्क्रॉल को वापस नहीं: यदि आप हिट करते हैं ⌃B [
और फिर स्क्रॉल करते हैं, तो आप देखेंगे कि सभी स्क्रॉलबैक अभी भी रिकॉर्ड किया गया है; इस प्रश्न का लक्ष्य स्पष्ट है कि (tmux का) स्क्रॉलबैक, दृश्यमान टर्मिनल नहीं।
काफी शोध और समय बिताने के बाद। मैंने 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
इसलिए, मैं थोड़ी देर के लिए ऊपर से प्लू के दृष्टिकोण का उपयोग कर रहा हूं , लेकिन मैं इसकी सीमाओं से तंग आ गया हूं (मूल रूप से, इससे गुजरना व्यर्थ है जब तक कि इसे समझने वाले किसी कार्यक्रम के लिए पाइप न किया जाए।)⌃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}'
यदि आप यह देखना चाहते हैं कि किसके खिलाफ परीक्षण किया जा रहा है।