Vim打开一个通过grep找到的文件

时间:2014-06-03 23:32:00

标签: bash vim grep

所以我在vim中浏览文件。我意识到我正在寻找的功能是另一个文件。所以我:! ack-grep "function tracking" ../寻找它,我看到我需要检查文件" ../../ tracking / api / etc etc"一些非常长的文件名。我现在正在做的是尝试记住这个文件,键入fg以返回到vim,然后:e"那个真正长文件名"。我想知道是否有更简单的方法吗?

例如,一旦我使用ack-grep查找我正在查找的内容,然后当我{{1}时,我可以从命令行执行vim -addtab <some file>之类的操作吗?回到vim,文件将在一个标签中打开?

很棒,很多建议。我会像我一样全力以赴地尝试。然后,一旦我尝试了所有这些,我就会选择最适合我的方式。

所以这就是我确定的功能:

fg

执行搜索,并在新的vim选项卡中打开结果。然后我可以使用CtrlP打开最有趣的文件。感谢Merlin2011的灵感。

5 个答案:

答案 0 :(得分:5)

您可以:r ! ack-grep "function tracking" ../将输出直接拉入vim缓冲区,然后使用gf导航到光标下的文件。

如果您想在新标签页中打开文件,可以在正常模式下执行Control-W, gf

更新:如果您希望命令的输出显示在新选项卡中,您可以执行以下操作,这将打开一个新选项卡,然后立即将命令的输出拉入其中

:tabnew | r!ack-grep "function tracking" ../

答案 1 :(得分:2)

:vimgrep默认执行此操作!它是最棒的!事实上,它太酷了,你甚至可以使用:vim来调用它哈哈哈

e.g。搜索所有python文件&#34;功能跟踪&#34; (如果将vim工作目录保存在源代码的根文件夹中,则效果最佳)

:vim /function tracking/ **/*.py

^这将转到第一个搜索结果,然后打开带有搜索结果列表的quickfix窗口。我使用像nmap <silent> \` :QFix<CR>这样的绑定来快速切换它打开和关闭。见...... http://vim.wikia.com/wiki/Toggle_to_open_or_close_the_quickfix_window

-

但是,有一种更好的方式可以导航到该功能:使用CTRL-] 立即跳转到定义!结合CTRL-OCTRL-I(向前/向后跳),你有一个不可阻挡的移动文件 - 高效组合,这会让你忘记为什么你曾经使用IDE&#39; s = D

我用Google搜索了这个维基页面:http://vim.wikia.com/wiki/Browsing_programs_with_tags。您还要做的另一件事是下载Exuberant Ctags并在您的工作目录中构建一个标签文件:ctags -R ...然后您就完成了所有设置! (请注意,在Macs / BSD上,它有自己的ctags无法正常工作,你必须使用旺盛的ctags)

答案 2 :(得分:1)

Vim有:grep命令运行grep并将结果存储到quickfix列表中(您也可以使用:lgrep将它们加载到位置列表中)。 :grep也会跳转到第一个结果,但如果您不希望这样,可以使用:grep!将结果加载到quickfix列表中。

加载结果后,您可以使用:copen打开quickfix列表(或:lopen打开位置列表)并在结果之间导航,或使用:cfirst,{ {1}},:cnext:cprevious(或:clast:lnext:lfirst:lprevious)进行导航。

因此,如果要在新文件中打开结果,则有三个选项:

  1. :llast:grep! "function tracking" ../**/*打开quickfix列表,将光标放在第一个结果上,:copen回车以在新窗口中打开结果ctrl-W {{1将窗口移动到新选项卡。
  2. ctrl-WT打开新标签:grep! "function tracking" ../**/*以跳转到第一个结果。
  3. :tabnew打开新标签:cfirst以执行搜索并自动打开第一个结果。
  4. 您可能会发现使用quickfix列表进行导航而不是打开新标签会更容易。

    :tabnew默认使用:grep "function tracking" ../**/*,但您可以设置:grep选项以使其使用grep(您可能还需要设置grepprg识别输出)。您也可以使用ack-grep在不使用外部程序的情况下使用Vim的正则表达式进行搜索,但速度会慢一些。

答案 3 :(得分:0)

:exec 'tab split '.fnameescape(system('ack-grep "function tracking" ../'))

应该做的伎俩。 (把它变成一个函数!)

答案 4 :(得分:0)

我建议您使用ack plugin.,请注意,如果您安装了vim-dispatch,则可以异步搜索ack.vim(您需要在您的let g:ack_use_dispatch=1中写一下vimrc文件)。另外,我建议ag替换ack,因为它非常快。