在vim中使用:grep运行grep搜索后,我得到了一个文件列表。有没有办法选择其中一个文件并在该特定行的新标签中打开它?
答案 0 :(得分:12)
为了完整性,以及:copen
命令,还有:cw
,只有在有条目时才会打开“quickfix”窗口(所以如果你的grep没有结果,它就赢了'出现)。
我认为在新标签中打开文件的最简单方法(无需定义映射)将是:
:cw " Open the quickfix window
Ctrl-W T " Switch the window into a new tab
<ENTER> " Open the file/line
或者,您可以这样做:
:cw " Open the quick fix window
Ctrl-W <ENTER> " Open the file/line in a new window
Ctrl-W T " Move the new window to a new tab
如果你想在默认情况下这样做,你可以使用BufEnter
和BufLeave
autocmds在进入和离开quickfix窗口时创建和删除映射;然而,这可能并非无足轻重。
:help :cw
:help :copen
:help quickfix
答案 1 :(得分:11)
为了达到你想要的效果,你必须在调用grep:
后打开quickfix / error窗口:copen
我每次使用grep时都有一个脚本供我使用。
答案 2 :(得分:1)
如果您获得了一个文件列表,您可以通过
以树状方式浏览它们:cn
:colder
了解更多信息
:help grep
并滚动到条目的底部
答案 3 :(得分:1)
我找到了这个线索寻找一个非常相似的问题的答案。上面给出的答案虽然正确但未能描述一种方便的方法,可以立即将QuickFix窗口中的所有文件打开到缓冲区或标签中。
似乎没有一个内置的命令来做它,但它作为一个VIM插件是微不足道的...有人在这里做了 http://pastebin.com/J9RwciFQ
这是12行代码(一个函数)...粘贴在这里是为了在分析过程中为您节省点击。如果你打算尝试实现这个,请遵循pastebin链接...我的插件安装在病原体目录中,我稍微修改了原始插件(代码后的详细信息)。
~/.v/b/v/p/quickfixopenall.vim
" Create command
command! QuickFixOpenAll :call StartQuickFixOpenAll()
function! StartQuickFixOpenAll()
if empty(getqflist())
return
endif
let s:prev_val = ""
for d in getqflist()
let s:curr_val = bufname(d.bufnr)
if (s:curr_val != s:prev_val)
exec "edit " . s:curr_val
endif
let s:prev_val = s:curr_val
endfor
endfunction
所以一旦我有一个grep结果我很满意...插件有一个函数:QuickFixOpenAll ...我不得不修改插件给定(将以下行添加到quickfixplugin.vim)。我重命名了他的给定函数StartQuickFixOpenAll ...
" Create command
command! QuickFixOpenAll :call StartQuickFixOpenAll()
然后你将grep结果中的所有文件作为缓冲区打开...如果你想运行任何一个例如find / replace的例子,你可以在常规命令前加上“bufdo”命令,它将执行你的命令所有...在VIM类型“help bufdo”
如果你想使用标签,你可以相当简单地修改这个插件......它使用已编辑的“编辑”...只需用“tabe”替换它:和QuickFixOpenAll将在新标签中打开每个结果缓冲区。 / p>