Vim在插件中中断Ex命令

时间:2015-11-08 23:55:40

标签: vim vim-plugin

我已经编写了一个插件,可以在搜索命令后打印出一些匹配项。以下是此功能的最简单的工作示例:

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,这不会发生;也许这个错误与它有关。

0 个答案:

没有答案