在视觉选择上使用Ack.vim

时间:2015-01-18 15:05:17

标签: vim ack

目前我在~/.vimrc

中有此映射
noremap <Leader>a :Ack <cword><cr>

这使我能够在光标下搜索一个单词。

我想搜索当前的视觉选择,因为有时单词是不够的。

有没有办法可以将视觉选择发送到ack.vim

3 个答案:

答案 0 :(得分:8)

您可以编写一个视觉模式地图,用于拉出突出显示的文本,然后将其逐字粘贴(正确转义)到vim命令行:

vnoremap <Leader>a y:Ack <C-r>=fnameescape(@")<CR><CR>

此解决方案使用<C-r>=技巧,允许您输入一种二级命令行,允许您输入任何vimscript表达式,然后对其进行求值,并将结果字符串化并粘贴到光标所在的(原始的,第一级)命令行。

这种方法的一个小缺点是它会占用你可能不想要的未命名寄存器。

答案 1 :(得分:1)

在撰写本文时,这是Ack的默认行为。

只需执行以下操作:

  1. 正常模式中将光标移动到任何单词上(例如,按Esc按钮进入正常模式,您知道...)< / li>
  2. 键入:Ack,且不带参数
  3. 它将在光标下搜索单词

通常,我在文件搜索过程中选择文本(例如,将光标放在word内并重复输入* *),类型为:Ack,以在项目的其他文件中查找该作品。

答案 2 :(得分:0)

虽然bgoldst的答案应该可以正常工作,但你也可以考虑我的ack.vim:https://github.com/AndrewRadev/ack.vim

它以可视模式提供了一个有效的:Ack命令,以及我在README顶部总结的一些其他内容。