tmux स्टेटस-बार एक बाइनरी फ़ाइल को कैट करने के बाद दूषित हो गया, कैसे रीसेट करें?


94

मैं गलती से अपने tmux टर्मिनल को catबाइनरी फ़ाइल के बाद स्क्रू कर देता हूं । अब मेरे साथ tmuxखिलवाड़ हुआ है। पता लगाना और फिर से जोड़ना मदद नहीं करता है, न ही एक redraw (Cb r)। चल रहा है resetकेवल सक्रिय फलक, नहीं बाकी redraws। ssty saneया तो अंदर चल रहा है या बाहर tmuxमदद नहीं करता है।

tmux ने गड़बड़ कर दी

प्रत्येक फलक के भीतर, मेरे पास सामान्य प्रतिक्रिया है जो मैं टाइप करता हूं ( resetटर्मिनल के तुरंत बाद कॉल करने पर यह गड़बड़ हो गई है), लेकिन मैं स्थिति-बार को ठीक नहीं कर सकता।

में gnome-terminal, स्थिति बार के लिए हर अद्यतन (ऊपर स्क्रीनशॉट देखें) विकसित करने के लिए स्थिति-बार होता है। उदाहरण के लिए, यह तब होता है जब मैं एक नया एप्लिकेशन चलाता हूं, जब मैं पैन स्विच करता हूं, या जब मैं एक फलक का आकार बदलता हूं। एक लालच के लिए मजबूर करना (द्वारा C-b r, चलकर resetया सूक्ति-टर्मिनल मेनू के माध्यम से) स्थिति-पट्टी को एक पंक्ति में वापस सिकोड़ देता है, लेकिन यह दूषित रहता है।

में xterm, स्टेटस-बार एक पंक्ति में रहता है, लेकिन यह चित्र के रूप में दूषित रहता है।

मैं tmux 1.5 का उपयोग कर रहा हूं।

  • मैं अपनी tmuxमाँ को कैसे ठीक करूँ?

2008 की यह बग रिपोर्ट उसी मुद्दे का वर्णन करती प्रतीत होती है, लेकिन इसे निश्चित रूप से चिह्नित किया गया था। मुझे नहीं पता कि यह किस संस्करण में तय किया गया था, लेकिन tmux 1.5 को 2008 से एक फिक्स शामिल करना चाहिए।


बस यह समस्या थी, और "स्पष्ट" मेरे लिए काम किया।
user149818

1
मामले में किसी को एक ही समस्या में चलाता है, उपरोक्त सभी करने के बाद, मेरी tmux स्थिति पट्टी अभी भी गड़बड़ थी। विंडो ऑप्शन स्टेटस-राइट सेट करके इसे रिपेयर किया।

2
उपरोक्त सुझाव ने इसे मेरे लिए भी तय कर दिया। ऐसा करने के लिए आदेश था: Control+ b+ :और फिर set -g status-right "#H"होस्टनाम में स्थिति-सही सेट करने के लिए।
मयंक

जवाबों:


85

विंडो 4 का नाम बदलने का प्रयास करें

  • विंडो 4: Control+ पर स्विच करें b 4
  • विंडो का नाम बदलें: Control+ b , Control+ umyNewname

(बीच में एक अल्पविराम)

या: Control+b :rename-window myNewname


1
विंडो का नाम बदलना एक आकर्षण की तरह काम करता है
प्रात:

4
नया टाइप करने से पहले आपको नाम साफ़ करना होगा। सबसे आसान तरीका है ctrl+u, इसलिए पूर्ण अनुक्रम हैctrl+b , ctrl+u newname
z0r

1
मीठा - यह byobuभी ( f8, <newname>) के लिए काम करता है
अलिअम

क्यों Control-uजरूरी है? Control-,पहले से ही सही नाम बदल रहा है? हालांकि मैं यह पुष्टि कर सकता हूं कि मेरे मामले में इसकी आवश्यकता थी, क्या यह किसी प्रकार का एक रीसेट चरित्र है?
hbogert

1
नियंत्रण-यू लाइन को साफ करता है। यदि आप टर्मिनल में अपने पासवर्ड को फेटफिंगर करते हैं और इसे जानते हैं, तो आप बैकस्पेस को 20 बार
Rqomey

55

गंदगी को साफ करने के लिए आपको दो कमांड क्रम की आवश्यकता है:

पहले इसे गार्बल्ड विंडो में चलाएं (जब आप इसमें हों तब भी यह काम करता है ssh):

stty sane; printf '\033k%s\033\\\033]2;%s\007' "`basename "$SHELL"`" "`uname -n`"; tput reset; tmux refresh

फिर tmuxइसे कंप्यूटर पर चलाएं जो चलता है (यह अंदर और बाहर काम करता है tmux):

निम्न आदेश सभी tmuxउदाहरणों को प्रभावित करता है , जो वर्तमान विंडो से अधिक की बाईं स्थिति को बदल सकता है। यदि आपको उस सुविधा की आवश्यकता नहीं है, तो उसे छोड़ दें।

tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done

विस्तार से बताया

यह अन्य उत्तरों और टिप्पणियों में पाए गए सभी बिट्स को संबोधित करने के लिए इकट्ठा किया गया था। वर्तमान में लगता है कि केवल दूसरी कमान के साथ एक मामूली सा बचा है। (नीचे "लापता बिट" में देखें)।

यह कैसे काम करता समझने के लिए, हमें पहले की स्थिति की लाइन को मार देना tmuxऔर tty। बाद में हम इसे फिर से सही करते हैं, एक विधि का उपयोग करके जो हमेशा उपलब्ध होनी चाहिए (कमांड के विपरीत reset)।

कैसे एक tmuxटर्मिनल (मान लिया UTF-8) बेकार है

stty -echo; printf '\016\033k%2000s\\\033\033]2;\355\007' $'\302\217'

चेतावनी: कमान के ऊपर चलने के बाद, खोल अंधा और बहरा दिखता है और केवल कुछ अज्ञात विदेशी भाषा में बकवास करने के लिए लगता है। इसे कैसे ठीक करें, नीचे देखें।

व्याख्या की:

  • stty -echo टर्मिनल प्रकार की प्रतिक्रिया को मारता है

  • printf '\016'एक करता है SO, तो आप वैकल्पिक चरित्र सेट पर हैं

  • printf '\033]2;%s\007' 'right status text'सही स्थिति सेट करता है, इस मामले में $'\355', जो एक प्रस्तुति बग को उजागर करता है

  • printf '\033k%2000s\033\\' $'\302\217' विंडो शीर्षक नाम सेट करता है

यह वह कॉम्बिनेशन हो सकता है जिसे आप टर्मिनल पर देख सकते हैं कुछ इंटरेक्टिव कमांड क्रैश होने और वापस शेल में गिरने के बाद। ( /bin/catआप stty -echoIMHO को उत्तेजित नहीं कर सकते , लेकिन इंटरेक्टिव कमांड जैसे कि vimआमतौर पर इसे सेट करते हैं।)

अब इस गंदगी को साफ करें

stty sane; printf '\033k%s\033\\\033]2;%s\007' "$(basename "$SHELL")" "$(uname -n)"; tput reset; tmux refresh

नोट: यदि आप कॉपी और पेस्ट का उपयोग करते हैं (आपको पेस्ट Shiftकरते समय संभवतः नीचे रखने की आवश्यकता होती है ), तो आप अपने पेस्ट को नहीं देख सकते हैं यदि आपने उपरोक्त कमांड का उपयोग अपने साथ गड़बड़ करने के लिए किया है tty। इसलिए, इसको पेस्ट करने के बाद बस एंटर करें।

व्याख्या की:

  • stty sane टर्मिनल मापदंडों को "समझदार" सेट करता है, ताकि आप टाइप करते समय अपनी गूंज वापस पा सकें

  • printf '\033k%s\033\\' "$(basename "$SHELL")"खिड़की का शीर्षक वापस सामान्य पर सेट करता है। आप tmux rename-window "$(basename "$SHELL")"वैकल्पिक रूप से उपयोग कर सकते हैं , हालांकि tmux rename-windowयह सीमित है tmuxजहां भागने का क्रम हमेशा काम करता है।

  • printf '\033]2;%s\007' "$(uname -n)"डिफ़ॉल्ट के रूप में दिखाए जाने के लिए स्थिति-अधिकार को रीसेट करता है। (ध्यान दें कि आपको उपयोग नहीं करना चाहिए tmux set status-right "something", क्योंकि यह केवल आउटपुट करता है pane titleजो भ्रष्ट हो गया है, इसलिए status-rightबस कुछ प्रस्तुति बग को उजागर करता है। यह भी ध्यान दें, कि मुझे tmuxसीधे फलक शीर्षक सेट करने के लिए कोई आदेश नहीं मिला ।)

  • tput reset टर्मिनल को रीसेट करता है, बस अगर इसमें गड़बड़ की गई है

  • tmux refresh अन्य मलबे से छुटकारा पाने के लिए स्क्रीन को ताज़ा करता है जो शायद दिखाई दे

गुम सा

printf '\033k%s\033\\' "$(basename "$SHELL")"के मानक क्षमता खो देता है tmuxबाईं स्थिति क्षेत्र में वर्तमान आदेश पेश करने के लिए। printf '\033k%s\033\\' "something"निष्पादित होने के बाद यह क्षमता खो गई है और मुझे एक अच्छा तरीका नहीं मिला, फिर भी, इसे वापस कैसे लाया जाए जैसा कि पहले था।

लेकिन, जैसा कि नीचे टिप्पणी में कहा गया है, आप tmuxनिम्नलिखित tmuxसेटिंग के साथ प्रतिस्थापन के रूप में एक समान सुविधा को सक्रिय कर सकते हैं :

set-window-option automatic-rename on
  • या तो tmuxकमांड लाइन में ऐसा करें , जो "एस्केप" :(जहां "एस्केप" आपकी tmuxकमांड कुंजी है) के साथ वर्तमान विंडो में पहुंचा जा सकता है और फिर कमांड दर्ज करें।

  • या excute tmux set-window-option automatic-rename onअपने वर्तमान टर्मिनल में, लेकिन इस मामले तुम सही खोल स्तर पर सीधे नहीं हैं में विफल रहता है, उदाहरण के लिए यह भीतर काम नहीं करता sudoया ssh

  • या वर्तमान tmuxसत्र में एक और विंडो खोलें और निम्नलिखित कमांड निष्पादित करें:

    for a in `tmux list-windows | sed 's/:.*//'; do tmux set-window-option -t "$a" automatic-rename on; done`
  • या जो tmuxकमांड चल रहा है और इसे निष्पादित करने वाले कंप्यूटर पर एक और शेल खोलें (यह tmux के बाहर है):

    tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done

पुनश्च: सभी को धन्यवाद जिन्होंने इस समाधान को इकट्ठा करने में मदद की।


2
कृपया uname -nइसके बजाय ध्यान दें hostname -s। संदर्भ के लिहाज hostnameसे खतरनाक है root, क्योंकि आप अपने होस्ट का नाम बदलकर -sबड़े लिनक्स / यूनिक्स पर रख सकते हैं जहां hostnameविकल्प नहीं हैं।
टीनो

फलक शीर्षक रीसेट न करना मुझे भी दुखी करता है; इसलिए मैं यहां पहले स्थान पर हूं। पृष्ठ पर केवल एक होने के लिए धन्यवाद, जो कम से कम उस कमी को स्वीकार करता है!
22

2
खिड़की के शीर्षक
ईबी को

stty saneजब मेरे टर्मिनल को खराब कर दिया गया था, तो उस हिस्से ने मेरी मदद की और कुछ भी नहीं दिखाया। धन्यवाद!
जॉनी

यदि आप "लापता बिट" चाहते हैं, अर्थात वर्तमान में चल रहे कमांड को बाएं स्थिति क्षेत्र में प्रदर्शित किया गया है, तो आप tmux कमांड का उपयोग कर सकते हैं set-window-option automatic-rename
डेविड फोस्टरस्टर

26

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


4
एक विंडो का नाम बदलने के लिए डिफ़ॉल्ट है^b - ,
Rob

8
अगर @ रोब की टिप्पणी में कीबोर्ड शॉर्टकट आपको भ्रमित करता है, तो Ctrl- bतब ,
डौग पॉल

ध्यान दें कि जब आप एक विंडो का नाम बदलते हैं, तो फ़ील्ड वर्तमान विंडो नाम (और आपका कर्सर उस नाम के अंत में है) से पहले से आबाद है। चूँकि मेरा खिड़की का नाम कचरे का एक लंबा क्रम था, इसलिए मुझे Backspaceवर्तमान नाम को हटाने के लिए एक मिनट के लिए नीचे पकड़ना पड़ा । मेरे लिए, दृश्य प्रतिक्रिया ने अंततः यह स्पष्ट कर दिया कि पूरे पुराने नाम को मिटा दिया गया था।
डग पॉल

आप Ctrl-b :नाम-विंडो का उपयोग भी कर सकते हैं <नाम यहाँ जाता है>; यह उस कमांड के लिए कीबोर्ड शॉर्टकट के बजाय tmux कमांड सिस्टम का उपयोग करता है।
अब्बाफी


5
tmux set-option -g status off && tmux set-option -g status on 

यह मेरे लिए तय किया जब खिड़की के नाम के अलावा कुछ और दूषित था और मुझे यह पता लगाने के लिए परेशान नहीं किया जा सकता था कि यह क्या था।


2

tmuxकेवल समस्या का हिस्सा बन सकता है। आपको stty saneकमांड लाइन पर आह्वान करना पड़ सकता है । यह इन-कर्नेल TTY ड्राइवरों को कुछ डिफ़ॉल्ट मानों के सेट पर रीसेट करता है जो आमतौर पर आपको आगे बढ़ने देते हैं। अगर TTY ड्राइवरों को पर्याप्त गड़बड़ किया जाता है, तो आपको stty sane"अंधा" टाइप करना पड़ सकता है , अर्थात ऑन-स्क्रीन प्रतिक्रिया के बिना।


stty saneसमस्या को हल नहीं करता है। मेरे पास ऑन-स्क्रीन प्रतिक्रिया है, प्रत्येक tmuxपैन के भीतर मैं टाइप कर सकता हूं और सामान्य रूप से फीडबैक हो सकता है, लेकिन जैसे ही tmux को कुछ आकर्षित करना होगा (जैसे कि नया एप्लिकेशन चलाना, पैन स्विच करना या आकार बदलना) स्थिति-बार पैन में स्थानांतरित हो जाती है ...
ग्रीट

2

अपनी कॉन्फ़िग फ़ाइल पुनः लोड करने का प्रयास करें?

Ctrlb, फिर: :source-file ~/.tmux.conf


अब तक का सबसे अच्छा समाधान।
डेव

-3

मेरे लिए समस्या को ठीक करने के लिए:

मैंने बस मुद्दा फलक और खिड़की को मार दिया, और एक नई खिड़की और फलक बनाया।

अंक फलक में, CTRL+ AXऔर CTRL+ AC


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