2011-12-30 2 views
19

대문자를 연속적으로 입력 할 때 낙타 - 대문자 단어와 일치시키기 위해 vim 검색을 확장 할 수있는 vim 플러그인, 스크립트 또는 기능이 있습니까?CamelCase-Vim 검색 활성화 방법

내가 WordInQuestion을 찾고 말할 수 있습니다 : 여기

명확히하는 예입니다.

/wiq을 찾으려면 입력하고 싶습니다.

getWordInQuestion을 입력하면 /gwiq을 입력하면 좋을 것입니다. 이는 내가 찾고있는 단어의 첫 글자가 소문자 일 수 있음을 의미합니다.

답변

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

감사합니다. 예를 들어 부분 단어와 일치시키기 위해 한 줄을 변경했습니다. myWordInQuestion은 여전히 ​​wiq : @@ = '\ C \ <'을 사용하여 일치시켜야합니다. "\\ w *". join (map (l, 'v : val. "\\ w *"'), ''). '\>' –

+0

@Thorsten :이 경우에는'let @/= '\ C'와 같이 해당 행을 변경하는 것이 더 좋습니다. join (map (l, 'v : val. "[0-9a-z _] *"'), ''). '\>''. –

+0

감사합니다. 마침내 myWordInQuestion과 mwiq를 일치시키는 방법이 있습니까? 예 : 내가 검색하는 단어의 첫 글자 (그리고 오직 하나)는 소문자 일 수 있습니까? –

0

퍼지 파인더라는 유용한 플러그인이 유용 할 수 있습니다.

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

는 FuzzyFinder 빠르게 원하는 버퍼/파일/명령/북마크/태그에 도달하는 편리한 방법을 제공합니다. FuzzyFinder는 낙타의 경우와 같이 퍼지/부분 패턴 을 사용하여 검색합니다.

관련 문제