সন্নিবেশ মোডে অক্ষরের ক্রম মানচিত্র করুন


11

আমি ইতিমধ্যে সন্নিবেশ মোডে একটি মূল সমন্বয় মানচিত্র করতে পারি:

:inoremap abc <do stuff>

তবে এর কয়েকটি ত্রুটি রয়েছে:

  • অনুক্রমের আংশিক সংস্করণ টাইপ করার সময়, যেমন ab, অক্ষরগুলি আসলে অল্প সময়ের জন্য প্রদর্শিত হয় না, যেহেতু আপনি সম্পূর্ণ কমান্ডটি টাইপ করছেন কিনা তা দেখার জন্য এটি "অপেক্ষা" করছে। এটি অনাকাঙ্ক্ষিত; আমি যদি চেইনের একটি আংশিক স্তর প্রবেশ করানো হয় তবে বিরতি ছাড়াই চিঠিগুলির একটি শৃঙ্খলা মানচিত্র করতে চাই।

  • যদি আমি টাইপ করি ab, তবে বিরতি দিন (এবং উপরের পয়েন্টে বর্ণিত অক্ষরগুলি উপস্থিত না হওয়া পর্যন্ত অপেক্ষা করুন), তারপরে টাইপ করুন c, কমান্ডটি কার্যকর হয় না। আমি যতক্ষণ অপেক্ষা করি না কেন আদেশটি কার্যকর করা হোক।

আমি একটি ব্যবহার করব iab, তবে এটি কাজ করে না কারণ:

  1. এটি স্ট্রিংয়ের পরে একটি স্থান প্রবেশ করা প্রয়োজন
  2. আমি এটি দিয়ে স্বেচ্ছাচারিত কমান্ডগুলি কার্যকর করতে পারি না, কেবলমাত্র একটি স্ট্রিং টেক্সট sertোকান।

কোনও মানচিত্র ব্যবহার না করে stringোকানো মোডে একটি নির্দিষ্ট স্ট্রিং প্রবেশ করানো হলে কোনও কমান্ড বা কীস্ট্রোক কার্যকর করার কোনও উপায় আছে (যা আমি যখন টাইপ করি প্রতিবার বিরক্তিকরভাবে বিরতি দেবে aএবং আমি খুব বেশিক্ষণ অপেক্ষা করি তবে কাজ না করে)?


এই drawbbacks এছাড়াও সত্য :cnoremap abc <do stuff>...
মার্টিন Tournoij

1
আপনি যখন করবেন তখন কোনও বিলম্ব নেই ab<any key>
রোমেনেল

উত্তর:


10

এটি করার একটি উপায় এখানে:

let s:inputBuffer = ''

augroup _silentInsertTrigger
    autocmd!
    autocmd InsertCharPre * call <sid>OnPreEnterChar()
    autocmd InsertLeave * call <sid>OnInsertLeave()
augroup END

function! s:OnPreEnterChar()
    let s:inputBuffer .= v:char

    if s:inputBuffer[-3:] ==# 'abc'
        echo '<do stuff>'
    endif

    return v:char
endfunction

function! s:OnInsertLeave()
    let s:inputBuffer = ''
endfunction
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.