我已经编写了一个插件,可以在搜索命令后打印出一些匹配项。以下是此功能的最简单的工作示例:
map <silent> n n:call Test()<CR>
function! Test()
let output=''
redir => output
%s///n
redir END
echo str2nr(matchstr(output, '\d\+'))
endfunction
然而,我观察到一个奇怪的效果 - 当Vim无法跟上事件处理时(例如文件很大,并且保持n
键),它会中断我的函数的%s///n
命令在内部使用。也就是说,output
变量为空,Test()
打印出0
。如果我调用:normal n
,也会出现同样的情况。
是否记录了此行为?是否至少可以检测到中断发生了?
编辑:要获得干净的代表,请使用vim -u test_vimrc
文件运行test_vimrc
,如下所示:
set nocompatible
set lazyredraw
map <silent> n n:call Test()<CR>
function! Test()
let output=''
redir => output
%s///n
redir END
echo str2nr(matchstr(output, '\d\+'))
endfunction
然后打开任何文件,搜索现有文本,然后使用:normal n
。 0将被打印出来。没有lazyredraw
,这不会发生;也许这个错误与它有关。