我正在尝试创建一个自定义命令,使用vimgrep搜索给定文件模式中的模式,如
:command -nargs=* Find :tabnew <bar> vimgrep /<arg1>/gj <arg2> <bar> cw <cr>
如何访问参数arg1和arg2?
编辑1 :我提出了以下解决方案
command! -nargs=* Find call VimFind(<f-args>)
function! VimFind(searchPattern,filePattern,...)
let searchCommand = 'vimgrep /'.a:searchPattern.'/gj '.a:filePattern.'|cw'
if a:0 > 0 && a:1 == 'n'
let searchCommand = 'tabnew|'.l:searchCommand
endif
execute l:searchCommand
endfunction
有更简洁的方法吗?
编辑2 :好吧,以上功能出错,然后在找不到任何内容时打开新标签
答案 0 :(得分:1)
通过使用<f-args>
和一个函数,Vim为你解析各个命令参数;这是一种正确的方法。
要处理来自:vimgrep
的错误,您必须将execute l:searchCommand
与try...catch
括起来,例如:
try
execute l:searchCommand
catch /^Vim\%((\a\+)\)\=:E/
tabclose
echohl ErrorMsg
echomsg 'Search failed'
echohl None
endtry
在搜索之前,我不明白为什么你需要:tabnew
;如果你之后(但在:cw
之前)这样做,你不必在搜索失败的情况下进行清理。