मैं एक अलग कीपैड के साथ एक छद्म सम्मिलित मोड कैसे बना सकता हूं?


9

मैं एक नियमित आधार पर दो अलग-अलग कीबोर्ड लेआउट का उपयोग करने की थोड़ी असामान्य स्थिति में हूं ( प्रोग्रामर-ड्वोरक और तुर्की-एफ )। ये लेआउट एक-दूसरे से काफी अलग हैं और मैं केवल मांसपेशियों की यादों के एक सेट के साथ विम में कुशल होने में सक्षम हूं। मैं ड्वोरक लेआउट में विम कमांड के साथ बहुत कुशल हूं, लेकिन अगर मेरा कीबोर्ड तुर्की-एफ लेआउट में है तो इसका उपयोग करना लगभग असंभव है। दुर्भाग्य से मैं नियमित रूप से अंग्रेजी और तुर्की और यहां तक ​​कि मिश्रित भाषाओं में फ़ाइलों को संपादित करता हूं। मेरी प्रवीणता ऐसी है कि मैं संबंधित कीबोर्ड लेआउट में या तो अच्छी तरह से भाषा टाइप कर सकता हूं, लेकिन मेरा दिमाग उन्हें क्रॉस-वायर करने से इनकार करता है और तुर्की में एक शब्द के कुछ अक्षर भी टाइप करता है जैसे कि ड्वोरक लेआउट या विसे वर्सा।

मेरे पास Xorg में लेआउट बदलने के लिए दो-कुंजी-सलामी बाइंडिंग है, लेकिन यहां तक ​​कि मिश्रित भाषा की फ़ाइलों को संपादित करते समय यह मुझे अजीब अजीब वर्कफ़्लो के साथ छोड़ देता है:

<vim commands…>i<switch to tr>…content…<escape><switch to en><vim commands…>

मैं इसे कुछ इस तरह से छोटा करने में सक्षम होना चाहता हूं:

<vim commands…><leader>i…content…<escape><vim commands…>

... ऐसा है कि सिस्टम कीबोर्ड लेआउट को बदले बिना तुर्की लेआउट का अनुकरण करने के लिए मानों का <leader>iएक समूह सेट करता है :imap। एक ही समय में, iअतिरिक्त मोड के बिना मोड सम्मिलित करने के लिए स्विच करेगा :imap। मूल्य स्वयं आसान हैं, मुझे बस इनकी तरह वर्णमाला मैपिंग की आवश्यकता है:

:imap a u
:imap A U
:imap o i
:imap O İ
"etc.

सवाल यह है कि, कैसे सेटअप दो डालने मोड के लिए, एक सामान्य डालने मोड और डालने एक छद्म कि मैपिंग का एक समूह को छोड़ कर एक है, और मैं के साथ इन विधियों कैसे ट्रिगर कर सकते हैं <leader>i, <leader>aआदि?


1
यहां एक अलग विचार दिया गया है: आपके पास स्वचालित रूप से लेआउट स्विच करने के लिए उपयोग किए जा सकने वाले InsertEnterऔर InsertLeaveऑटोकैड हैं। विशेष रूप से, InsertLeaveयदि आप यह देख सकते हैं कि क्या यह तुर्की है, अगर यह है, तो ड्वोरक पर जाएँ, एक ध्वज सेट करें, और जब आप प्रविष्ट करें तो फिर से तुर्की में वापस जाएँ अगर ऐसा था तो पिछली बार जब आपने सम्मिलित विधा को छोड़ा था।
मार्टिन टूरनोइज

@Carpetsmoker मैं नहीं देखता कि मेरे मुद्दों को कैसे ठीक करता है। यहां तक ​​कि अगर "चेक" करने के लिए कुछ था (मुझे यकीन नहीं है कि आपको क्या लगता है कि मैं वहां जांच करूंगा ... समस्या का हिस्सा मैं शब्द के आधार पर एक शब्द पर आगे पीछे जाता हूं), एक कारण मैं। की तर्ज पर सोच रहा था :imapकि यह एक दूरस्थ ssh सत्र में भी काम करेगा या जब $DISPLAYअन्यथा सेट नहीं किया जाएगा।
कालेब

जवाबों:


7

विम के रूप में कुछ इस तरह है keymaps । से :help mbyte-keymap:

When the keyboard doesn't produce the characters you want to enter in your
text, you can use the 'keymap' option.  This will translate one or more
(English) characters to another (non-English) character.  This only happens
when typing text, not when typing Vim commands.  This avoids having to switch
between two keyboard settings.

इंसर्ट-मोड केवल कैप्स लॉक, कैप्स लॉक के अनुकरण के लिए ऐसी मैपिंग का वर्णन करता है; जैसा कि आप वहां देख सकते हैं, मैपिंग फ़ाइल आपके प्रश्न की रूपरेखा के समान है।

आप इस सेटिंग को सक्षम :set iminsert=1या गतिशील रूप से सक्षम करते हैं i_CTRL-^। यह विकल्प के /searchसाथ भी काम करता 'imsearch'है।


3

इंगो करकट के जवाब से ऐसा लगता है कि यह बिल्कुल सही समाधान था और इससे मेरी स्थिति हल हो गई है। हालांकि यहाँ किसी और के लिए थोड़ा और अधिक क्रिया निर्देश दिए गए हैं जो कि सिर्फ विम के भाषा मानचित्र कार्यों के साथ शुरू हो रहे हैं।

सबसे पहले, आपको एक भाषा मानचित्र फ़ाइल की आवश्यकता है। कैप्स लॉक उदाहरण के अनुसार, आप कुछ इस तरह से रखना चाहेंगे ~/.vim/keymap/dvorak2turkishf.vim( Githu b से मेरी पूरी मैपिंग डाउनलोड करें ):

let b:keymap_name = "dvorak2turkishf"
loadkeymap
; f
, g
. ğ
p ı
y o
f d
g r
" etc...

उस जगह के साथ, यह कुछ मामलों में इसे सक्रिय करने के लिए बाइंडिंग सेटअप करने के लिए बना हुआ है, लेकिन अन्य नहीं। आप अपनी ~/.vimrcफ़ाइल में कुछ जोड़ना चाहते हैं ।

सबसे पहले, खोज कीमैप को इनपुट एक से बांधें:

set imsearch=-1

फिर सेट करें कि वैकल्पिक-भाषा इनपुट मोड के लिए किस कीमैप का उपयोग किया जाएगा:

set keymap=dvorak2turkishf

वैकल्पिक इनपुट मोड को बंद करें ताकि डिफ़ॉल्ट रूप से कोई परिवर्तन न हो:

set iminsert=0

वैकल्पिक भाषा स्विच बंद करने के लिए इन्सर्ट मोड को छोड़कर जब भी चलाने के लिए एक ऑटो-कमांड सेट करें:

autocmd InsertLeave * set iminsert=0

उन सभी विभिन्न तरीकों के लिए बाइंडिंग जोड़ें, जिन्हें आप वैकल्पिक-भाषा इनपुट मोड में समाप्त कर सकते हैं ताकि स्विच करने से पहले भाषा मानचित्र swtich सेट करने से पहले <leader>(आमतौर पर \) का उपयोग करें:

nnoremap <leader>i :set iminsert=1<Cr>i
nnoremap <leader>I :set iminsert=1<Cr>I
nnoremap <leader>a :set iminsert=1<Cr>a
nnoremap <leader>A :set iminsert=1<Cr>A
nnoremap <leader>c :set iminsert=1<Cr>c
nnoremap <leader>C :set iminsert=1<Cr>C
nnoremap <leader>r :set iminsert=1<Cr>r
nnoremap <leader>R :set iminsert=1<Cr>R
nnoremap <leader>o :set iminsert=1<Cr>o
nnoremap <leader>O :set iminsert=1<Cr>O

मानचित्र सक्षम होने पर एक अलग कर्सर रंग सेट करें:

:highlight Cursor guifg=NONE guibg=Green
:highlight lCursor guifg=NONE guibg=Cyan

सभी एक साथ, यहाँ है जो मेरे विन्यास में बदल गया है । अंतिम नोट के रूप में, आप जिस इन्सर्ट मोड में हैं, आप भाषा मानचित्र विकल्प को चालू और बंद कर सकते हैं <ctrl>+^

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