একবার চেষ্টা করে দেখুন এটি পুনরুদ্ধার করে @
যাতে g@
(প্লাস একটি ডামি গতি l
) পরে ব্যবহৃত হয়, এটি শেষ অপারেটর হয়ে ওঠার সাথে পুনরাবৃত্তি করতে পারে .
।
" When . repeats g@, repeat the last macro.
fun! AtRepeat(_)
" If no count is supplied use the one saved in s:atcount.
" Otherwise save the new count in s:atcount, so it will be
" applied to repeats.
let s:atcount = v:count ? v:count : s:atcount
" feedkeys() rather than :normal allows finishing in Insert
" mode, should the macro do that. @@ is remapped, so 'opfunc'
" will be correct, even if the macro changes it.
call feedkeys(s:atcount.'@@')
endfun
fun! AtSetRepeat(_)
set opfunc=AtRepeat
endfun
" Called by g@ being invoked directly for the first time. Sets
" 'opfunc' ready for repeats with . by calling AtSetRepeat().
fun! AtInit()
" Make sure setting 'opfunc' happens here, after initial playback
" of the macro recording, in case 'opfunc' is set there.
set opfunc=AtSetRepeat
return 'g@l'
endfun
" Enable calling a function within the mapping for @
nno <expr> <plug>@init AtInit()
" A macro could, albeit unusually, end in Insert mode.
ino <expr> <plug>@init "\<c-o>".AtInit()
fun! AtReg()
let s:atcount = v:count1
let c = nr2char(getchar())
return '@'.c."\<plug>@init"
endfun
nmap <expr> @ AtReg()
আমি যতগুলি কর্নার কেসগুলি ভাবতে পারি পরিচালনা করার চেষ্টা করেছি। আপনি @:
সাথে পুনরাবৃত্তি করতে পারেন .
। এর পরবর্তী প্রেসগুলির জন্য গণনা করা হয় @
বা .
ধরে রাখা হয় .
।
এটি কৌতূহলোদ্দীপক এবং আমি নিশ্চিত নই যে পথে কিছুটা ভেঙে যাবে না। সুতরাং এর কোনও গ্যারান্টি, ওয়্যারেন্টি বা প্রতিশ্রুতি নেই
ব্যক্তিগতভাবে, আমি .
শেষ পরিবর্তনের জন্য সূক্ষ্ম দানযুক্ত পুনরাবৃত্তিগুলির এবং ম্যাক্রো পুনরাবৃত্তির মধ্যে পার্থক্য রাখছি @@
।
সম্পাদনা
আমি বুঝতে পেরেছি, এ পর্যন্ত চলে গিয়েছি, আমি পাশাপাশি আরও কিছু অতিরিক্ত কোড যুক্ত করতে পারি যা .
ম্যাক্রোটি রেকর্ড করার পরে অবিলম্বে চাপতে দেওয়া হবে যাতে এটি আবার খেলতে পারে।
fun! QRepeat(_)
call feedkeys('@'.s:qreg)
endfun
fun! QSetRepeat(_)
set opfunc=QRepeat
endfun
fun! QStop()
set opfunc=QSetRepeat
return 'g@l'
endfun
nno <expr> <plug>qstop QStop()
ino <expr> <plug>qstop "\<c-o>".QStop()
let s:qrec = 0
fun! QStart()
if s:qrec == 1
let s:qrec = 0
return "q\<plug>qstop"
endif
let s:qreg = nr2char(getchar())
if s:qreg =~# '[0-9a-zA-Z"]'
let s:qrec = 1
endif
return 'q'.s:qreg
endfun
nmap <expr> q QStart()
Enter