多行视觉选择线不起作用的原因

时间:2015-10-13 17:28:18

标签: vim

我编写了两个简单的函数,并定义了一个映射来使用它们。我们的想法是进行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>

映射似乎适用于在一行内完成的选择。但是,当我进行多行选择时,它不起作用。

这是我在多行选择上运行此代码时得到的结果 enter image description here

我尝试对其进行调试,并用execute cmd替换s:PrjAck(pattern, ...)中的echo cmd行。这是我得到的输出 enter image description here

坦率地说,我不太清楚发生了什么。我对vim脚本有点新,所以对于解决这个问题的任何帮助都表示赞赏。

0 个答案:

没有答案