vim脚本:退出Vim编辑器后如何阻止grep在终端上显示输出。

时间:2016-05-07 05:11:55

标签: vim grep

我在vim脚本中有以下命令,

function! SearchFname(fname)
execute "silent! grep!" a:fname "~/Index.files"
let l:file = getqflist()
for l:item in l:file
    execute 'vsplit' l:item["text"]
endfor
endfunction
command! -nargs=* Mysplit call SearchFname('<args>')

执行Mysplit后,如果我退出vim,那么grep结果将显示在终端/ bash窗口中。如何在后台运行grep命令以避免在bash窗口中看到结果? 所以我在滚动终端/重击窗口后甚至不应该看到它。我在函数grep之后使用getqflist()函数,所以希望解决方案不会影响getqflist()的使用。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以使用system()systemlist()将外部命令输出到变量中而不填充屏幕:

let myvar = system("grep foo somefile.txt")

但我不明白你为什么要使用grepgetqflist()。这是一个更简单的选择:

function! SearchFname(fname)
    let files = filter(readfile("~/Index.files"), 'v:value =~ a:fname')
    for file in files
        execute 'vsplit' file
    endfor
endfunction

---编辑---

如果您需要将匹配限制为文件名,请尝试使用此版本:

function! SearchFname(fname)
    let files = filter(readfile("~/Index.files"), 'fnamemodify(v:val, ":t") =~ a:fname')
    for file in files
        execute 'vsplit' file
    endfor
endfunction

如果您绝对想要使用globs而不是正确的Vim模式,请尝试以下版本:

function! SearchFname(fname)
    let pat = substitute(a:fname, "\*", ".*", "g")
    let files = filter(readfile("~/Index.files"), 'fnamemodify(v:val, ":t") =~ pat')
    for file in files
        execute 'vsplit' file
    endfor
endfunction