Vim 多行视觉选择行不';行不通

Vim 多行视觉选择行不';行不通,vim,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!

我编写了两个简单的函数,并定义了使用它们的映射。想法是对当前的视觉选择执行
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>
函数!s:VisualAg()
让温度=@“
正常!gvy
尝试
调用PrjAck('''.@''',g:proj_root)
接住
设@“=temp
第五章:例外
末日
端功能
函数!s:PrjAck(模式,…)
“-S-智能机箱
“-U-忽略VCS忽略文件
“-Q-不要将模式解析为正则表达式
“-G-模式限制搜索到匹配模式的文件名
let cmd=“:Ack-S-U-Q-G\”\(cpp\\|h\|td)$\”。a:模式
对于a:000中的参数
设cmd.=“”.参数
外循环
执行命令
xnoremap gw:调用VisualAg()
映射似乎适用于在一行内进行的选择。但是,当我进行多行选择时,它不起作用

下面是我在多行选择上运行此代码时得到的结果

我试着调试它,并将
s:PrjAck(pattern,…)
中的
executecmd
行替换为
echo cmd


坦白地说,我不太清楚到底发生了什么。我对vim脚本有点陌生,因此非常感谢您对解决问题的任何帮助。

您是否尝试在shell中手动执行生成的命令?@Romaill我不知道为什么我没有这样做:D愚蠢的我,这应该是我的第一步。谢谢!!!交叉发布:@SatoKatsura不是任何more.re-write
Ack.vim
:)它是将换行符转换为NUL字符的vim的错误功能和未准备好进行这种输入的
Ack.vim
的错误功能的组合。