Vim:在Grep给出的行上打开匹配文件?

Vim:在Grep给出的行上打开匹配文件?,vim,grep,Vim,Grep,我想在命令行上,在进行grepping之后,自动获得Vim中结果的位置。有这样的特点吗 要在Vim中按grep给出的行打开的文件: % grep --colour -n checkWordInFile * SearchToUser.java:170: public boolean checkWordInFile(String word, File file) { SearchToUser.java~:17: public boolean checkWordInFile(String word

我想在命令行上,在进行grepping之后,自动获得Vim中结果的位置。有这样的特点吗

要在Vim中按grep给出的行打开的文件:

% grep --colour -n checkWordInFile *
SearchToUser.java:170:  public boolean checkWordInFile(String word, File file) {
SearchToUser.java~:17:  public boolean checkWordInFile(String word, File file) {
SearchToUser.java~:41:          if(checkWordInFile(word, f))
看看“和”。基本上,vim提供以下用于搜索文件的命令:

:grep
:lgrep
:vimgrep
:lvimgrep

这些文章提供了有关其用法的更多信息。

在这个特定示例中:

vim SearchToUser.java +170
您可以这样做:

% vim "+/checkWordInFile" $(grep -l checkWordInFile *)
这将在vim命令行中列出与正则表达式匹配的所有文件。“+/…”选项将告诉vim从每个文件的开头开始搜索,直到找到与正则表达式匹配的第一行

更正:

% grep --colour -n checkWordInFile *
SearchToUser.java:170:  public boolean checkWordInFile(String word, File file) {
SearchToUser.java~:17:  public boolean checkWordInFile(String word, File file) {
SearchToUser.java~:41:          if(checkWordInFile(word, f))
+/。。。选项将仅在第一个文件中搜索正则表达式。要搜索您需要的每个文件,请执行以下操作:

% vim "-c bufdo /checkWordInFile" $(grep -l checkWordInFile *)

如果这是您经常需要做的事情,那么您可以编写一个bash函数,这样您只需要指定一次正则表达式(假设正则表达式对grep和vim都有效)。

我强烈建议使用ack.vim而不是grep来实现此功能


如果将
grep
的输出导入
vim

% grep -n checkWordInFile * | vim -
您可以将光标放在文件名上,然后点击
gF
跳转到该文件中由该行grep输出引用的行<代码>^WF将在新窗口中打开它

从vim内部,您可以对其执行相同的操作

:tabedit
:r !grep -n checkWordInFile *
这相当于但不如

:lgrep checkWordInFile *
:lopen
这将打开superfantastic quickfix窗口,以便您可以方便地浏览搜索结果

您也可以通过使用vim的原生grep获得较慢但在某些方面更灵活的结果:

:lvimgrep checkWordInFile *
:lopen

这一个使用vim REs和路径(例如允许**)。它可能需要2-4倍的时间才能运行(可能更多),但您可以使用fancy
\(\)\@我想这就是您想要的:

当您打开一个file:line时,例如,当处理和粘贴来自编译器(或grep输出)的错误时,vim尝试打开一个名称中带有冒号的文件。如果冒号后面的内容是一个数字,并且在冒号之前存在一个名为specified的文件,那么在你的plugins文件夹中使用这个小脚本,vim将打开这个文件并将你带到你想要的行


这绝对是我想要的。

您可能想为这些功能创建函数。:)

顺序
vim
调用(控制台)
grep-rn“实现”应用程序|#或任何您喜欢的(带“-n”)应用程序
awk'{
拆分($0,a,“:”);#拆分日期:

打印“如果您使用git,当您仅在git跟踪的文件中搜索时,结果通常更有意义。要在vim中的给定行(即搜索结果
git grep
)打开文件,则需要


将在缓冲区中为您提供列表,您可以选择从git grep结果中打开文件。

快速修复缓冲区(
:copen
)有什么问题?谢谢@BenjaminBannier如何使用
:copen
git grep
?@PaulRougieux大体上看,但是对于
git grep
,我个人会同意(甚至对于我可能会使用的其他shell命令):lp,:lnf在快速修复列表中浏览。如果:grep,则使用:cn和:cp。btw:lgrep和grep看不到任何区别,而不是不同的移动命令。:lopen for:lgrep和:copen for:grep.lgrep为当前选项卡创建一个单独的列表。否则,如果您从不同选项卡执行
:grep
s操作,则最终将删除相同的全局列表。至少我这么认为;我通常使用
lvimgrep
r!grep…
,只是为了完整起见在这里添加了
:lgrep
。我想
*open
实际上不在问题的范围之内,这正是我通常滚动的方式。错误,实际上它是针对当前窗口,而不是选项卡。将光标放在fi上lename和hit
gF
-->对我不起作用。是否有任何配置可以启用此功能?我看不到使用这些命令的结果。是否有任何特定的vim版本?我正在使用VIM8