Eclipse有自己的内置搜索功能,这些功能都很好。这不是我在这里问的问题。
我有一个工具以grep
的格式吐出文件位置:
path/to/file1.ext:34: found something
path/to/file2.ext:226: found something else
有些工具甚至会添加第二个数字,即列号。例如。 ack
使用--column
选项运行。
path/to/file1.ext:34:11: found something
path/to/file2.ext:226:16: found something else
我可以将这样一个列表“放入”eclipse中,这样我就可以点击第一行,然后在第34行第11行打开path/to/file1.ext
吗?
我是ack
,grep
和Perl one-liners的重度用户,因此在使用Eclipse时,我真的很想念该工具链作为附加选项。
(我做知道Eclipse中有其他好的可能性。)
答案 0 :(得分:0)
事实证明,如果打印到ecilpse控制台的行如下所示:
bla bla (File.java:34) bla bla
然后eclipse将其转换为链接并在单击时在第34行打开File.java
。完善。它会在类路径中选择第一个File.java
(这对我的目的来说很好)。
所以我写了一个简单的main()打开一个包含我所描述的输出的文件(现在硬编码为一个名为ack
的文件),并使用正则表达式将其转换为上述格式并打印跑出去的时候。不完美,但是我所追求的95%。
package my.package;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ShowAckGrep {
public static void main(String[] args) {
String curDir = System.getProperty("user.dir");
System.out.println("Current directory is: " + curDir);
Scanner scanner = null;
try {
File file = new File("ack");
scanner = new Scanner(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
return;
}
Pattern p = Pattern.compile("(?:.*/)?(\\w*?\\.java):(\\d+):\\s*(.*)");
while(scanner.hasNextLine()){
String line = scanner.nextLine();
// System.out.println("Line: " + line);
Matcher m = p.matcher(line);
if (! m.matches()) {
System.out.println("Ignoring: " + line);
continue;
}
System.out.println(
"(" + m.group(1) + ":" + m.group(2) + ") " + m.group(3)
);
}
scanner.close();
}
}