gvim自定义命令参数

时间:2014-02-17 19:42:06

标签: vim

我正在尝试创建一个自定义命令,使用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 :好吧,以上功能出错,然后在找不到任何内容时打开新标签

1 个答案:

答案 0 :(得分:1)

通过使用<f-args>和一个函数,Vim为你解析各个命令参数;这是一种正确的方法。

要处理来自:vimgrep的错误,您必须将execute l:searchCommandtry...catch括起来,例如:

try
    execute l:searchCommand
catch /^Vim\%((\a\+)\)\=:E/
    tabclose

    echohl ErrorMsg
    echomsg 'Search failed'
    echohl None
endtry

在搜索之前,我不明白为什么你需要:tabnew ;如果你之后(但在:cw之前)这样做,你不必在搜索失败的情况下进行清理。