विम में विभिन्न कीबोर्ड के साथ काम करने का सबसे सुविधाजनक तरीका क्या है?


19

मुझे कभी-कभी ग्रीक शब्द लिखने की आवश्यकता होती है, लेकिन जब मैं ग्रीक कीबोर्ड का उपयोग कर रहा हूं, तो कह रहा हूं, कहूंगा कि कमांड के उद्देश्य के रूप में <C-p>समझा जाएगा <C-π>या नहीं। इसके साथ तय किया जा सकता है :map <C-p> <C-π>। क्या मैं सभी की सूची बनाए बिना सभी पत्रों के लिए ऐसा कर सकता हूं?

पुनश्च। सभी की सूची बनाना एक सही परिणाम नहीं देता है। उदाहरण के लिए, qहै ;जीआर पर। कीबोर्ड, लेकिन हम मैप नहीं करना चाहते हैं; q को। इसके अलावा, किसी कारण के लिए, z (जेटा ज़ेटा) काम नहीं करता है :map Ζ Z। और एक कमांड जिसे मैंने परिभाषित किया है, के \lwरूप में काम नहीं करता है \λς


2
मुझे लगता है कि मैपिंग जाने का अच्छा तरीका नहीं है: हो सकता है कि आप जो तलाश कर रहे हैं वह langmapविकल्प हो ( डॉक देखें जिसमें ग्रीक लेआउट के लिए एक उदाहरण शामिल हो)। यह विकल्प वास्तव में ग्रीक या सिरिलिक जैसे गैर लैटिन कीबोर्ड से निपटने में मदद करने के लिए बनाया गया था। यह आपको उन प्रतीकों के जोड़ों को परिभाषित करने की अनुमति देता है, जिन्हें सामान्य रूप से इन्सर्ट मोड में व्याख्यायित किया जाएगा, लेकिन उन्हें अन्य मोड में प्रतिस्थापित किया जाएगा, शायद यह आपकी सहायता करेगा।
statox

@statox: धन्यवाद! मैंने पूर्व का उपयोग करने की कोशिश की। लेकिन कुछ नहीं हुआ। मदद का कहना है कि विम को + लैंगमैप विकल्प के साथ अनुपालन करना था। क्या यह जांचने का एक आसान तरीका है कि क्या यह था? मैं मैक ओएस के साथ आने वाले संस्करण का उपयोग कर रहा हूं।
टूथरोट सेप

1
:echo has('langmap')यदि आपको मिलता है तो आप इसका उपयोग कर सकते हैं यदि आपके 1पास एक 0नहीं है।
statox

@statox: धन्यवाद! मैं के साथ अद्यतन brew install vim --override-system-viऔर :echo has &cअब रिटर्न 1. ZZ काम करता है। \lv& C के साथ समस्या बनी हुई है।
टूथरोट सेप

मैं इस :echo has &cभाग को नहीं समझता , मैं यह नहीं देखता कि यह कैसे संबंधित है langmapएक बार जब आप अपने साथ संकलन कर langmapलेते हैं तो आपको :set langmap=ΑA,ΒB,ΨC [...]अपने vimrc में मैपिंग को निर्दिष्ट करना होगा ।
statox

जवाबों:


6

मैं सिफारिश करूंगा keymap, जिससे आपकी परेशानी दूर हो सके। इन्हें अपने vimrc में रखें

" set keymap=greek_utf-8
set iminsert=0
set imsearch=-1

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

inoremap <ESC> <ESC>:set iminsert=0<CR>

इन पर अधिक

:h iminsert :h keymap :h imsearch :h i_CTRL-^


दूसरी टिप्पणी के लिए संपादित करें:

यदि आप सम्मिलित मोड (और मोड बदलें) में प्रवेश कर रहे हैं, तो स्वचालित रूप से ग्रीक पर स्विच करने के लिए यह कोशिश कर सकते हैं, और यदि स्वचालित रूप से बंद कर सकते हैं (तब आपको मैपिंग की आवश्यकता नहीं है)।

augroup Greek
    au InsertEnter * set iminsert=1
    au InsertLeave * set iminsert=0
augroup END

क्या पॉलीटोनिक ग्रीक का उपयोग करना वास्तव में आवश्यक है? यह मुझे लगता है कि केवल सही एन्कोडिंग की आवश्यकता है, और फिर अंतर्निहित मैकओएस एक्स इनपुट का उपयोग करने के लिए। लेकिन यह शायद सिर्फ मेरी गलत धारणा है। आप MacOS X में पॉलीटोनिक ग्रीक कीबोर्ड पर भी स्विच कर सकते हैं (और इसे सीखें, लेकिन मुझे लगता है कि यह वह नहीं है जो आप चाहते हैं :-) :-) के अंतराल के बारे में, कुछ मैपिंग हो सकती है, इसके बारे में जानने की कोशिश करें :map >a, और यदि है तो , इसे अनमैप करें :unmap >a। एक गैर-ग्रीक और गैर-मैको उपयोगकर्ता के रूप में मैं पहले से ही अपने दिमाग के अंत में हूं। क्षमा करें और शुभकामनाएँ!
रुईचिरो

10

जैसा कि मैंने टिप्पणियों में कहा है, मैपिंग को उस तरह से डिज़ाइन नहीं किया गया है जो आप करना चाहते हैं। इस उपयोग के मामले के लिए एक दिलचस्प विकल्प है langmap

यह विकल्प इन्सर्ट या आपके कीबोर्ड को इन्सर्ट मोड में रखने और उसके व्यवहार को अन्य मोड में बदलने की अनुमति देता है।

इसका उपयोग करने के लिए विम को संकलित करना होगा +langmap, आप देख सकते हैं कि यह विकल्प सक्षम है echo has('langmap'): यदि कमांड 1विकल्प को सक्षम करता है तो आपको इस विकल्प के साथ एक सेटअप प्राप्त करना होगा जो सक्षम है (यह जानने के लिए कि यह कैसे करना है, यह एक और सवाल है)।

जब इसे सक्षम किया जाता है, तो विकल्प पात्रों के जोड़े लेता है उदाहरण के लिए जब आप सम्मिलित मोड में होते हैं तो आप अपने बफर में set langmap += à@जोड़ àसकते हैं और आप टाइप करते हैं, àलेकिन àसामान्य मोड में टाइप करने से वास्तव में एक ट्रिगर होगा @(यह उदाहरण azerty पर उपयोगी हो सकता है मैक्रो के साथ काम करने के लिए कीबोर्ड)।

ग्रीक में लैंगमैप का उपयोग करने के लिए आप :h 'langmap'इस लाइन को अपने साथ जोड़ने के लिए दिए गए उदाहरण का अनुसरण कर सकते हैं vimrc (इस पंक्ति को यहां से कॉपी करना एक अच्छा विचार नहीं हो सकता है क्योंकि मैं वास्तव में एन्कोडिंग के बारे में निश्चित नहीं हूं , लाइन को सीधे हेल्प फ़ाइल से yanking करना संभवतः है सुरक्षित) :

:set langmap=ΑA,ΒB,ΨC,ΔD,ΕE,ΦF,ΓG,ΗH,ΙI,ΞJ,ΚK,ΛL,ΜM,ΝN,ΟO,ΠP,QQ,ΡR,ΣS,ΤT,ΘU,ΩV,WW,ΧX,ΥY,ΖZ,αa,βb,ψc,δd,εe,φf,γg,ηh,ιi,ξj,κk,λl,μm,νn,οo,πp,qq,ρr,σs,τt,θu,ωv,ςw,χx,υy,ζz

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

command λς lw

इस प्रकार जब आप कमांड टाइप करेंगे λςVim निष्पादित होगा lwलेकिन मुझे इस पद्धति में कई कमियां दिखाई देती हैं:

  • आपके द्वारा उपयोग किए जाने वाले सभी आदेशों को फिर से परिभाषित करने के लिए बट में भारी दर्द हो सकता है।
  • उपयोगकर्ता-परिभाषित आदेशों को एक बड़े अक्षर से शुरू करना पड़ता है, और मुझे अब यह पता है कि यह यूनानी में कितना सुविधाजनक है।

तो शायद इस सवाल के जवाब में @Alexander Myshov द्वारा सुझाए गए एक प्लगइन उपयोगी हो सकता है (जैसा कि मैंने कभी इनमें से कोई भी कोशिश नहीं की, मुझे नहीं पता कि वे समस्या को हल करते हैं लेकिन ऐसा लगता है जैसे वे करते हैं)।


1

मैं नियमित रूप से अंग्रेजी और स्वीडिश में टाइप करता हूं। स्वीडिश ग्रीक से हल करने के लिए एक छोटी समस्या है क्योंकि यह केवल कुछ वर्णों के साथ अंग्रेजी वर्णमाला का विस्तार करता है, लेकिन मुझे लगता है कि मेरा समाधान ग्रीक के लिए हस्तांतरणीय है।

मैं अपने ओएस के सिस्टम कीबोर्ड स्विच का उपयोग करके स्विच करता था। इसके साथ समस्या यह है, जैसा कि ओपी ने उल्लेख किया है कि यह आदेशों की एक पूरी गुच्छा को तोड़ता है, क्योंकि सामान्य मोड में, प्रत्येक कुंजी गैर-अंग्रेजी कीबोर्ड के साथ विम को एक और संकेत भेजता है। स्वीडिश कीबोर्ड लेआउट में, इसके अलावा, गैर वर्णमाला वर्णों की एक पूरी गुच्छा नए पात्रों के लिए रास्ता बनाने के लिए ले जाया जाता है å, äऔर ö। उदाहरण के लिए, }Alt-Shift-9 ( अंग्रेजी कीबोर्ड पर शुरुआती कोष्ठक से मेल खाता है ) के साथ टाइप किया गया है, और बैकस्लैश को Alt-Shift-7 के साथ टाइप किया गया है। इस प्रकार डालने के लिए एक वेनिला स्वीडिश कीबोर्ड लेआउट पर स्विच करने से सिरदर्द का एक पूरा गुच्छा होता है।

मेरा समाधान केवल इन्सर्टमोड में संबंधित कुंजी को फिर से तैयार करना था और इन मैपिंग को एक फ़ंक्शन में लपेटना था ताकि मैं आसानी से आगे और पीछे स्विच कर सकूं। नीचे दिया गया कोड है कि मैंने यह कैसे किया .vimrc। यह केवल उन पात्रों को जोड़ता है जिनकी मुझे स्वीडिश कीबोर्ड लेआउट में स्थिति की आवश्यकता होती है, बाकी सब कुछ छोड़कर। अक्षर हैं जो उनके द्वारा छुपाया जाता है लिखने के लिए ( ;, :, [, {, ", और '), मैं बस कुंजी को दो बार मारा। सौभाग्य से, केवल मूर्ख लोगों को भी दो टाइप करने की आवश्यकता होती हैäएक पंक्ति में है। (यदि यह डबल हिटिंग उपयुक्त नहीं है, तो आप उन्हें Ctrl या कुछ इस तरह से मैप कर सकते हैं। मूल सिद्धांत यह है कि जिन अक्षरों को मास्क किया गया है, वे कीबोर्ड पर अपनी जगह पर बने रहते हैं, लेकिन एक कीस्ट्रोके को एहसास होने से हटा दिया जाता है। मुझे यह बहुत आसान लगता है। उन्हें इधर-उधर करने से।) इसका क्या मतलब है कि जब मैं स्वीडिश में टाइप करना चाहता हूं, तो मैं हिट करता हूं <Leader>s, जो इन मैपिंग पर स्विच करता है और स्वीडिश वर्तनी जांच लागू करता है। मुझे वापस करने के लिए <Leader>e

अब, ग्रीक के लिए, इसमें पूरे वर्णमाला के लिए मैपिंग करना शामिल होगा, जो वास्तव में एक परेशानी से कम है, जैसा कि आप सिद्धांत को प्राप्त करने से पहले एक बार लगता है। मुश्किल हिस्सा तब अंग्रेजी में स्विच करते समय उन सभी परिवर्तनों को अनमैप करना होगा। शायद कोई ऐसा करने के लिए निफ्टी के साथ आ सकता है।

मैं अरबी के लिए नीचे दिए गए एक सम्मिलित कार्य करने की योजना बना रहा हूं, दूसरी भाषा जो मैं अक्सर टाइप करता हूं। मैं इस प्रक्रिया पर रिपोर्ट करने के लिए यहां वापस आ सकता हूं।

" Switch to Swedish
function! SweType()
  set spelllang=sv
  inoremap ; ö
  inoremap ;; ;
  inoremap : Ö
  inoremap :: :
  inoremap [ å
  inoremap { Å
  inoremap ' ä
  inoremap '' '
  inoremap " Ä
  inoremap "" "
  inoremap [[ [
  inoremap {{ {
endfunction
nmap <Leader>s :<C-U>call SweType()<CR>


" Switch to English
function! EngType()
  set spelllang=en_us
  inoremap ; ;
  iunmap ;;
  inoremap : :
  iunmap ::
  inoremap [ [
  iunmap [[
  inoremap { {
  iunmap {{
  inoremap ' '
  iunmap ''
  inoremap " "
  iunmap ""
endfunction
nmap <Leader>e :<C-U>call EngType()<CR>

1
मैं गलत हो सकता हूं, लेकिन मुझे लगता है कि आपके उत्तर में इन्सर्ट मोड में आसानी से गैर-अंग्रेजी वर्ण प्राप्त करने की अनुमति है, जबकि ओपी की समस्या डालने के मोड के अलावा अन्य वर्णों में आसानी से अंग्रेजी वर्ण प्राप्त करना था। मुझे यकीन नहीं है कि आपका जवाब प्रारंभिक समस्या को स्वीकार करता है। फिर भी मैपिंग को सक्षम / अक्षम करने का कार्य काफी दिलचस्प है।
statox

@statox खैर, मुझे यह सवाल गलत लग सकता है, लेकिन अगर समस्या है कि नॉर्मल फंक्शन्स को बनाए रखते हुए आसानी से नॉन-इंग्लिश कैरेक्टर को इनसर्मोड में डाला जाए, तो मेरा मानना ​​है कि मेरा सवाल कम से कम उस समस्या को दूर करने के लिए अटेम्प्ट करता है।
एंड्रियास

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

1
@statox कोई अपराध नहीं हुआ। और यदि आपने मेरे उत्तर को अस्वीकार कर दिया है तो सभी अच्छे क्रम में होंगे।
एंड्रियास

1

मैं दो भाषाओं में भी टाइप करता हूं: रूसी और अंग्रेजी। और अब मैं इस प्लगइन https://github.com/lyokha/vim-xkbswitch का उपयोग करता हूं । इस प्लगइन में देशी कीबोर्ड लेआउट स्विचर पर निर्भरता है, मैक ओएस एक्स के लिए आप मेरा एक https://github.com/myshov/xkbswitch-macosx का उपयोग कर सकते हैं ।

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