Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 如何列出Vim';什么是搜索?_Search_Vim - Fatal编程技术网

Search 如何列出Vim';什么是搜索?

Search 如何列出Vim';什么是搜索?,search,vim,Search,Vim,我想列出当我点击时的匹配项: /example 这样我就可以一次看到所有匹配项的位置。使用:set-hlsearch将以黄色突出显示所有匹配项,使您可以轻松地扫描文件以查找匹配项。但这可能不是您想要的,搜索后,:g//p将为您提供列出的匹配项 :g//p 以其较长的形式: :global/regular-expression/print 您可以省略pattern/regex,Vim将重复使用前面的搜索词 琐事:该工具是根据此命令序列命名的。要详细说明此。。。而不是 /example :g/

我想列出当我点击时的匹配项:

/example

这样我就可以一次看到所有匹配项的位置。

使用
:set-hlsearch
将以黄色突出显示所有匹配项,使您可以轻松地扫描文件以查找匹配项。但这可能不是您想要的,搜索后,:g//p将为您提供列出的匹配项

:g//p
以其较长的形式:

:global/regular-expression/print
您可以省略pattern/regex,Vim将重复使用前面的搜索词


琐事:该工具是根据此命令序列命名的。

要详细说明此。。。而不是

/example
:g//p
你也可以直接写

:g/example/p
或者,由于p(rint)是:g(lobal)命令的默认操作,因此可以将其缩短为

:g/example
除p(rint)外,还可以执行其他操作,例如d(elete)。请参阅:help:global

您还可以执行以下操作:

g/pattern/#


将打印所需的图案和行的数量。

< P>如果您想查看此列表并在匹配之间快速跳转,请考虑使用

:vimgrep示例%

:grep示例%

这将用所有匹配项填充“错误列表”,以便您可以使用
:copen
在快速修复缓冲区中列出所有匹配项,在特定行上按enter键跳转到该匹配项,或使用
:cn
:cp
等命令来回移动


有关详细说明,请参见另一种可能是使用include file search命令

[I
这将列出光标下出现的所有单词。它可能比您需要的更多,因为它还将搜索当前文件中包含的任何文件

但是这个命令的好处是,搜索结果显示还显示了匹配数的计数,以及每个匹配的行号

:help include-search
看到很多变种

关于

:g//p
这可以进一步减少到

:g//

因为,正如其他人所说,p(rint)是默认操作。

刚刚学习了一个新的操作:位置列表

键入
:lvim foo%
在当前文件中搜索
foo
,并将包含
foo
的所有匹配项输入位置列表。
键入
:lopen
在quickfix窗口中打开位置列表,该窗口与往常一样完全可导航。
使用
:lnext
/
查看列表(使用tpop/unpaired映射可获得最佳体验)

如果您有
:set number
,则上述命令也会显示行号

如果您没有
:设置编号
,则

g/pattern/#

将显示行号。

您可以获得一个漂亮的
快速修复
窗口,其中包含当前搜索模式中的匹配项

:vim // %
:copen
如果您以前只使用
/pattern

编辑:刚刚发现这也适用于所有打开的缓冲区

:bufdo vimgrepadd // %
:copen
“放入~/.vimrc文件
“启动与搜索相关的配置和帮助
"
“搜索时忽略大小写
置之不理
输入字符时进行搜索,当您输入更多字符时,搜索将得到优化
在搜索中设置
突出显示匹配项,在正常模式下,当光标位于字符串上时,尝试键入*甚至g*
高亮显示
在正常模式下,拖动这些作弊命令,键入q:p以粘贴到打开的cmdline中
“如何递归搜索字符串
“:grep!”\”-r
"
如何递归搜索,省略日志和git文件
“:vimgrep/srch/`find-类型f\| grep-v.git\| grep-v.log`
“:vimgrep/srch/`find.-type f-name'*.pm'-o-name'*.pl”`
"
如何在shell中递归地从当前目录中搜索“srch”
“vim-c”:vimgrep/srch/`find-键入f\| grep-v.git\| grep-v.log`'
"
“如何在搜索后突出显示可搜索字符串?”
“在正常模式下,当光标位于匹配的字符串上时,按g*
“如何在搜索匹配之间跳转-按打开快速修复窗口”
“:科本22
“如何关闭“快速修复”窗口
“:ccl
“F5将在vimgrep之后找到下一个匹配项
地图:cp!
“F6将在vimgrep之后查找上一个事件
地图:中国!
“F8递归搜索光标下的单词,:copen,以关闭->:ccl
nnoremap:grep!"\" . -r:copen 33
“从所有搜索中省略目录以全局执行
设置wildignore+=**/node_模块/**
“使用perl正则表达式-src:http://andrewradev.com/2011/05/08/vim-regexes/
noremap/\v
"
“停止搜索相关配置和帮助

Ctrl-f以列出所有搜索结果:

nmap <C-f> :vimgrep /<C-r>//g %<CR> \| !:copen <Enter>
nmap:vimgrep///g%\\\\!:科本

我已经为此编写了一段代码。它实际上避免了
vimgrep
中的问题。它甚至适用于未命名的文件。而且它更容易使用

function! Matches(pat)
    let buffer=bufnr("") "current buffer number
    let b:lines=[]
    execute ":%g/" . a:pat . "/let b:lines+=[{'bufnr':" . 'buffer' . ", 'lnum':" . "line('.')" . ", 'text': escape(getline('.'),'\"')}]"
    call setloclist(0, [], ' ', {'items': b:lines}) 
    lopen
endfunction
当您使用模式调用它时,它会打开包含所有匹配项的位置窗口

这可能是一个命令

command! -nargs=1 Mat call Matches(<f-args>)

应该是“:set hlsearch'not”:hlsearch。当您不再需要突出显示时,映射
:nohl
以清除突出显示也很有用。
:g/
-由于p(rint)是默认操作,您也可以将其省略。
:g/
甚至更短!有没有可能在这里看到上下文,比如grep
--context 9
?@VitalyZdanevich Try
:%s/regular expression//gn
它会沿着这些线产生一些东西:
X匹配Y行
@AlexejMagura我的意思是-如何看到字符串前后的几行?很好。但如果已经启用了行号,则不需要使用
#
。它通过默认提示显示行号!这让我制作了这个映射,它自动扩展光标下的单词,并一次扫描洛佩恩:nnoremap f:lvim/=expand(“”/%:lopen可以通过上下文从
[I
获得结果,就像在grep
--context 9function! Matches(pat)
    let buffer=bufnr("") "current buffer number
    let b:lines=[]
    execute ":%g/" . a:pat . "/let b:lines+=[{'bufnr':" . 'buffer' . ", 'lnum':" . "line('.')" . ", 'text': escape(getline('.'),'\"')}]"
    call setloclist(0, [], ' ', {'items': b:lines}) 
    lopen
endfunction
command! -nargs=1 Mat call Matches(<f-args>)
vnoremap Y "xy:call Matches(@x)<CR>