Ctrl + A और Ctrl + Shift + A अलग-अलग मैप कैसे करें?


92

एक टर्मिनल में, एक भेद नहीं कर सकते Ctrl+ Aऔर Ctrl+ Shift+ Aके रूप में वे दोनों फेंकना एक ही कुंजी कोड, तो मैं देख सकता हूँ क्यों विम यह नहीं कर सकते। लेकिन जाँचने, एक एक्स आवेदन किया जा रहा है, अंतर कर सकते हैं Ctrl+ Aऔर Ctrl+ Shift+ A। क्या उन दो चीजों को अलग-अलग तरीके से मैप करने का कोई तरीका है?

शुरुआत के लिए, मैं निम्नलिखित की तरह कुछ करना चाहूंगा: दृश्य मोड में Ctrl+ रखते हुए, गनोम टर्मिनल की तरह "क्लिपबोर्ड से पेस्ट" काम Vकरें।

:nmap <C-S-V> "+gP


3
@vivoconunxino उस लिंक को ctrl-a में शिफ्ट संशोधक जोड़ने का कोई उल्लेख नहीं है।
ग्रेव

जवाबों:


46

Gvim ऐसा नहीं करता है क्योंकि विम ऐसा नहीं कर सकता (सामान्य परिस्थितियों में)। क्षमा करें, लेकिन यह कैसा है।


तथापि...

कुछ टर्मिनलों (जैसे, xterm और iterm2) को कुंजी के किसी भी संयोजन के लिए एक मनमाना भागने अनुक्रम भेजने के लिए कॉन्फ़िगर किया जा सकता है।

उदाहरण के लिए, .Xresourcesxterm को भेजने के <Esc>[65;5uलिए निम्नलिखित जोड़ें CtrlShiftA। फिर आप विम में मैप कर सकते हैं <C-S-a>। (65, शिफ्ट-ए के लिए दशमलव यूनिकोड मान है और ctrl संशोधक के लिए 5 बिट है। इस मामले में यू "यूनिकोड" के लिए खड़ा है।)

! .Xresources
XTerm*vt100.translations: #override Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u")

iTerm और [u] rxvt को ऐसा करने के लिए भी कॉन्फ़िगर किया जा सकता है (उदाहरण नहीं दिए गए)।

अधिक जानकारी: http://www.leonerd.org.uk/hacks/fixterms/


कई कुंजियों को हटाने के लिए, इस दस्तावेज़ को देखें : कुंजी प्रविष्टियों को अलग करें \n। लाइनों को विभाजित करने के लिए बैकस्लैश का उपयोग करें। ईजी टू मैप <kbd> CSB </ kbd> और <kbd> CSF </ kbd> इसका उपयोग करें: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")
cfi

पूर्णता के लिए, शायद उत्तर में यह भी जोड़ें कि यह vi में कैसे मैप करें? उदाहरण के लिए map <ESC>[66;5u :echo "ctrl-shift-b received"<CR>मैप करने के लिए Ctrl-Shift-ख स्थिति पंक्ति में एक संदेश मुद्रित करने के लिए। AskUbuntu पर एक समान क्यू था और मैंने इसे संक्षेप में प्रस्तुत किया है।
सीएफआई

हमें एक नया टर्मिनल विनिर्देश चाहिए! xterm-256color(सबसे हाल का) इतनी सीमाओं का दुख।
जेरेम पोइलर

@Jezz सीमाएँ स्वयं के साथ हैं, के लिए समाप्त फ़ाइल नहीं xterm-256color
ग्रेव

@graywh ज़रूर, नई सुविधाओं को समाप्त करना आवश्यक होगा
Jérôme Pouiller

9

जैसा कि पहले ही बताया जा चुका है, इससे <C-S-A>अलग तरीके से मैप करने का कोई तरीका नहीं है <C-A>

हालाँकि, जैसे उपकरणों के लिए autokey(linux & windows के लिए) या autohotkey(windows के लिए), आप <C-S-A>विशिष्ट अनुप्रयोगों के लिए एक अलग कुंजी-स्ट्रोक (s) भेजने के लिए रीमैप कर सकते हैं ।

उदाहरण के लिए मेरे सिस्टम में, मेरे पास यह सेटिंग है autokey:

$ cat ~/.config/autokey/data/gnome-terminal/ctrlshifta-gnome-terminal.py
#ctrl+shift+a sends '<S-F1>a'
keyboard.send_keys("<shift>+<f1>a") # Note that `f` in `f1` needs to be in lower case.

इसे इन गुणों को निर्दिष्ट करें:

  1. कीबोर्ड-शॉर्टकट के रूप में ctrl+shift+a
  2. खिड़की वर्ग: gnome-terminal-server.Gnome-terminal

फिर आप जो चाहें करने के ~/.vimrcलिए मैपिंग बना सकते <S-F1>aहैं।


टिप्पणियाँ:

  1. मैंने <S-F1>पता लगाने के लिए नेता की तरह का उपयोग किया है <C-S>। ऐसा इसलिए था क्योंकि मेरे टर्मिनल ने स्वीकार नहीं किया था <F13>- <F37>आदि चाबियाँ। यदि आपका एप्लिकेशन इसका समर्थन करता है, ( gvimक्या मुझे लगता है) उन कुंजियों का उपयोग करने की अनुशंसा की जाती है।
  2. मैं मुख्य रूप से vimमें gnome-terminal। इसलिए मैंने window class = gnome-terminal-server.Gnome-terminalफिल्टर के रूप में इस्तेमाल किया। gvimयदि आप चाहें तो इसका उपयोग करने के लिए इसे संशोधित करें । autokeyकिसी भी अन्य विंडो के गुणों जैसे क्लास / शीर्षक को कैप्चर करने के लिए एक बटन का समर्थन करता है।

बहुत बहुत धन्यवाद। Theres बहुत सारे सामान के बारे में बाहर ऑटोकेपिंग के लिए कुंजी रीमैपिंग लेकिन यह कैसे करना है पर कोई वास्तविक निर्देश नहीं। अंत में आपका जवाब यही करता है। मैं विश्वास नहीं कर सकता कि किसी और ने आपको नहीं उकसाया है।
अचार ३३

1
ईश्वर को धिक्कार है! मैंने वह सब कुछ किया जो मैं कर सकता था लेकिन मैं इसे अपने ubuntu 16.04 पर स्थापित नहीं कर सका।
युकाशिमा हूकसे

apt install autokey-gtk?
ऐशसेन

1
अतिरिक्त सॉफ़्टवेयर स्थापित करने से पहले, आप यह देखने के लिए देख सकते हैं कि क्या आपका विंडो प्रबंधक सीधे इसे संभालता है। उदाहरण के लिए, i3 में मेरी .config में यह है: जब मैं bindsym --release Control+Shift+h exec --no-startup-id xdotool key --clearmodifiers comma w m hदबाता ,wmhहूं तो दबाता है <C-S-h>, और फिर विम को संभालना जानता है,wmh
MatrixManAtYrService

^ ^ यह भी अच्छा है। हालाँकि, मैं कुंजी-अनुवाद को केवल गनोम-टर्मिनल या जीवीएम तक सीमित करना चाहता था। अन्य ऐप्स नहीं। <C-S-H>जब मैं दबाता हूं तो अन्य एप्लिकेशन प्राप्त होते रहना चाहिए ।
ऐशसेन

5

यदि आप मौजूदा CV कार्यक्षमता खो रहे हैं, तो आप इसके बजाय CQ का उपयोग कर सकते हैं। देखें: CTRL-V- वैकल्पिक मदद करें।


3

NeoVim अब अपने टर्मिनल और गुई क्लाइंट दोनों के लिए यह कार्यक्षमता प्रदान करता है। देखें : h nvim-features-new


3
जब तक आप अपने टर्मिनल में CSI कोड सक्षम नहीं करते हैं, काफी नहीं है। CTRL-SHIFT वेरिएंट जो बॉक्स से बाहर का समर्थन करता है, ज्यादातर गैर-मुद्रण योग्य वर्ण हैं (उदाहरण neovim.org/doc/user/vim_diff.html#nvim-features-new पर सूचीबद्ध हैं )। हालांकि, मेटा chords (सहित <m-s-...>वेरिएंट) है ज्यादातर बॉक्स से बाहर पूरी तरह से काम करते हैं।
जस्टिन एम। कीज़

यह दस्तावेज़ कहता है ALT (|META|) chords always work (even in the |TUI|). Map |<M-| with any key: <M-1>, <M-BS>, <M-Del>, <M-Ins>, <M-/>, <M-\>, <M-Space>, <M-Enter>, etc. Case-sensitive: <M-a> and <M-A> are two different keycodes.कि "केस-सेंसिटिव:" भाग से पहले एक लाइन ब्रेक है, जिससे यह अस्पष्ट हो जाता है। सुधार के लिए धन्यवाद, @ जस्टिनएम.केयस। इसके अलावा, विम 8.1 के बीच <M-a>और <M-A>साथ ही अंतर करने के लिए प्रकट होता है ।
एडम काटज़

@ जस्टिन-एम-केयस <c-s-l>पूरी तरह से से अलग रखा जाता है <c-l>में Konsoleकिसी भी अतिरिक्त परेशानी के बिना
Slava

3

जिस तरह से कीबोर्ड इनपुट आंतरिक रूप से संभाला जाता है, यह दुर्भाग्य से आम तौर पर आज भी संभव नहीं है, यहां तक ​​कि जीवीआईएम में भी। जैसे कुछ कुंजी संयोजन, Ctrl+ गैर-वर्णमाला मैप किया जा सकता है, और Ctrl+ पत्र बनाम Ctrl+ Shift+ पत्र पहचाना नहीं जा सकता। (जब तक कि आपका टर्मिनल इसके लिए एक अलग टर्मकैप कोड न भेज दे, जो सबसे अधिक नहीं है।) सम्मिलित या कमांड-लाइन मोड में, कुंजी संयोजन टाइप करने का प्रयास करें। यदि कुछ नहीं होता है / डाला जाता है, तो आप उस कुंजी संयोजन का उपयोग नहीं कर सकते। यह भी <Tab>/ <C-I>, <CR>/ <C-M>/ <Esc>/ <C-[>आदि पर लागू होता है (केवल अपवाद है <BS>/ <C-H>।) यह एक ज्ञात दर्द बिंदु है, और vim_dev और #vim IRC चैनल पर विभिन्न चर्चाओं का विषय है।

कुछ लोग (सबसे महत्वपूर्ण पॉल लियोनर्ड इवांस) इसे ठीक करना चाहते हैं (यहां तक ​​कि टर्मिनलों में कंसोल विम के लिए भी इसका समर्थन करते हैं), और विभिन्न प्रस्तावों, सी.पी. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

लेकिन आज तक, कोई भी पैच या स्वयंसेवक अभी तक आगे नहीं आया है, हालांकि कई ने भविष्य के विम रिलीज में ऐसा करने की इच्छा व्यक्त की है।


1

जैसा कि आपने नोट किया है, आपको एक ही कीकोड मिलता है। तो उन्हें भेद करने का एकमात्र तरीका Shiftआपके इवेंट हैंडलिंग फ़ंक्शन में कुंजी की स्थिति की जांच करना है। बेशक, यदि आपके पास keypress और प्रसंस्करण के बीच 0.5 सेकंड से अधिक की देरी है, तो आपको कुछ हिट याद आएंगे।


1
मुझे लगता है कि मेरे सवाल का मतलब यह था कि gvim इस तरह के अंतर को बनाने में सक्षम है (भले ही सादे vim नहीं कर सकता है), क्या कोई gvim- विशिष्ट एक्सटेंशन है जिसे मैं Ctrl + Shift + V बनाम Ctrl + V में अंतर करने के लिए भरोसा कर सकता हूं ।
कोहसके कावागुची

9
शिट की स्थिति की जाँच कैसे करें? मैंने खोज की, लेकिन दूर से उपयोगी कुछ भी नहीं मिला।
बोलोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.