সংক্ষেপে:
- কীকোডগুলি একটি কী উপস্থাপনের একটি উপায়
- একটি ম্যাপযুক্ত কী সিকোয়েন্সটি ক্রিয়াকলাপটি চালিত কীকোডগুলির উত্তরসূরি
এখন আমি মনে করি যে আপনার প্রশ্নটি কোনও ম্যাপযুক্ত কী ক্রমিক এবং একটি কী কোডের মধ্যে পার্থক্যের পরিবর্তে পার্থক্য timeoutlen
এবং ttimeoutlen
তার চেয়ে বেশি।
আমার উত্তরটি এই উইকিয়া নিবন্ধের উপর ভিত্তি করে তৈরি করা হয়েছে যা আপনার সত্যই পড়া উচিত কারণ এটি এমন কিছু পয়েন্টগুলিকে সম্বোধন করে যা উত্তরটি যতটা সম্ভব সংক্ষিপ্ত এবং পরিষ্কার রাখতে আমি এখানে উল্লেখ করি নি।
প্রথমে কী কোডগুলি সম্পর্কে কথা বলা যাক। নিবন্ধটি দুটি ধরণের কীকোডগুলি সংজ্ঞায়িত করেছে:
টার্মিনাল কীকোডস:
তারা কীভাবে টার্মিনালটি একটি কী উপস্থাপন করে।
এই কোডগুলি টার্মিনাল দ্বারা ভিমে প্রেরণ করা হয়।
এই কীকোডগুলির একটি তালিকা পেতে আপনার টার্মিনাল ডকুমেন্টেশন ব্যবহার করা উচিত। আপনি cat
আপনার টার্মিনালে কমান্ডটি টাইপ করে এবং কী কীডটি জানতে চান কীটি টাইপ করে এগুলি দেখতে পাবেন । উদাহরণস্বরূপ আমার টার্মিনালটিতে কী ShiftF1কোডগুলির মতো দেখাচ্ছে:
^[[23~
ভিম কীকোডস:
তারা কীভাবে একটি কী উপস্থাপন করে।
কীগুলি উপস্থাপনের জন্য ভিমের একটি ধারাবাহিক উপায় প্রয়োজন কারণ টার্মিনালের কীকোডগুলি টার্মিনাল থেকে অন্যটিতে পরিবর্তিত হয়। ভিম কীকোডগুলির একটি তালিকা এখানে প্রবেশযোগ্য :h t_ku
। ভিম কীকোডটি ShiftF1দেখতে দেখতে:
<S-F1>
সুতরাং আমি যখন ShiftF1আমার কীবোর্ডে টিপব, তখন ড্রাইভার এবং ওএস টার্মিনালটিকে জানাতে দেবে যে আমি এই কীগুলি টিপছি যা এটি ব্যাখ্যা করবে ^[[23~
। টার্মিনালটি এটি ভিমে প্রেরণ করবে যা বুঝতে পারে যে এর অর্থ <S-F1>
এবং এটি এই কী কোডটিতে ম্যাপযুক্ত ক্রিয়াটি ট্রিগার করবে।
আমরা ভিম কীকোড সেট করতে পারি, সুতরাং যদি আপনার টার্মিনালটি এমন একটি কী কোড পাঠায় যা ভিম <S-F1>
উদাহরণস্বরূপ বুঝতে পারে না তবে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন। এটি যখন আপনার কীকোড গ্রহণ করবে তখন এটি ভিমকে জানাবে ^[[24~
, এটির অনুবাদ করুন <S-F1>
:
set <S-F1> ^[[24~
সুতরাং ম্যাপযুক্ত কী ক্রমটি কী?
একটি ম্যাপযুক্ত কী সিকোয়েন্সটি ম্যাপিংয়ের একটি lhs হবে এবং ভিম কী কোড বা টার্মিনাল কী কোড হতে পারে। উদাহরণ স্বরূপ:
:nmap ^[[24~ :bn<CR>
:nmap <S-F1> :bn<CR>
প্রথম ম্যাপিং টার্মিনাল কীকোডের মানচিত্র তৈরি করবে যখন দ্বিতীয়টি ভিম কীকোডকে মানচিত্র করবে।
এখন মধ্যে পার্থক্য জন্য timeoutlen
এবং ttimeoutlen
?
ttimeoutlen
সময় তেজ (ক টার্মিনাল কী কোডের বিভিন্ন অংশ আমাদের আগের উদাহরণে যে হবে জন্য অপেক্ষা করবে ^[
তারপর [
তারপর 2
, ইত্যাদি ...
এই কীকোডগুলি টার্মিনাল দ্বারা প্রেরিত হওয়ায় এই ইনপুটগুলির মধ্যে কোনও বিলম্ব হওয়া উচিত নয় (যেহেতু তারা টার্মিনাল দ্বারা 'একবারে' পাঠানো হয়)। এই কারণেই ডকটি এই সেটিংটির জন্য একটি খুব ছোট মানের প্রস্তাব দেয়।
timeoutlen
কোনও সময় ব্যবহারকারীরা ম্যানুয়ালি প্রবেশ করানো ভিম কীকোডগুলির জন্য অপেক্ষা করবে এমন সময়টি এইভাবে টার্মিনাল কীকোডের চেয়ে দীর্ঘতর হয়।
একটি উদাহরণ ব্যবহার করার জন্য এটি বলা যাক:
- আপনি
^[[1;6B
একটি ক্রিয়াতে ম্যাপ করেছেন
^[1;6B
এটি আপনার টার্মিনালের কীকোড ctrlshiftdown
^[
এটি আপনার টার্মিনালের কীকোড Escape।
আপনার যে আচরণটি আশা করা উচিত:
- যদি আপনি একটি বড় সেট করেন
ttimeoutlen
, প্রতিবার আপনি টাইপ করেন Escape, ভিম আপনার ^[
(অর্থাত Escape) বা ^[1;6B
(অর্থাত ctrlshiftdown) বোঝাতে চেয়েছিল কিনা তা দেখার জন্য অপেক্ষা করবে
- আপনি যদি একটি ছোট সেট করেন
ttimeoutlen
, আপনি টাইপ করার সময় আপনার কোনও বিলম্ব হবে না Escapeকারণ ভিম জানতে পারবে এটি একটি সম্পূর্ণ কীকোড।
এবং timeoutlen
আপনার যদি নিম্নলিখিত ম্যাপিং থাকে তবে একটি 'উচ্চতর স্তর' নিয়ে কাজ করবে:
inoremap jj <Esc>
inoremap jk <Esc>:nohl<CR>
আপনি যখন টাইপ jকরবেন তখন ভিম অপেক্ষা করবেন timeoutlen
না কারণ টার্মিনাল কীডকোডের শুরুটি jসম্পূর্ণ হয়নি তবে এটি পরবর্তী ভিম কীকোডের জন্য অপেক্ষা করছে।
আমি আশা করি আমার ব্যাখ্যাটি বোধগম্য হয়েছে, নোট করুন যে আমি ব্যবহৃত কিছু ম্যাপিংগুলি কার্যকরী দৃষ্টিকোণে বোঝায় না তবে সুবিধার্থে ব্যাখ্যাটির জন্য এখানে রয়েছে।