2011-12-30 10 views
19

¿Existe un complemento vim, script o función que permita que la búsqueda vim se extienda para que coincida con las palabras camel-cased cuando escribo las letras mayúsculas en sucesión?¿Cómo puedo habilitar CamelCase? Vim Search

Aquí es un ejemplo para aclarar:

Digamos que estoy en busca de WordInQuestion.

Me gustaría poder simplemente escribir /wiq para encontrarlo.

Como una ventaja adicional, sería bueno si pudiera encontrar getWordInQuestion escribiendo /gwiq, lo que significa que la primera letra de la palabra que estoy buscando puede ser minúscula.

Respuesta

13

La funcionalidad descrita se puede implementar fácilmente mediante el script Vim. Consideremos las siguientes asignaciones personalizadas.

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

Gracias, eso funcionó. Cambié una línea para hacer coincidir palabras parciales, p. Ej. myWordInQuestion aún debe coincidir a través de wiq: let @/= '\ C \ <'. "\\ w *". join (mapa (l, 'v: val. "\\ w *"'), ''). '\>' –

+0

@Thorsten: en este caso, es mejor cambiar esa línea de la siguiente manera: 'let @/= '\ C'. join (map (l, 'v: val. "[0-9a-z _] *"'), ''). '\>' '. –

+0

Gracias, finalmente, ¿hay alguna manera de hacer coincidir myWordInQuestion con mwiq también? P.ej. la primera letra de la palabra (y solo esa) que busco puede ser minúscula? –

0

Hay un buen complemento llamado buscador difuso que puede ser útil.

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

FuzzyFinder ofrece métodos convenientes para llegar rápidamente a la memoria intermedia /archivo/comando/marcador/etiqueta que desee. FuzzyFinder busca con un patrón difuso/parcial , como la caja de camello.

Cuestiones relacionadas