所以我在vim中浏览文件。我意识到我正在寻找的功能是另一个文件。所以我:! ack-grep "function tracking" ../
寻找它,我看到我需要检查文件" ../../ tracking / api / etc etc"一些非常长的文件名。我现在正在做的是尝试记住这个文件,键入fg
以返回到vim,然后:e"那个真正长文件名"。我想知道是否有更简单的方法吗?
例如,一旦我使用ack-grep查找我正在查找的内容,然后当我{{1}时,我可以从命令行执行vim -addtab <some file>
之类的操作吗?回到vim,文件将在一个标签中打开?
很棒,很多建议。我会像我一样全力以赴地尝试。然后,一旦我尝试了所有这些,我就会选择最适合我的方式。
所以这就是我确定的功能:
fg
执行搜索,并在新的vim选项卡中打开结果。然后我可以使用CtrlP打开最有趣的文件。感谢Merlin2011的灵感。
答案 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-O
和CTRL-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
)进行导航。
因此,如果要在新文件中打开结果,则有三个选项:
:llast
,:grep! "function tracking" ../**/*
打开quickfix列表,将光标放在第一个结果上,:copen
回车以在新窗口中打开结果ctrl-W
{{1将窗口移动到新选项卡。ctrl-W
,T
打开新标签:grep! "function tracking" ../**/*
以跳转到第一个结果。:tabnew
打开新标签:cfirst
以执行搜索并自动打开第一个结果。您可能会发现使用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
,因为它非常快。