在视觉选择上使用Ack.vim

在视觉选择上使用Ack.vim,vim,ack,Vim,Ack,目前我的~/.vimrc noremap <Leader>a :Ack <cword><cr> noremap a:Ack 这使我能够在光标下搜索单词 我想搜索当前的视觉选择,因为有时文字是不够的 是否有一种方法可以将视觉选择发送到ack.vim?您可以编写一个视觉模式映射,将突出显示的文本拖动,然后将其逐字粘贴(正确转义)到vim命令行: vnoremap <Leader>a y:Ack <C-r>=fnameescape(@")

目前我的
~/.vimrc

noremap <Leader>a :Ack <cword><cr>
noremap a:Ack
这使我能够在光标下搜索单词

我想搜索当前的视觉选择,因为有时文字是不够的


是否有一种方法可以将视觉选择发送到
ack.vim

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

vnoremap <Leader>a y:Ack <C-r>=fnameescape(@")<CR><CR>
vnoremap a y:Ack=fnameescape(@)
这个解决方案使用了
=
技巧,允许您输入一种第二级命令行,它允许您输入任何vimscript表达式,然后对其求值,结果被字符串化并粘贴到光标所在的(原始的第一级)命令行上


这个方法的一个小小缺点是它命令未命名的登记簿,你可能不想要。

< P>而BGOLDST的答案应该很好,你也可以考虑我的叉子。
它在视觉模式下带有一个工作的
:Ack
命令,以及我在自述文件顶部总结的一些其他额外功能。

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

只需执行以下操作:

  • 在正常模式下将光标移动到任何单词上(例如,点击
    Esc
    按钮进入正常模式,您知道…)
  • 键入
    :带有无参数的Ack
  • 它将搜索光标下的单词

  • 通常我在搜索文件时选择文本(例如,将光标放在word中并重复键入
    *
    ),键入
    :Ack
    ,以便在项目的其他文件中查找该单词。

    一个小调整:与其使用
    vnoremap
    ,不如使用
    xnoremap
    。前者还可以在“选择”中映射击键“模式,通常由代码段插件使用。阅读
    :帮助mapmode-x
    了解详细信息。@AndrewRadev,好主意,尽管所写的映射不适用于选择模式,因为前导的
    y
    将覆盖选择并启动插入模式。我想可以通过为选择模式(smap)编写一个单独的映射,并使用
    gv
    预先设置映射参数,从而在不造成任何损坏的情况下退出选择模式,然后进入(常规)视觉模式,我的意思是,
    vnoremap
    也会在选择模式下映射击键,您可能不希望这样
    xnoremap
    仅在视觉模式下映射它们。有点反直觉:)。啊哈,我刚刚阅读了vim帮助,你说得对!当我读到你的评论时,我以为你说“前者”是指“后者”,但那是我的错误。有趣的是,你基本上说出了我在回答中试图表达的观点。老实说,“后”和“前”是英语中最令人困惑的词。直到今天,我还不知道是谁编的。是的,准确地说,这种行为与视觉选择或搜索无关。只需将光标放在正常模式下的任何单词上,然后使用
    :Ack
    ,它就会搜索光标下的单词。@Pierre AdrienBuisson谢谢,我更新了答案并添加了您的贡献。2015年的fork和原始Ack.vim仍然没有视觉模式。