मैं vi में Ctrl-Shift-Key और Ctrl-Key में दो अलग-अलग कार्यों को कैसे बांध सकता हूं


5

मैं जैसे करने के लिए दो अलग-अलग कार्यों मैप करने के लिए कोशिश कर रहा हूँ CtrlShiftaऔर Ctrla:

map <C-S-a>    :echo "ctrl-shift-a received"<CR>
map <C-a>      :echo "ctrl-a received"<CR>

लेकिन जब मैं दोनों में से किसी एक को दबाता हूं, तो स्टेटस लाइन में आउटपुट "ctrl-a प्राप्त" होता है। जाहिर है, vi में पूंजीकृत नियंत्रण चरित्र और लोअरकेस एक के बीच अंतर नहीं दिखता है।

क्या इसे बदलने का कोई तरीका है?

मैं xterm (X.Org 6.8.99) में vi (v7.4) चला रहा हूं।

जवाबों:


5

यह एक टर्मिनल प्रतिबंध है, क्योंकि vi केकोड्स को समान रूप से देखता है। कोई इसे सम्मिलित मोड में जाकर सत्यापित कर सकता है i, फिर Ctrlvकिसी विशेष वर्ण के शाब्दिक इनपुट की अपेक्षा करने के लिए एक मोड में vi डाल सकता है और फिर उदा CtrlShifta। एक ^Aआउटपुट दिखाई देगा। अब अनुक्रम करना Ctrlv, Ctrlaऔर फिर से एक ^Aदिखाई देगा: दोनों इनपुट दृश्यों एक ही कीकोड vi ही देख रहे हैं में परिणाम।

टर्मिनलों के लिए जैसे xtermआप उसे बदल सकते हैं। के लिए gnome-terminal जो ध्यान नहीं देता एक्स संसाधनों सेटिंग्स मैं निम्न कार्य पूरे करने को पता नहीं है:

यह SO प्रश्न एक ही विषय को कवर करता है, और यह उदाहरण.Xresources फ़ाइल में कई कुंजियों को मैप करने के लिए उपयोग में दिखाता है । उदाहरण के लिए:

XTerm*vt100.translations: #override \
  Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u") \n\
  Ctrl ~Meta Shift <Key>b: string(0x1b) string("[66;5u") \n\ 
  Ctrl ~Meta Shift <Key>f: string(0x1b) string("[70;5u")  

अब हमारे पास Ctrlaबनाम CtrlShifta, Ctrlbबनाम CtrlShiftb, Ctrlfबनाम के लिए अलग-अलग महत्वपूर्ण अनुक्रम हैं CtrlShiftf

अब हम उन्हें अलग तरीके से मैप कर सकते हैं ~/.vimrc:

map <ESC>[65;5u   :echo "ctrl-shift-a received"<CR>
map <C-a>         :echo "ctrl-a received"<CR>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.