2011-12-30 25 views
19

有一个Vim插件,脚本或功能,在那里,使得Vim搜索,以便当我连续类型的大写字母来匹配骆驼套管词进行扩展?我怎样才能驼峰启用Vim的搜索

这里澄清一个例子:

比方说我要找WordInQuestion

我希望能够以发现它只需键入/wiq

作为一个额外的好处,如果我能通过键入/gwiq找到getWordInQuestion这将意味着我要查找的单词的第一个字母可能是小写字母。

回答

13

所描述的功能可以通过Vim脚本的装置可以容易地实现。 让我们考虑下面的自定义映射。

nnoremap <expr> <leader>/ SearchCamelCase('/') 
nnoremap <expr> <leader>? SearchCamelCase('?') 
function! SearchCamelCase(dir) 
    call inputsave() 
    let ab = input(a:dir) 
    call inputrestore() 
    let l = filter(split(toupper(ab), '\zs'), 'v:val =~ "\\w"') 
    if len(l) > 0 
     let l[0] = '[' . l[0] . tolower(l[0]) . ']' 
    end 
    let @/ = '\C\<' . join(map(l, 'v:val . "[0-9a-z_]*"'), '') . '\>' 
    return a:dir . "\r" 
endfunction 
+0

谢谢,这工作。我改变了一行以匹配部分词语,例如 设@/= '\ C \ <':myWordInQuestion仍然应该经由WIQ匹配。 “\\ w *”。 join(map(l,'v:val。“\\ w *”'),'')。 “\>” – 2011-12-30 03:19:14

+0

@Thorsten:在这种情况下,最好改变该行如下:'让@/=“\ C”。 join(map(l,'v:val。“[0-9a-z _] *”'),'')。 '\>''。 – 2011-12-30 03:32:14

+0

谢谢,最后有没有办法让myWordInQuestion与mwiq匹配?例如。我搜索的单词中的第一个字母(只有那一个)可能是小写字母? – 2011-12-30 03:39:09

0

有一个很好的插件称为模糊查找器,可能会有用。

http://www.vim.org/scripts/script.php?script_id=1984

FuzzyFinder提供了便捷的方式快速到达 缓存/文件/命令/书签/你想要的标签。 FuzzyFinder使用模糊/部分模式(如骆驼案例)搜索 。