【问题标题】::vimgrep and the quickfix window in MacVim:vimgrep 和 MacVim 中的 quickfix 窗口
【发布时间】:2013-04-27 04:45:48
【问题描述】:

我正在从 Textmate 转换为 MacVim,并且正在努力复制 Textmate 的“在项目中查找”功能。我可以用:vimgrep /foo/g **/*.py 很好地搜索并用:cope 打开快速修复窗口。从那里我可以毫无问题地导航到并打开相应的匹配项。

我的问题是,如果我打开的匹配项不正确,我就无法找到一种方法来恢复搜索结果窗口,而无需再次运行整个搜索。我可以再次使用:cope 打开 quickfox 窗口,但它只包含 1 个结果,即我刚刚打开的文件。

搜索多个文件和管理结果的一般工作流程是什么?

【问题讨论】:

  • 我的偏好是在单独的 shell 中使用 grep。
  • 即使在您跳转到其中一个文件之后,quickfix 窗口也应该可以使用。事实上,我找不到在不重新启动搜索的情况下清除缓冲区的方法。
  • @nimrodm 很有趣。我实际上使用的是最新的 MacVim,但我在 Snow Leopard 的 Terminal Vim 上试过,你说得对,它可以工作。在 MacVim 中,当我打开文件时,quickfix 列表窗口会被清除。我已经编辑了问题,说我正在使用 MacVim。
  • @Tim:我在这里使用 MacVim 7.3(2010 年 8 月 15 日发布),它似乎可以在终端中找到并使用 gui 版本。也许你的 vimrc 文件中有一些东西把事情搞砸了?删除它并重试如何。
  • @nimrodm 你是正确的!出于某种原因,在我的 .vimrc 文件中包含 filetype plugin indent on 会导致此文件中断。我会进一步挖掘以了解发生了什么,但绝对是这样。谢谢!

标签: vim grep macvim


【解决方案1】:

我在使用 quickfix 时遇到了同样的问题,在注意到您关于 filetype plugin indent on 导致 quickfix 窗口立即清除的评论后,将其跟踪到一个插件:jslint,它在每次打开 javascript 文件时设置 quickfix 窗口或写给。您可能为某些打开的文件类型启用了类似的插件。

【讨论】:

  • 我使用 Syntastic 可以使用位置列表而不是快速修复列表:let g:syntastic_auto_loc_list=1
【解决方案2】:

我通常不使用 vimgrep,我使用两个插件之一: Ackgrep。使用这两种方法中的一种可能会更好。

【讨论】:

    【解决方案3】:

    您可以使用:cnext:cprevious 在快速修复列表中移动。我发现来自unimpaired 的映射非常有用,所以]q 用于:cnext[q 用于:cprevious。 如果您只想要映射而不是整个未损坏的插件,请将以下内容放入您的 .vimrc 文件中。

    nnoremap ]q :cnext<cr>
    nnoremap [q :cprevious<cr>
    

    【讨论】:

    • 谢谢,现在可以了。最初的问题是当我打开第一个文件时列表消失了。
    【解决方案4】:

    如果我理解正确,您想搜索可以在项目的许多文件中的特定字符串,然后对该字符串进行一些修改,然后返回原始窗口并(如果需要)执行相同操作重新处理?

    如果不是这样,请忽略我的帖子,否则使用 cscope。

    1. 使用以下命令构建 cscope 数据库: cscope -Rb 在您的项目根目录中。这将创建cscope.out 文件

    2. 打开 vim 并使用以下命令添加 cscope 数据库:

      :cs 添加

    3. 找到字符串为:

      :cs fs

    4. 从命令 3 结果转到您希望的文件并进行所需的修改。

    5. 再次使用第 3 步,或按 ctrl + ^ 返回原始文件。

    【讨论】:

    • 感谢 Vikram.exe。这不是我想要的。我只想在所有文件中搜索一个字符串,获取匹配列表,然后通过返回原始结果列表来说服这些文件。
    【解决方案5】:

    dreel 的建议可能是一个修复。我遇到了 quickfix 内容消失的同样问题,结果证明它是由 pyflakes.vim linter 引起的。 linter 试图为 lint 错误创建 quickfix 条目,但它只是具有从搜索中清除 quickfix 内容的效果。我为禁用 quickfix 支持的 linter 插件设置了一个选项,它解决了问题。

    【讨论】:

      【解决方案6】:

      如果我没记错的话,问题是 Vim 脚本/插件以某种方式干扰了快速修复窗口的正常操作。我意识到,在处理此类 Vim 问题时,最好将 Vim 剥离到最基本的部分,看看问题是否仍然存在。

      【讨论】:

        【解决方案7】:

        :colder:cnewer 命令可用于导航到以前/较新的快速修复(错误)列表。

        来自 vim 帮助:

        :更冷

        :col[der] [count]   Go to older error list.  When [count] is given, do
                    this [count] times.  When already at the oldest error
                    list, an error message is given.
        

        :更新

        :cnew[er] [count]   Go to newer error list.  When [count] is given, do
                    this [count] times.  When already at the newest error
                    list, an error message is given.
        

        【讨论】:

          猜你喜欢
          • 2011-01-15
          • 1970-01-01
          • 1970-01-01
          • 2011-03-29
          • 1970-01-01
          • 2012-06-12
          • 2011-10-04
          • 1970-01-01
          • 2012-05-25
          相关资源
          最近更新 更多