【问题标题】:How to shorten path names in grep buffer?如何缩短 grep 缓冲区中的路径名?
【发布时间】:2023-03-14 15:18:02
【问题描述】:

是否可以缩短 grep 结果缓冲区中的路径?默认情况下,Emacs 中的每一行 grep 结果如下所示:

/home/pawel/tmp/avro-src-1.5.4-fixed/lang/c/src/datum.c:107:int avro_string_set(avro_datum_t datum, const char *p)

它占用大量空间,看起来凌乱且不可读,尤其是如果旁边还有另一个窗口。

我只想查看文件名或部分路径 - 只要它们在 grep 缓冲区中是唯一的,例如:

datum.c:107:int avro_string_set(avro_datum_t datum, const char *p)

/home/(...)/src/datum.c:107:int avro_string_set(avro_datum_t datum, const char *p)

我猜 emacs 需要在内部知道完整路径,所以它只显示 grep 结果而不是使用 'grep' 参数。这该怎么做? grep 缓冲区的隐藏显示模式定义是否可以解决问题,或者有更简单的方法吗?

谢谢。

【问题讨论】:

    标签: emacs


    【解决方案1】:

    我为你做了一个:scf-mode。它作为次要模式工作,因此当您关闭它时可以恢复原始文件名。

    有关安装说明,请参阅文件头。

    【讨论】:

      【解决方案2】:

      如果您了解 Emacs lisp,那么实现它可能并不难。您只需找到路径名的公共部分,将其删除,将公共部分存储在局部变量中,然后在打开 grep 结果时从存储的部分中组装完整的路径名。

      这是个好主意,它会提高 grep-find 输出的可读性,所以如果你在这里没有得到答案,那么我建议发布问题to emacs help。那里有专家用户,如果他们认为这个想法有价值,他们可以快速制定解决方案。

      【讨论】:

        【解决方案3】:

        您使用的是什么版本的 emacs?当我在我的 emacs (23.3.1) 上运行 grep 时,我没有路径,例如:

        file1:25:some result
        file2:26:some other result
        

        另外,当您在 emacs 之外运行相同的 grep 命令时,您的机器上会发生什么?

        【讨论】:

        • 好的,我想我的问题不是很精确。我的 emacs 版本是 23.2.1。如果我只使用 emacs 'grep' 函数并仅在当前工作目录中运行它,那么我只会得到文件名(如您的示例中所示) - 因为这些是 grep 命令返回的路径。问题仅在使用具有特定路径的“grep”(例如 grep -nH -e set /home/pawel/tmp)或通过“find-grep”时。
        【解决方案4】:

        在运行 M-x grep 之前只需 M-x cd /home/pawel/tmp/avro-src-1.5.4-fixed/lang/c/src/

        如果命中的文件不在当前目录 (default-directory) 中,则仅获取 grep 命中的目录部分。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-07-28
          • 1970-01-01
          • 2020-10-08
          • 1970-01-01
          • 1970-01-01
          • 2012-11-14
          • 1970-01-01
          相关资源
          最近更新 更多