在vim中使用checktime和autocmd,没有延迟

时间:2014-02-28 08:52:24

标签: vim

来自vimdoc:

:checkt[ime]            Check if any buffers were changed outside of Vim.
                        This checks and warns you if you would end up with two
                        versions of a file.
                        If this is called from an autocommand, a ":global"
                        command or is not typed the actual check is postponed
                        until a moment the side effects (reloading the file)
                        would be harmless.

如何在没有延迟的情况下从autocmd中使用它?

修改

我很乐意使用vim和IDE来编辑同一个文件,我想更改其中一个文件以自动加载到另一个文件中。

这是一个可能的解决方案:

autocmd CursorHold * checktime
function! Timer()
  call feedkeys("f\e")
  " K_IGNORE keycode does not work after version 7.2.025)
  " there are numerous other keysequences that you can use
endfunction

但由于检查时间会延迟,效果可能不会令人满意。

2 个答案:

答案 0 :(得分:1)

正如所引用的文档所解释的那样,你不能,并且有充分的理由(重新加载可能触发其他autocmds,更改可能会混淆以下命令)。

要解决此问题,您必须保留当前:autocmd,并以某种方式重新触发您的代码。一个想法是:autocmd BufRead,如果缓冲区实际重新加载,它将触发。如果您需要始终重新触发,可以使用:autocmd CursorHold(可能暂时减少'updatetime'),或者call feedkeys(":call Stage2()\<CR>")可能值得一试。

答案 1 :(得分:0)

我最终这样做了:

autocmd CursorHold * call Timer()
function! Timer()
  checktime
  call feedkeys("f\e")
endfunction

效果很好。