Ekleme modunda bir harf sırasını eşleme


11

Ekleme modunda zaten bir tuş kombinasyonunu eşleyebilirim:

:inoremap abc <do stuff>

Ancak bunun birkaç dezavantajı vardır:

  • Dizinin kısmi bir sürümünü yazarken ab, karakterler kısa bir süre için görüntülenmez, çünkü tam komutu yazıp yazmayacağınızı görmek için "beklemektir". Bu istenmeyen bir durumdur; Zincirin kısmi bir alt dizesi girildiyse, duraklamadan bir harf zincirini eşlemek istiyorum.

  • Ben yazarsam ab, duraklatırsam (ve karakterler gerçekte yukarıda belirtilen şekilde görünene kadar bekler), sonra ckomutu yazmazsınız. Ne kadar beklesem de komutun yürütülmesini istiyorum.

Ben kullanmak istiyorum iab, ama bu işe yaramaz çünkü:

  1. Dizeden sonra bir boşluk girilmesini gerektirir
  2. Onunla rastgele komutları çalıştıramıyorum, sadece bir metin dizesi ekleyin.

Ekleme modunda belirli bir dize bir harita kullanmadan girilirse, bir komut veya tuş vuruşları yürütmenin herhangi bir yolu var mı (her yazdığımda can sıkıcı bir şekilde duraklayacak ave çok uzun süre beklersem çalışmıyor)?


Bu dezavantajlar da :cnoremap abc <do stuff>...
Martin Tournoij

1
Bunu yaptığınızda gecikme olmaz ab<any key>.
romainl

Yanıtlar:


10

İşte bunu yapmanın bir yolu:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.