所以,這是我在嘗試編寫插件時碰到的一種奇怪的情況。它看起來像Vim中的一個bug,但我可能會錯過一些東西,所以我轉向了StackOverflow的智慧。Vimscript - 運行正常! qm運行正常後! @m
藉此功能:
fun! Test()
normal! q ; Stop recording a macro.
let @r='kkkkkkkkkkkkk'
normal! @r
normal! qm
endf
基本上,我停止錄製宏,嘗試運行一個寄存器的內容,然後開始重新錄製宏。
我打qm
,調用這個函數,做一些命令,然後調用函數。
我期待什麼
我想到「KKKKKK」要執行,然後記錄重新開始。
的 「KKKK」 運行發生了什麼,但記錄是不再次啓動。
我不明白爲什麼!
解決方法
下面的函數我想要做什麼,但它是一個黑客。我試圖瞭解我的問題的根本原因:
好玩!測試() 正常!讓@@ = = kkkkkkkkkkkkk' 執行「正常!」。 @r 正常! qm endf
我剛剛用一個直接執行寄存器內容的執行調用代替了寄存器的運行。基本上,我欺騙vim不認爲它正在運行一個註冊表。
注:爲什麼我想這個
這是一個插件。這個功能只是我能做的最小的展品問題。不值得進入爲什麼我想要這個 - 我需要的基本功能是從一個函數內運行一個寄存器,然後再次開始記錄。在實際使用情況中,我運行和記錄的寄存器是相同的,但似乎並未影響此問題。
那麼,有什麼想法?
首先,我不認識「q:call」語法,那是什麼?其次,功能現在做了很多其他的事情,邏輯上「qm」是功能的一部分。第三,函數實際上用「au CursorMoved:call MyFunction()」來調用,即每當光標移動時被調用。但在裏面,它有一個檢查,看看這個插件實際上是啓用的,只有插件被啓用才能完成「qm」。所以我不確定這是怎麼走的...... –
@EdanMaor 1.正常! q'應該這樣做。 2.如果它是一個CursorMoved事件,你不可能做很多類似的副作用(至少如果你按照幫助的建議),禁止從''完成(儘管完成記錄一個宏實際上*是*那種副作用)。你應該可以將它翻譯成''映射rhs功能。使用映射(可能是''之一)並用事件中的'feedkeys()'調用它的關鍵點是解決您指出的問題。 3.在這種情況下,只需返回一個空字符串。 –
ZyX
對不起,我還是有點不清楚問題到底是什麼。我也不知道feedkey,但從文檔中不理解它與「正常@r」的不同之處,其中寄存器「r」包含我要執行的鍵。 –