给定grep -n的结果,如何在该特定行中打开vim?(仅使用键盘)


9

当我运行grep "keyword" -n并获得以下结果列表时:

a/b/c:10:    keyword
a/b/c:70:    keyword
a/b/d:50:    keyword

如何在找到的行中打开一个文件(例如列表中的第二个)?

现在,我仅使用鼠标复制输出,然后复制输出vim,然后添加+复制的行号。(这意味着我vim a/b/c +70使用鼠标复制来获取文件名,并使用另一个鼠标复制来获取行号(或者当它足够短时,我只是用手复制它))

有没有办法使用键盘快捷键来做到这一点?


您可以尝试类似的操作:echo a/b/c:70: keyword | awk '{print $1}' | sed 's,:$,,' | sed 's,:, +,' | xargs vim && reset
Arkadiusz Drabczyk '18年

2
另外,如果您想更有效地使用Vim,请访问专用的Vi和Vim Stack Exchange网站。
muru

Answers:


14

两件事情:

  1. Vim支持grep

    如果打开Vim,然后执行:grep keyword ...,Vim 使用结果填充快速修复列表,并跳至第一个文件。然后,您可以使用(和其他命令)跳转到第n个quickfix条目:cc n

  2. 您可以使用grep的输出填充上述quickfix列表:

    vim -q <(grep -n keyword ...)
    

    然后使用上面提到的quickfix导航命令。

这两种方法都比手动处理grep的输出更简单。

作为(2)的替代方法,如果您认为不一定要在以下情况下打开Vim,则可以将grep的输出保存到文件中并改用该文件:

grep ... | tee log
vim -q log

尝试对git状态使用相同的方法,但无济于事:(-vim -q <(git status | grep修改)
CIsForCookies

3
@CIsForCookies格式将与grep -n<filename>:<line>: ...)不同。我为Git 使用了逃犯插件,然后就可以了:Gstatus,移至所需文件并按Enter。
muru

顺便说一句,我编辑〜/ .bashrc grep alias始终使用颜色,由于某种原因,它中断了-q >()选择...
CIsForCookies

2

如果@muru回答不支持grep,您可以这样做:

:cexpr system("grep -n keyword")

例如,它可以与另一个命令一起使用git grep

另外,您可以在缓冲区中打开输出并在其上使用“ cbuffer”。

有关此信息,请参见手册中的quickfix部分。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.