我编写了两个简单的函数,并定义了一个映射来使用它们。我们的想法是进行grep
类型搜索(使用ag
)进行当前视觉选择。
以下是代码:
function! s:VisualAg()
let temp = @"
normal! gvy
try
call <SID>PrjAck('"'.@".'"', g:proj_root)
catch
let @" = temp
echoerr v:exception
endtry
endfunction
function! s:PrjAck(pattern, ...)
" -S - smart case
" -U - ignore VCS ignore files
" -Q - Don't parse PATTERN as a regular expression
" -G - PATTERN Limit search to filenames matching PATTERN
let cmd = ":Ack -S -U -Q -G \"\\.(cpp\|h\|td)$\" ".a:pattern
for parameter in a:000
let cmd .= " ".parameter
endfor
execute cmd
xnoremap <leader>gw :call <SID>VisualAg()<cr>
映射似乎适用于在一行内完成的选择。但是,当我进行多行选择时,它不起作用。
我尝试对其进行调试,并用execute cmd
替换s:PrjAck(pattern, ...)
中的echo cmd
行。这是我得到的输出
坦率地说,我不太清楚发生了什么。我对vim脚本有点新,所以对于解决这个问题的任何帮助都表示赞赏。