跨多个文件时,Vim如何转到下一个搜索结果?

4
以前我使用Source Insight时,搜索某个单词时可以按“向前搜索”按钮跳转到下一个匹配项,跨越所有项目文件。
例如:
1. 搜索“apple” 2. Source Insight列出包含“apple”单词的所有项目(例如:15个结果) 3. 按“向前搜索”按钮 4. 光标跳转到下一搜索结果,重复操作以查看所有15个结果
但是,使用cscope的vim需要类似以下步骤:
1. 输入“:cs find s“apple”” 2. cscope列出15个结果 3. 输入“1”并跳转到第一个结果 4. 输入“:cs find s“apple”” 5. cscope列出15个结果 6. 输入“2”并跳转到第二个结果
这非常复杂。在Vim中是否有更好的方法来实现呢?

如果只有一个文件,你可以使用 / 而不是使用 cscope。 - cup
3个回答

11

Vim允许你使用'cscopequickfix'选项将cscope的输出重定向到快速修复窗口。以下是在:help 'cscopequickfix'中建议的值:

set cscopequickfix=s-,c-,d-,i-,t-,e-

从那里开始,您可以使用以下内容搜索apple

:cs f s apple

查看比赛列表:

:cw[indow]

快速跳转到下一个匹配项:

:cn[ext]

使用以下方法跳转到上一个匹配项:

:cp[revious]

当然,您可以使用鼠标或键盘在quickfix窗口中选择条目。

奖励内容:将以下内容添加到您的vimrc文件中以跳过:cwindow步骤:

augroup qf
    autocmd!
    autocmd QuickFixCmdPost * cwindow
augroup END

2
在 Vim 中,你可以使用 :vimgrep:copen:cnext
  1. 在底层目录中搜索“apple”

    :vim apple **

  2. 显示所有 15 个结果:

    :cope

  3. 跳转到下一个结果:

    :cn

为了使结果之间的跳转更加方便,在 我的 .vimrc 文件 中有以下设置:
noremap    <F4>   :<C-U>cnext <CR>
noremap    <S-F4> :<C-U>cprevious <CR>

更多信息请参见:

换句话说:你真的需要cscope吗?如果不需要,可以尝试使用Vim内置的“查找文件”功能。 - Ben

0
在 vim(命令模式)中,您可以使用/apple搜索单词apple。然后使用n向前搜索,N向后搜索。
您还可以设置一些配置以使其更好。
:set incsearch # will jump to the search work as you type
:set hlsearch # will highlight all matches
:set ignorecase # will use case insensitive searches
:set smartcase # will use case sensitive search if the search word contains capitals

编辑:

@johnsyweb 的正确答案是使用 vimgrep


我想搜索整个项目文件,而不仅仅是这个文件。 - CK vir
@CKvir:那么我的回答应该会有所帮助! - johnsyweb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接