Vim से मूल tmux सत्र में कमांड भेजना


5

मैं tmux में विम और लिंक्स के साथ एक विभाजित विंडो सेटअप है। मैं एक स्क्रिप्ट बनाने की कोशिश कर रहा हूं, ताकि मैं एक कस्टम कमांड भेज सकूं जो कि जिस स्क्रिप्ट पर काम कर रहा है, उसे सहेजेगा, लिंक्स पेन पर फोकस करें, लिंक्स पेज को रिफ्रेश करें, और फिर विम पेन पर वापस जाएं।

क्या कोई मौजूदा स्क्रिप्ट है जो ऐसा करती है? यदि नहीं, तो इस लिपि के निर्माण के लिए सबसे अच्छा तरीका क्या होगा?

जवाबों:


11

आप शायद एक विम का उपयोग कर सकते हैं :! चलाने की आज्ञा tmux send-keys एक नियंत्रण-आर भेजने के लिए अपने अन्य फलक के लिए। जबसे send-keys किसी भी फलक (न केवल सक्रिय एक) के लिए कीस्ट्रोक्स भेज सकते हैं, आपको सक्रिय पैन को आगे और पीछे स्विच करने की भी आवश्यकता नहीं है।

यहाँ यह एक विम मैपिंग है (आप इसे अपने में डाल सकते हैं .vimrc या बस में पेस्ट करें : इसे आजमाने के लिए तत्पर):

:map <Leader>rl :w<Bar>execute 'silent !tmux send-keys -t bottom C-r'<Bar>redraw!<C-M>

यह मैप करता है \rl मुख्य अनुक्रम ( <Leader> करने के लिए चूक \, लेकिन इसे अनुकूलित किया जा सकता है), विम आदेशों के निम्नलिखित अनुक्रम (द्वारा अलग किया गया) के लिए <Bar>; देख :help map_bar ):

  1. इसकी फाइल पर करंट बफर लिखें।
  2. चलाएं tmux नियंत्रण-आर को नीचे भेजने के लिए कमांड फलक।
    हम प्रयोग करते हैं execute यहाँ ताकि अगले Vim कमांड ( redraw ) के भाग के रूप में नहीं लिया जाता है :! शेल कमांड।
    हम उपयोग करते हैं silent "प्रेस जारी रखने के लिए एंटर" से बचने के लिए उपसर्ग कमांड प्रॉम्प्ट।
    आप छोड़ सकते हैं slient यदि आप संकेत चाहते हैं या आउटपुट देखना चाहते हैं :! कमांड (जैसे) tmux कमांड काम नहीं कर रहा है, और आप यह देखना चाहते हैं कि क्या यह एक त्रुटि संदेश दे रहा है)।
  3. स्क्रीन redraw।
    यह आमतौर पर "प्रेस एंटर" प्रॉम्प्ट के बाद होता है, लेकिन हम इसे दबा रहे हैं silent

मेरे पास नहीं है बनबिलाव हाथ में, लेकिन कंट्रोल-आर को "lynx reload" (यानी) के लिए मेरी खोज के आधार पर रीलोड कुंजी लगती है। "फ़ाइलों को पुनः लोड करना और प्रदर्शन को ताज़ा करना" उपयोगकर्ता गाइड के)।

के अतिरिक्त bottom, लक्ष्य फलक निर्दिष्ट करने के अन्य तरीके हैं (में "लक्ष्य-फलक" खोजें) tmux आदमी पेज ):

  • .+1, .-1: इस विंडो में अगला, पिछला फलक
  • top, bottom, left, right, और संयोजन top / bottom साथ में left / right
    (अर्थात। bottom-left )
  • %42 ( tmux 1.5+): ए % लक्ष्य फलक के TMUX_PANE पर्यावरण चर से -प्रभात पृष्ठ संख्या

    यदि आपका लिंक्स फलक हमेशा समान नहीं है, तो यह अंतिम रूप उपयोगी हो सकता है tmux खिड़की विम के अपने उदाहरण के रूप में। लिंक्स लॉन्च करने से पहले, TMUX_PANE का मान एक अस्थायी फ़ाइल में सहेजें, फिर लक्ष्य-फलक तर्क बनाने के लिए फ़ाइल पढ़ें

    # before running Lynx (anytime really, but "before" is usually scriptable)
    echo "$TMUX_PANE" > /tmp/my-lynx-pane
    
    # in the Vim :! command in the mapping:
    tmux send-keys -t "$(cat /tmp/my-lynx-pane)" C-r
    

@ क्रिस-जॉनसन, धन्यवाद .. यह बहुत अच्छा काम करता है। क्या आप उपरोक्त कमांड में Cntrl-r और Cntrl-M के बीच अंतर बता पाएंगे? क्या Cntrl-r एक शेल में "एंटर" का प्रतिनिधित्व करता है, जबकि Cntrl-M एक्सोडोड में "एंटर" दबाने के समान है? क्या वे दोनों "ई" "एन" "टी" "ई" "आर" के समतुल्य हैं, प्रत्येक अक्षर एक्समोड या विम्के में वर्तनी है?
alpha_989

2

आपको tslime.vim प्लगइन से शुरू करना चाहिए, जो मैन्युअल रूप से चयनित tmux सत्र के साथ इंटरैक्ट करता है और इसे एक बफर भेजता है। आप लगभग एक समान प्लगइन लिख रहे होंगे; हालाँकि, एक बफ़र भेजने के बजाय, आप कमांड्स जारी करेंगे (मैन 1 tmux का संदर्भ लें)।

tslime.vim @ vimscripts

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