标签: vimgrep

如何在使用时跳转模式:vimgrep(Quickfix list)?

我是vim的新手,还在探索它的一些功能.我有vimgrep的问题.我可以搜索vimgrep /define/ **这样的模式,以便找到并打开包含a的下一个文件define.但我还不知道如何转到与我的模式匹配的下一个文件/行.有什么指针吗?

vim vimgrep

54
推荐指数
2
解决办法
1万
查看次数

如何在vimgrep中排除文件模式?

在vim中,我经常使用vimgrep进行搜索.我有如下映射:

map <leader>s :execute "noautocmd vimgrep /\\<" . expand("<cword>") . "\\>/gj **/*.*" <Bar> 
cw<CR> 5
Run Code Online (Sandbox Code Playgroud)

问题是我不想搜索一些临时子文件夹(如obj,objd).如何排除与给定模式匹配的子文件夹.例如,前缀为"objd"的子文件夹不应包含在搜索中.

vim vimgrep

24
推荐指数
3
解决办法
8727
查看次数

ag Silver Searcher:模式的规则是什么?

ag在Vim中使用字符串/文件搜索效果很好.

然而,似乎没有太多文档如何为ag构建模式.

我试图在Practical Vim的一个例子中使用ag而不是vimgrep.

我希望在递归中的目录中的所有文件中找到"Pragmatic Vim"的每一个出现,并用"Practical Vim"替换该字符串.在某些文件中还有"Pragmatic Bookshelf",并且该字符串必须保留.

这本书暗示了这种方法:

/Pragmatic\ze Vim
:vimgrep /<C-r>// **/*.txt
Run Code Online (Sandbox Code Playgroud)

然后,在该步骤之后,使用:Qargsplugin命令填充quickfix list ,最后:argdo %s//Practical/g

现在,我如何指定/Pragmatic\ze模式使用ag

ag在所有设计什么,我想在这里做什么?

regex vim vimgrep

22
推荐指数
1
解决办法
1万
查看次数

使用Vimgrep搜索多个globs指定的文件集

有没有人知道Vimgrep的语法搜索多个文件globs?我试图使用此命令在当前目录中搜索.

map <F3> :execute "vimgrep /" . expand("<cword>") . "/j **/*.c* *.txt" <Bar> cw<CR>
Run Code Online (Sandbox Code Playgroud)

使用此命令,Vim仅搜索*.c*.有关如何搜索多种文件类型的任何想法?

vim search vimgrep

12
推荐指数
2
解决办法
6034
查看次数

是否有一个更短的组合键:cn转到quickfix列表中的下一个项目?

我正在阅读Vim中的大型C++代码库.

在一个文件中,我可以做到

/foo
n
n
n
Run Code Online (Sandbox Code Playgroud)

现在,如果我想搜索多个文件,我必须这样做:

:vimgrep /foo/
:cn
:cn
:cn
Run Code Online (Sandbox Code Playgroud)

现在,打字:cn比不那么方便n.有没有办法搜索vimgrep结果n(比如搜索/)而不是:cn

vim search vimgrep

7
推荐指数
2
解决办法
834
查看次数

如何编写调用VimGrep的vim函数?

我想写一个函数myFunc,这样:

myFunc /function foo/
Run Code Online (Sandbox Code Playgroud)

:vimgrep /function foo/ **/*.cpp **/*.hpp
Run Code Online (Sandbox Code Playgroud)

myFunc /class bar: public/
Run Code Online (Sandbox Code Playgroud)

vimgrep /class bar: public/ **/*.cpp **/*.hpp
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

谢谢!

vim vimgrep

5
推荐指数
1
解决办法
566
查看次数

在键映射中使用Vimgrep中的多个模式

在我的vimrc中,我有一个映射来查找其中包含TODO的所有行,并将它们放在quickfix窗口中:

 nnoremap <leader>f :vimgrep /TODO/j % \| :cw<CR>
Run Code Online (Sandbox Code Playgroud)

我现在想以相同的方式添加替代模式FIXME.所以我试过了

 nnoremap <leader>f :vimgrep /TODO\|FIXME/j % \| :cw<CR>
Run Code Online (Sandbox Code Playgroud)

nnoremap <leader>f :vimgrep /TODO<bar>FIXME/j % \| :cw<CR>
Run Code Online (Sandbox Code Playgroud)

但是没有返回任何结果.

 vimgrep /TODO|FIXME/j %
Run Code Online (Sandbox Code Playgroud)

在手动输入时,在:提示符下工作.到目前为止,我的解决方法是:

function! FindFixme()
    vimgrep /TODO\|FIXME/j %
    cw
endfunction
nnoremap <leader>f :call FindFixme()<CR>
Run Code Online (Sandbox Code Playgroud)

但我真的不明白为什么我不能让它作为单个地图命令工作.

谢谢.

vim vimgrep

5
推荐指数
1
解决办法
532
查看次数

vim quickfix list:操纵位置?

当我使用vim时,我偶尔会得到一个像这样的分割菜单设置:

###############################################
#          |                         |        #
#          |                         |        #
# NERDTree |       main window       | tagbar #
#          |                         |        #
#          |                         |        #
###############################################
Run Code Online (Sandbox Code Playgroud)

即使标签栏关闭,我也可能会得到类似的设置,例如当我比较不同的文件时.

但是,当我执行vimgrep命令时,结果(显示在quickfix列表中)仅显示在主窗口下方,当标签栏(或右侧的其他分割)关闭时.

因此,此设置每次都能正常工作:

###############################################
#          |                                  #
#          |                                  #
# NERDTree |          main window             #
#          |                                  # 
#          |                                  #
#          |__________________________________#
#          |                                  #
#          |  quickfix list: vimgrep results  #
#          |                                  #
###############################################
Run Code Online (Sandbox Code Playgroud)

......虽然这不是:

###############################################
#          |                         |        #
#          |                         |        #
# NERDTree | …
Run Code Online (Sandbox Code Playgroud)

vim split vimgrep

5
推荐指数
1
解决办法
639
查看次数

为什么 **/* 用于在 :vimgrep vim 命令中递归搜索当前目录?

为什么他们使用双星号?

我读过Vim的帮助上vimgrep,我看了看周围的堆栈溢出和vimcasts并同时我发现很多人说这是怎么你在当前目录中递归搜索,我还没有找到一个解释,为什么

让我们用一个例子来更容易解释。如果我想在当前目录下查找所有出现的 foo,我可以使用

:vim[grep][!] /{pattern}/[g][j] {file}
Run Code Online (Sandbox Code Playgroud)

这样就变成

:vimgrep /foo/ **/*
Run Code Online (Sandbox Code Playgroud)

所以看看{file}这个grep的部分:

  • 我知道这是一个文件路径。
  • 我知道星号 ( *) 是通配符。
  • 我知道正斜杠充当目录分隔符。

我的具体问题是为什么它以

**/*

并不是

*/*

我已经尝试在几种不同的情况下使用/进行搜索,这似乎是在距我当前目录正好 1 深的任何目录中搜索任何文件,我认为这就是使用双星号的原因。

即为什么它是一个双星号?这是否通过一些我不完全理解的巧妙机制表示“我希望您递归搜索”,或者这只是一个用于表示“递归搜索”的关键字?我是否完全关闭,这不是 vim 的内置部分,而是外壳的一部分?(这些部分不是我的实际问题,而是有助于理解我的困惑,我的实际问题在上面)。

如果有什么方法可以改进我的问题,请告诉我,这是我第一次提问。

regex vim glob vimgrep

5
推荐指数
1
解决办法
460
查看次数

是否可以使用vimgrep直观选择当前文件?

我想只在当前文件的视觉选择中搜索vimgrep而不是整个文件.这可能吗?怎么样?我无法通过Google或vim帮助查找此案例.

我想要这个的原因是因为我需要quicklist(copen)中的结果,并且:g/FOO显示底部的匹配行没有完成这项工作.

vim search vimgrep

4
推荐指数
1
解决办法
613
查看次数

标签 统计

vim ×10

vimgrep ×10

search ×3

regex ×2

glob ×1

split ×1