আমি কী কীভাবে আলাদা কীম্যাপ দিয়ে সিউডো sertোকানো মোড তৈরি করতে পারি?


9

আমি নিয়মিতভাবে দুটি ভিন্ন কীবোর্ড লেআউট ( প্রোগ্রামারস-ডিভোরাক এবং তুর্কি-এফ ) ব্যবহার করার ক্ষেত্রে কিছুটা অস্বাভাবিক অবস্থানে আছি । এই বিন্যাসগুলি একে অপরের থেকে একেবারে পৃথক এবং আমি কেবলমাত্র পেশির স্মৃতিগুলির এক সেট দিয়ে ভিমে দক্ষ হতে সক্ষম। আমি ডিভোরাক লেআউটে ভিএম কমান্ডের সাথে বেশ দক্ষ, তবে আমার কীবোর্ড যদি তুর্কি-এফ লেআউটে থাকে তবে এটি ব্যবহার করা প্রায় অসম্ভব। দুর্ভাগ্যক্রমে আমি নিয়মিত ইংরেজি এবং তুর্কি এবং এমনকি মিশ্র ভাষায় ফাইলগুলি সম্পাদনা করি। আমার দক্ষতাটি এমন যে আমি এটির সাথে সম্পর্কিত কীবোর্ড লেআউটে উভয় ভাষা টাইপ করতে পারি, তবে আমার মস্তিষ্ক সেগুলি ক্রস-ওয়্যার করতে অস্বীকার করে এবং ডভোরাক বিন্যাস বা তদ্বিপরীত থেকে তুর্কি ভাষায় একটি শব্দের কয়েকটি অক্ষরও টাইপ করতে অস্বীকার করে।

এক্সর্গে লেআউট পরিবর্তন করার জন্য আমার কাছে দ্বি-কী-স্যালুট বাইন্ডিং রয়েছে তবে মিশ্র ভাষার ফাইলগুলি সম্পাদনা করার সময় এমনকি এটি আমাকে ভিমে একটি বিশ্রী কর্মপ্রবাহ সহ ছেড়ে দেয়:

<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মান ছাড়াই without মানগুলি নিজেরাই সহজ, আমার বর্ণমালার ম্যাপিংগুলির দরকার এমন কিছু:

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

প্রশ্ন হচ্ছে, কিভাবে সেটআপ দুই সন্নিবেশ মোড, এক স্বাভাবিক সন্নিবেশ মোড এবং মোড সন্নিবেশ এক ছদ্ম যে ম্যাপিং একটি গুচ্ছ ছাড়া অভিন্ন, এবং আমি সঙ্গে এই মোড কিভাবে আরম্ভ করতে পারবেন <leader>i, <leader>aইত্যাদি?


1
এখানে একটি আলাদা ধারণা রয়েছে: আপনার কাছে InsertEnterএবং InsertLeaveঅটোকিম্ড রয়েছে যা আপনি স্বয়ংক্রিয়ভাবে বিন্যাসগুলি স্যুইচ করতে ব্যবহার করতে পারেন। বিশেষত, InsertLeaveআপনি এটি পরীক্ষা করতে পারবেন এটি তুর্কি কিনা, যদি হয় তবে ডিভোরাক এ স্যুইচ করুন, একটি পতাকা সেট করুন এবং আপনি যখন সন্নিবেশ সন্নিবেশ করেন তখন আবার তুর্কিতে স্যুইচ করুন যদি আপনি শেষবার সন্নিবেশ মোডে রেখেছিলেন এমন ঘটনা যদি ঘটেছিল।
মার্টিন টর্নোইজ

@ কারপেটসমোকার আমি দেখতে পাচ্ছি না এটি কীভাবে আমার সমস্যাগুলি সমাধান করে। এমনকি যদি "চেক" করার কিছু ছিল (তবে আমি নিশ্চিত নই যে আপনি কী মনে করছেন আমি সেখানে যাচাই করবো ... সমস্যার একটি অংশ হ'ল আমি শব্দ ভিত্তিতে একটি শব্দের পিছনে পিছনে যাচ্ছি), এর অন্যতম কারণ আমি এর লাইন ধরে ভাবছিলাম :imapযে এটি এমনকি একটি দূরবর্তী ssh অধিবেশন বা $DISPLAYঅন্যথায় সেট করা না থাকলেও কাজ করবে ।
কালেব

উত্তর:


7

কিম্যাপসের আকারে ভিমের এই জাতীয় কিছু রয়েছে । থেকে :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

ইনগো কারকাতের উত্তরটি দেখে মনে হচ্ছে এটি ঠিক সঠিক সমাধান এবং আমার পরিস্থিতি সমাধান করেছে solved তবে এখানে অন্য কারও জন্য কেবলমাত্র ভিমের ভাষা মানচিত্রের ফাংশন দিয়ে শুরু করার জন্য কিছুটা ভারবস নির্দেশ রয়েছে।

প্রথমত, আপনার একটি ভাষার মানচিত্র ফাইল দরকার। ক্যাপস লকের উদাহরণ হিসাবে, আপনি নীচের মতো কিছু রাখতে চাইবেন ~/.vim/keymap/dvorak2turkishf.vim( গিথু বি থেকে আমার সম্পূর্ণ ম্যাপিং ডাউনলোড করুন ):

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

বিকল্প-ভাষা ইনপুট মোডে আপনি যে বিভিন্ন উপায়ে শেষ করতে পারেন তার জন্য বাইন্ডিং যুক্ত করুন যাতে তাদের ব্যবহার করার আগে <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>+^

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.