क्या मैं Ctrl + अपर-केस लेटर को Ctrl + लोअर-केस लेटर से अलग कर सकता हूं?


16

मैं यह पता लगाने की कोशिश कर रहा हूं कि खिड़कियों को जल्दी से कैसे नेविगेट किया जाए, इसलिए मैं निम्नलिखित मानचित्र बनाना चाहूंगा:

:nmap <silent> <C-F> :wincmd f<CR>

समस्या यह है कि ^f(निचले-मामले f) मैपिंग को हटा दिया जाता है, जो पृष्ठ नीचे है। क्या केवल ^F(ऊपरी-मामले F) को हटाने और ^fजैसा था वैसा ही छोड़ने का कोई तरीका है ?

जवाबों:


22

मानचित्रण <C-F>( Ctrl+letter) हमेशा मानचित्रण रूप में ही है <C-f>( Ctrl+Shift+letter)। आप एक के बिना दूसरे का नक्शा नहीं बना सकते।

समस्या की जड़ यह है कि विम टर्मिनल से वर्ण पढ़ता है, जो दोनों के लिए ^F(ASCII कोड 0x06) भेजता है Ctrl+fऔर Ctrl+Shift+f; विम का यह जानने का कोई तरीका नहीं है कि आपने Shift कुंजी दबाया है या नहीं। यह पोस्ट टर्मिनलों और नियंत्रण पात्रों के बारे में कुछ और जानकारी प्रदान करता है

सिद्धांत रूप में, यह gVim के साथ किया जा सकता है, चूंकि अधिकांश (या सभी?) ग्राफिक वातावरण बहुत अधिक विस्तृत प्रमुख घटनाओं को भेजते हैं। लेकिन दुर्भाग्य से, जीवीएम एक टर्मिनल एमुलेटर की तरह बहुत काम करता है, <C-f>और <C-F>दोनों के बीच अंतर नहीं कर सकता है (यह शायद विम-जीवीएम संगतता के लिए एक डिजाइन निर्णय था)।


संभव समाधान:

  • जब आप दबाते हैं, तो आप Vim को एक अलग कोड भेजने के लिए अपने टर्मिनल एमुलेटर को कॉन्फ़िगर कर सकते हैं Ctrl+Shift+f। उदाहरण के लिए, xterm के लिए आप कर सकते हैं:

    XTerm*VT100.translations: #override \n\
        Ctrl ~Meta Shift <Key>f: string(0x1b) string("[24;6~")\n\
        Ctrl ~Meta Shift <Key>r: string(0x1b) string("[23;6~")
    

    इसके लिए <C-S-F12>और <C-S-F11>विम को कोड भेजेंगे , जिसे आप चुन सकते हैं:

    nnoremap <C-S-F12> :echo 'ctrl+F pressed!'<CR>
    nnoremap <C-S-F11> :echo 'ctrl+R pressed!'<CR>
    
  • ध्यान दें कि आप मैप कर सकते हैंAlt+Shift+letter , क्योंकि टर्मिनल उन लोगों के लिए एक अलग कोड भेजता है: <Esc>f( 0x1b0x66) या <Esc>F( 0x1b0x46)।

  • NeoVim, जहाँ तक मैं पा सकते हैं, इस तरह के रूप में कुछ मामलों को छोड़कर इस समस्या को ठीक नहीं किया गया है Ctrl+Shift+Enterऔर Ctrl+Shift+Tab, लेकिन यह संभव है कि भविष्य में यह सुविधा जोड़ दिया जाएगा है।

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