在Vim文件中模糊查找


21

我喜欢在Vim中使用Command-T插件对文件名进行模糊搜索。我非常喜欢它,以至于我开始想要对开放缓冲区中的任意字符串进行相同的模糊搜索。

例如,如果我正在编辑包含选择器(如)的CSS文件,#support-main .question .answer-rating则当前可以键入/support-main .question以查找该行。

我希望能够调用一个模糊查找器,并简单地键入一些类似的东西supmaique来查找同一行(以及其他内容)。我知道我可以输入/sup.*mai.*que相同的效果,但是输入.*会破坏我的注意力。

有没有办法做到这一点?

Answers:


23

最新的vim Ctrl-P插件中有“行”扩展名(ctrlp),可以执行模糊行搜索。您需要手动启用扩展。这是我的配置.vimrc

let g:ctrlp_map = '<c-p>'
let g:ctrlp_cmd = 'CtrlPLastMode'
let g:ctrlp_extensions = ['buffertag', 'tag', 'line', 'dir']

之后,按Ctrl-p进入菜单,然后按Ctrl-f几次,直到线路模式打开。现在输入您的模糊字符串:

在此处输入图片说明

更新2014年2月27日

我目前正在使用的另一种解决方案是使用unite。为了进行模糊线搜索,您需要微调单位:

call unite#filters#matcher_default#use(['matcher_fuzzy'])
call unite#filters#sorter_default#use(['sorter_rank'])
call unite#custom#source('file,file/new,buffer,file_rec,line', 'matchers', 'matcher_fuzzy')
nnoremap <C-k> :<C-u>Unite -buffer-name=search -start-insert line<cr>

现在按Ctrl-k并输入:

在此处输入图片说明

顺便说一句,unite还可以按名称进行模糊文件搜索。

更新2016年8月3日

进行行搜索的另一种方法是将fzf与随附的vim插件一起使用。请参阅此处的安装说明:https : //github.com/junegunn/fzf.vim#installation

在同时安装了fzf和fzf.vim之后,可以用来:BLines在当前缓冲区中搜索行:

样品输出

您可能已经注意到,这并不是完全模糊的搜索,这意味着我需要使用空格。这可能对您不起作用。


添加了unite作为替代解决方案。
baltazar

添加了fzf作为替代解决方案。
baltazar'8

1

并非完全符合您的要求,但set incsearch键入时会与您的模式匹配。这并不是真正的模糊匹配,但感觉有点相似。


是啊。incsearch很棒,但不是我要找的东西。
adamesque 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.