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

hhh*_*hhh 11 vim grep

我希望在命令行上进行grepping后自动获取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))
Run Code Online (Sandbox Code Playgroud)

int*_*ted 27

如果管道从输出grepvim

% grep -n checkWordInFile * | vim -
Run Code Online (Sandbox Code Playgroud)

你可以将光标放在文件名上,然后点击gF跳转到该文件中由该行grep输出引用的行. ^WF将在新窗口中打开它.

从vim内部你可以做同样的事情

:tabedit
:r !grep -n checkWordInFile *
Run Code Online (Sandbox Code Playgroud)

这相当于但不太方便

:lgrep checkWordInFile *
:lopen
Run Code Online (Sandbox Code Playgroud)

它会打开超级快速修复窗口,以便您方便地浏览搜索结果.

您可以通过使用vim的本机grep来获得更慢但在某些方面更灵活的结果:

:lvimgrep checkWordInFile *
:lopen
Run Code Online (Sandbox Code Playgroud)

这个使用vim RE和路径(例如允许**).跑步可能需要2-4倍(可能更多),但你可以使用花式\(\)\@<=和羽毛.


Boz*_*sov 7

看看" Grep搜索工具与Vim集成 "和" 在Vim中查找文件 ".基本上vim提供了这些搜索文件的命令:

:grep
:lgrep
:vimgrep
:lvimgrep
Run Code Online (Sandbox Code Playgroud)

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


Dav*_*rby 5

你可以这样做:

% vim "+/checkWordInFile" $(grep -l checkWordInFile *)
Run Code Online (Sandbox Code Playgroud)

这将在vim命令行中放入与正则表达式匹配的所有文件的列表."+/..."选项将告诉vim从每个文件的开头搜索,直到找到与正则表达式匹配的第一行.

更正:

+/...选项仅搜索正则表达式的第一个文件.要在每个文件中搜索,您需要:

% vim "-c bufdo /checkWordInFile" $(grep -l checkWordInFile *)
Run Code Online (Sandbox Code Playgroud)

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


Mik*_*Kay 5

我认为这就是你要找的:

http://www.vim.org/scripts/script.php?script_id=2184

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

这绝对是我要找的。