如何在quickfix窗口中自动更新vimgrep搜索结果?

时间:2018-05-14 15:23:24

标签: vim

如果因更改文件而自动更新文件后,如何在quickfix窗口中自动更新搜索vimgrep结果?

我使用:vim / pattern /%来搜索并将结果放入quickfix窗口。

1 个答案:

答案 0 :(得分:1)

您始终可以在命令行中使用前缀<up>执行:vimgrep,以便更轻松地搜索历史记录。您可能还想查看q:并使用? / /来搜索重新执行的命令。

假设正确设置了quickfix标题,您可以使用以下命令:

:execute get(getqflist({'title':1}), 'title')

但是我不确定这适用于所有:grep / :make命令。你还需要一个较新的Vim版本来获得Quckfix列表标题(我认为是Vim 8+)。

如果您发现自己经常这样做,可能需要绑定映射或命令。

command! -nargs=0 -bar QFRefresh execute get(getqflist({'title':1}), 'title')

现在如何自动添加?一旦检测到文件更改,我们就可以使用FileChangedShellPost autocmd来运行我们的QFRefresh命令。将以下内容添加到vimrc文件中:

augroup QFRefresh
  autocmd!
  autocmd FileChangedShellPost * if get(b:, 'qfrefresh_auto', 0) | QFRefresh | endif
augroup END

command! -nargs=0 -bar QFAutoRefreshToggle let b:qfrefresh_auto = !get(b:, 'qfrefresh_auto', 0) | echo b:qfrefresh_auto ? 'Auto Refresh' : 'No Auto Refresh'

现在,您可以使用:QFAutoRefreshToggle切换刷新文件。

注意:如前所述QFRefresh使用quickfix的标题来获取quickfix命令。如果未正确设置标题,则刷新可能无法正常工作。此外,我不确定Vim在触发FileChangedShellPost时有什么保证。您可以通过:checktime命令强制检查。

如需更多帮助,请参阅:

:h getqflist()
:h :execute
:h :get
:h q:
:h cmdwin
:h c_Up
:h FileChangedShellPost
:h :checktime