शिफ्ट + तीर और ctrl + तीर कैसे प्राप्त करें Vm में tmux?


44

यह सब OS X पर iTerm2 में है।

मैं करने के लिए इस्तेमाल किया

export TERM='xterm-256color'

मेरे में .bashrc। इसका मतलब था कि tmux में विम ने 256 रंगों का उपयोग किया था।

और एक बार मैंने जोड़ा

set -g xterm-keys on

तब संशोधक के साथ कीबोर्ड शॉर्टकट ने विम में ठीक काम किया। अर्थात्: shift+left/rightमैंने विम टैब को स्विच करने के लिए मैप किया था, ctrl+up/downजिसे मैंने ("बबल") लाइनों को स्थानांतरित करने के लिए मैप किया था, और shift+left/rightजो कमांड-लाइन मोड में शब्द से कूदने के लिए बॉक्स से बाहर काम करता था (जैसे कुछ टाइप करते समय :e foo bar baz)।

हालाँकि, इस सेटअप में यह समस्या थी कि विम बैक कलर केवल टेक्स्ट के पीछे दिखाई देता है, जैसा कि यहाँ बताया गया है

तो मैंने निकाल दिया

export TERM='xterm-256color'

मेरे से .bashrcऔर इसके बजाय मेरे में डाल .tmux.conf:

set -g default-terminal "screen-256color"

इससे विम बैकग्राउंड का रंग निश्चित हो गया, लेकिन उन्होंने कीबोर्ड शॉर्टकट को तोड़ दिया - वे इसके बजाय अप्रत्याशित चीजें करते हैं (कर्सर को हटाएं, टेक्स्ट हटाएं)।

ctrl+vकुंजी संयोजनों (जैसा कि यहां वर्णित है ) से शब्दशः आउटपुट डालने का उपयोग करके , मैं इसके आसपास काम करने में सक्षम था:

map [1;5A <C-Up>
map [1;5B <C-Down>
map [1;2D <S-Left>
map [1;2C <S-Right>
cmap [1;2D <S-Left>
cmap [1;2C <S-Right>

यह शॉर्टकट काम करता है, लेकिन यह सही समाधान की तरह महसूस नहीं करता है। क्या कोई मुझे बता सकता है कि यहाँ क्या हो रहा है और इसे कैसे ठीक किया जाए?

जवाबों:


68

आपको tmux विंडो विकल्प सेट करने की आवश्यकता है xterm-keysताकि tmux अपने टर्मिनलों के माध्यम से इन कुंजियों को पास करेगा। आप शायद इसे अपने में रखना चाहते हैं ~/.tmux.conf:

set-window-option -g xterm-keys on

विम आमतौर पर स्वचालित रूप से इन कुंजियों की हैंडलिंग को तब सेट करेगा जब TERM xterm-something है, लेकिन TERM के बाद से यह इसे छोड़ देता है screen-256color। आप इन कुंजियों को मैन्युअल रूप से ~/.vimrcइस तरह से कॉन्फ़िगर कर सकते हैं :

if &term =~ '^screen'
    " tmux will send xterm-style keys when its xterm-keys option is on
    execute "set <xUp>=\e[1;*A"
    execute "set <xDown>=\e[1;*B"
    execute "set <xRight>=\e[1;*C"
    execute "set <xLeft>=\e[1;*D"
endif

कम से कम इस तरह से आपको सभी विभिन्न संयोजनों को मैप करने की आवश्यकता नहीं है।


धन्यवाद! जो मेरे पास था उससे बेहतर लगता है, और मैं स्पष्टीकरण की सराहना करता हूं। एक चीज़ जो मेरे द्वारा तय की गई थी, लेकिन आपकी पंक्तियों द्वारा नहीं तय की गई थी, यह था कि ऊपर / नीचे तीर कमान-टी प्लगइन में काम नहीं करते थे जैसा कि यहाँ वर्णित है: superuser.com/questions/237751/… मैं सिर्फ map <Esc>[B <Down>एक से जोड़ा गया जवाब के। लगता है कि वहाँ प्लगइन द्वारा बनाई गई कुछ बुरी धारणाएं हैं।
हेनरिक एन

बस स्पष्ट होने के लिए, आपके समाधान map <Esc>[B <Down>से उस दूसरे धागे का मतलब है कि सब कुछ अब ठीक काम करता है।
हेनरिक एन

@ हेनरिक क्या आप स्पष्ट कर सकते हैं कि क्या map <Esc>[B <Down>करता है? मैं इसे अपने .vimrc फ़ाइल में जोड़कर कोई अंतर नहीं देखता।
फ्रांसेस्को बोकारो

@Francesco Boccardo: क्या आप मेरी पिछली टिप्पणी में लिंक का पालन करें, और फिर वहाँ से फिर से लिंक का पालन करें, तो आप को पाने के superuser.com/a/215181 जो विस्तार कष्टदायी में :) यह समझाने के लिए लगता है
हेनरिक एन

@ हेनरिक एन थैंक्स। तो यह शायद एक OSX संबंधित मुद्दा है, या शायद यह इन 7 वर्षों में हल हो गया है, क्योंकि कमांड (नियंत्रण?) + R मेरे लिए tmux में vim में तीर कुंजी को गड़बड़ नहीं करता है (मैं लिनक्स पर हूं)।
फ्रांसेस्को बोकारो

8

जैसा कि यहां बताया गया है , टर्मिनल विकल्प ( वीम में चलाएं और फिर टर्मिनल के डिस्प्ले को रिफ्रेश करने के लिए + दबाकर ) बैकग्राउंड कलर इरेज (बीसीई) को अक्षम करें ताकि कलर स्कीम ठीक से काम करें जब विम का उपयोग tmux और GNU स्क्रीन के अंदर किया जाता है।t_ut:set t_ut=ControlL

इस तरह, आप उचित TERMमान का xterm-256colorपता लगाने के लिए अपना मूल्य रख सकते हैं, जबकि उचित VIM रंग योजना भी प्रदान कर रहे हैं! :-)


1
सुंदर! महान जासूसी का काम।
हेनरिक एन

2
यह वही है जो मैंने बिल्कुल बदल दिया है: github.com/henrik/dotfiles/commit/… रंग और संशोधक कुंजियाँ tmux के बाहर और अंदर दोनों में अच्छी तरह से काम करती हैं।
हेनरिक एन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.