2011-12-30 50 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使用模糊/部分模式(如駱駝案例)搜索 。