代码之家  ›  专栏  ›  技术社区  ›  Brian Carper

按列遍历搜索结果

  •  3
  • Brian Carper  · 技术社区  · 16 年前

    Vim(或插件)中是否有方法搜索一个术语并遍历搜索结果(如所示) n 在Vim中),按列而不是按行?如果我的文件是这样的:

    foo1  bar   bar
    baz   baz   foo3
    baz   baz   foo4
    foo2  bar   bar
    

    foo 我想按顺序1,2,3,4遍历结果。正常地 N

    例如,我希望在一个巨大的固定宽度数据文件或CSV文件中浏览搜索结果,其中的列表示字段。

    (我也会选择一种在Emacs中实现的方法。)

    2 回复  |  直到 16 年前
        1
  •  3
  •   Adam Bellaire    16 年前

    看到这个问题后,我决定尝试编写一个vim插件来处理它。这是我的第一个vim插件,所以可能非常糟糕。但是,对于您给出的示例,它确实有效。

    您可以从vim.org下载该插件: SearchCols.vim

    请注意,它还需要来自同一站点的multvals插件: multvals.vim

    :SearchCols <string> ,可用于搜索 <string> 在固定宽度的列中,以便搜索首先查找第一列,然后查找第二列等,而不是vim的标准逐行搜索。通过以下方式重复该命令: @: 然后 @@ 因为这是一个冒号命令。

    假设:

    • 假定文件的第一行已格式化,因此可以从中推断列宽。

    我能想到的明显改进是,搜索下一个项目比使用 @@ ,包括搜索突出显示(代码在那里,但由于使用 :match :match none 关闭),并消除对multvals.vim的依赖。

        2
  •  2
  •   yungchin    16 年前

    编辑:我刚刚找到了对表使用vim正则表达式的概述 here . 这比我的业余尝试要干净得多(尽管这也有效;):

    ^foo 将在搜索时搜索第一列 .*\ foo 将搜索第二列,然后 .*\ .*\ foo 将搜索第三个。

    但是,您可以使用录制功能自动执行此操作。在正常模式下准确键入以下内容:

    qa/.*\ .*\ foo
    /foo
    q
    

    (在这里,我使用了新行指示您应该按回车键)。

    这将在a寄存器下进行两次搜索(qa在a下开始记录,qb在b下开始记录,等等)。现在击中 @a