如何在 grep 的时候,选择打开文件?

2019-01-31 10:23:37 +08:00
 ChristopherWu

目前这是我纯命令行工作的唯一不太爽的地方,grep 完后,不能纯键盘操作,需要手动复制文件名,然后 vim 打开编辑。

谢谢各位指点分享。

2505 次点击
所在节点    程序员
19 条回复
quinoa42
2019-01-31 10:36:34 +08:00
通过 xargs 把找到的文件名传给 vim
SamsonWang
2019-01-31 10:37:29 +08:00
grep 和 awk 组合使用能够取得文件名,再通过管道传给 vi ?

我平常用 emacs,可以直接在 emacs 里调用 grep,不知道 vi 有没有类似的功能。
quinoa42
2019-01-31 10:38:20 +08:00
直接用 command substitution 也是可以的
quinoa42
2019-01-31 10:39:05 +08:00
另外如果你用 tmux 的话,就可以纯键盘复制文字了 233
scriptB0y
2019-01-31 10:42:07 +08:00
ChristopherWu
2019-01-31 10:53:22 +08:00
@quinoa42 xargs 这个是没有实用意义的吧。。因为你 grep 就不可能准确 grep 到一个文件
Yggdroot
2019-01-31 10:54:24 +08:00
vim `cmd | grep xxx`
quinoa42
2019-01-31 10:54:48 +08:00
@ChristopherWu 但可以都打开呀(
不过要手动选的话就用楼上上的 fpp 或者 fzf/skim
ChristopherWu
2019-01-31 10:55:13 +08:00
@scriptB0y fpp 似乎就是我想要的~
AsaMyth
2019-01-31 10:55:44 +08:00
一般开俩 terminal,一个 grep,一个 vim🤐
ChristopherWu
2019-01-31 10:55:59 +08:00
@quinoa42 因为我用的语言跳转太弱了,迫于特殊架构,不能处理简化的模块。所以我只能 grep 来做跳转,所以大量文件这个是木有用的 - = -
quinoa42
2019-01-31 10:57:51 +08:00
@ChristopherWu 如果你经常需要这么做的话可以给 vim 装 denite/leaderF 等等 plugin 其中一个,方便很多
ChristopherWu
2019-01-31 10:57:53 +08:00
@AsaMyth grep 了后,你还是要复制文件名或者手动打。fpp 是最优解~
trait
2019-01-31 10:59:24 +08:00
vim $(grep -l dididada)
pkookp8
2019-01-31 11:10:33 +08:00
vim
:grep! pattern path parameter
回车回车
pkookp8
2019-01-31 11:11:38 +08:00
@pkookp8 少了一步
:copen
pkookp8
2019-01-31 11:39:41 +08:00
function! UseGrepFind()
call inputsave()
let p = input('dir search.Enter pattern:')
let searchdir = input('dir:')
if searchdir == ""
let searchdir = "./src"
endif
call inputrestore()
execute 'grep! -nrE "'.p.'" "'.searchdir.'"'
execute 'copen'
endfunction
nnoremap <F7> :call UseGrepFind()<CR><CR>

自己看着改一下吧
pkookp8
2019-01-31 11:43:51 +08:00
@pkookp8 手机贴的,没格式了,缩进一下吧
f7 输路径,不输默认./src
然后输字符串,可以正则
需要全词匹配 grep -w 就行,忽略大小写-i,但我想不到有什么好的交互体验的方法就没加了
shm7
2019-01-31 19:02:54 +08:00
管道吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/532064

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX