我在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()
的使用。
任何帮助都将不胜感激。
答案 0 :(得分:2)
您可以使用system()
或systemlist()
将外部命令输出到变量中而不填充屏幕:
let myvar = system("grep foo somefile.txt")
但我不明白你为什么要使用grep
和getqflist()
。这是一个更简单的选择:
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