2012-04-29 20 views
6

क्या xev-जैसी मोड प्राप्त करने का कोई तरीका है जहां मैं कुंजी और कुंजी combos हिट कर सकता हूं और vim प्रिंट करेगा कि कौन सी चाबियाँ या वर्ण मुझे लगता है कि मैं दबा रहा हूं?मैं कैसे देख सकता हूं कि कौन सी चाबियाँ सोचती हैं कि मैं मार रहा हूं?

विशिष्ट संबंधित समस्या: मेरे पास महत्वपूर्ण बाइंडिंग हैं जो मैकवीम और जीवीआईएम में काम करती हैं लेकिन वे टर्मिनल-विम में काम नहीं करते हैं, जिसे मैं स्क्रीन पर एसएसएच पर लिनक्स पर उपयोग करता हूं। मैं इस निष्कर्ष पर आया हूं कि इसका कारण यह है कि विम सोचता है कि जिन कुंजी को मैं दबा रहा हूं वे मैकविम उनसे कैसे व्याख्या करते हैं उससे अलग हैं।

मेरी .vimrc में:

map <M-,> :split<CR> " Horizontal split 
map <M-.> :vsplit<CR> " Vertical split 
map <M-/> :close<CR> 

मेरे vim के :map (MacVim ही पता चलता):

¯    :close<CR><Space> 
®    :vsplit<CR> " Vertical split 
¬    :split<CR> " Horizontal split 

यह MacVim और जाँचने में काम करता है, लेकिन किसी भी टर्मिनल में काम नहीं करता आधारित विम। मैंने इसे कई टर्मिनल (ओएसएक्स टर्मिनल और टर्म 2, केडीई टर्मिनल, जीनोम टर्मिनल इत्यादि) में आजमाया है। मैंने इसे अन्य संशोधक और कुंजी combos के साथ भी देखा है। ऐसा लगता है जैसे विम कीस्ट्रोक को कैप्चर कर रहा है, लेकिन उदाहरण के लिए <M-,> के अलावा उन्हें कुछ और समझना है।

मुझे यह जानने का एक तरीका है कि मैं क्या सोच रहा हूं कि मैं क्या दबा रहा हूं ताकि मैं तदनुसार मैपिंग लिख सकूं।

उत्तर

6
  1. iडालने मोड में स्विच करने के लिए।
  2. <C-v>
  3. <key> या कॉम्बो।
  4. विम आपके द्वारा दबाए गए कुंजी/कॉम्बो के "कच्चे" मान को प्रिंट करता है।

यहाँ (उबंटू 11.04 पर ग्नोम टर्मिनल), i<C-v>, <Alt> द्वारा पीछा किया, द्वारा , प्रिंट कुछ है कि ^[, तरह लग रहा है "escape," जिसका अर्थ है पीछा किया टाइपिंग। Alt कुंजी (जो मुझे विश्वास है कि आप <Meta> के लिए उपयोग करना चाहते हैं) को न तो <Meta> और न ही <Alt> के रूप में पहचाना जाता है।

तत्काल निष्कर्ष यह है कि सीएलआई विम <M-> पसंद नहीं करता है (और कई टर्मिनल अनुकरणकर्ता इसके साथ बहुत अच्छी तरह से सौदा नहीं करते हैं)। कुछ टर्मिनल अनुकरणकर्ता आपको <Alt> कुंजी को Meta पर मैप करने की अनुमति देते हैं लेकिन यह एक पूर्ण क्रॉस-प्लेटफ़ॉर्म समाधान नहीं है (मैं विशेष वर्ण इनपुट करने के लिए मैक ओएस एक्स पर <Alt> का उपयोग करता हूं)।

इस मशीन पर,

nnoremap ^[, :split<CR> " ^[ is <C-v><Esc> 

मैं क्या लगता है कि आप चाहते हैं, हालांकि वास्तव में करता है।

यदि आप पूरी तरह से जीयूआई और सीएलआई में <M-> शॉर्टकट का उपयोग करना जारी रखना चाहते हैं तो आपको शॉर्टकट के दो अलग-अलग सेट बनाए रखने की आवश्यकता होगी। यदि आपके .vimrc में दर्जनों कस्टम मैपिंग हैं, तो यह जल्दी से प्रबंधित करने के लिए थोड़ा कठिन हो जाएगा।

इसलिए मुझे लगता है कि आप मैपिंग कि हर जगह काम की तरह उपयोग करना चाहिए:

:nnoremap <leader>, :split<CR> 
:nnoremap <leader>. :vsplit<CR> 
:nnoremap <leader>/ :close<CR> 

डिफ़ॉल्ट <leader> कुंजी \ है लेकिन मैं इसे , लिए निर्धारित किया है।

ध्यान दें कि आपको <leader>key का उपयोग करने की आवश्यकता नहीं है, बस ,,, ,. और ,/ काम करता है।

:help <leader> देखें।

+0

क्या इसका मतलब यह है कि ''^[, '' '' '': 'vplit '' '''' को 'सीएलआई विम में काम करने की अनुमति देनी चाहिए? मैं उस काम को या तो करने में सक्षम नहीं हूं। इसके अलावा, क्या आप यह कह रहे हैं कि सामान्य रूप से संशोधक कुंजी सीएलआई विम में अच्छी तरह से व्यवहार नहीं करती है? क्या मुझे इसके बजाय अलग-अलग कीस्ट्रोक रखना चाहिए? – shazow

+0

मेरा जवाब देखें, यह एक कट्टरपंथी '^ [' ('^' के बाद '[') नहीं है, यह एक एकल वर्ण है जो '^ [' जैसा दिखता है। आप इसे '' दबाकर प्राप्त करते हैं। – romainl

+0

मैंने अपने उत्तर को अधिक सटीकता के लिए संपादित किया है। संशोधक कुंजी को सीएलआई विम में काम करने की गारंटी नहीं है: बहुत सारे 'combos के पास पहले से कुछ अर्थ है और आप' 'और' 'का उपयोग नहीं कर सकते हैं। तो हाँ, मेरी सलाह है कि संशोधक कुंजी ** ** ** सीएलआई विम * और * जीयूआई विम में। मेरा ' 'मैपिंग हर जगह काम करता है और मुझे अपनी याद में मैपिंग के दो सेट रखने की ज़रूरत नहीं है। – romainl

संबंधित मुद्दे

 संबंधित मुद्दे