首页 > 解决方案 > VIM 中的 grep 在 vi​​m 中显示结果之前打开带有结果的终端

问题描述

我在终端中运行 vim,每当我使用 grep 搜索某些东西时,比如

:grep search_for filename

它关闭 vim,在终端中显示结果并显示“按 Enter 继续”消息,并且只有在我按 Enter 后,它才会在 vim 中显示结果。如何防止此终端打开并直接在vim中显示结果?

标签: vimgrep

解决方案


一种方法是执行以下操作:

function! Grep(...)
    return system(join([&grepprg] + [a:1] + [expandcmd(join(a:000[1:-1], ' '))], ' '))
endfunction

command! -nargs=+ -complete=file_in_path -bar Grep  cgetexpr Grep(<f-args>)
command! -nargs=+ -complete=file_in_path -bar LGrep lgetexpr Grep(<f-args>)

cnoreabbrev <expr> grep  (getcmdtype() ==# ':' && getcmdline() ==# 'grep')  ? 'Grep'  : 'grep'
cnoreabbrev <expr> lgrep (getcmdtype() ==# ':' && getcmdline() ==# 'lgrep') ? 'LGrep' : 'lgrep'

augroup quickfix
    autocmd!
    autocmd QuickFixCmdPost cgetexpr cwindow
    autocmd QuickFixCmdPost lgetexpr lwindow
augroup END

这将使您:grep foo无需“按 Enter”提示即可输入。我建议您也阅读文章/要点


推荐阅读