如何缩短grep缓冲区中的路径名?

时间:2011-09-30 10:20:01

标签: emacs

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

/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缓冲区的隐藏显示模式定义是否可以解决问题,或者有更简单的方法吗?

感谢。

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

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

另外,当你在emacs之外运行相同的grep命令时,你的盒子会发生什么?

答案 3 :(得分:0)

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

如果点击的文件不在当前目录(grep)中,您只能获得default-directory点击的目录部分。