2009-12-12 9 views
24

http://www.vim.org/scripts/script.php?script_id=1984VIM: uso de FuzzyFinder, consejos, errores: ¿cómo se puede hacer uso de este complemento?

Puede iniciar FuzzyFinder por siguientes comandos:

 Command   Mode ~ 
    |:FufBuffer|  - Buffer mode (|fuf-buffer-mode|) 
    |:FufFile|  - File mode (|fuf-file-mode|) 
    |:FufDir|  - Directory mode (|fuf-dir-mode|) 
    |:FufMruFile| - MRU-File mode (|fuf-mrufile-mode|) 
    |:FufMruCmd|  - MRU-Command mode (|fuf-mrucmd-mode|) 
    |:FufBookmark| - Bookmark mode (|fuf-bookmark-mode|) 
    |:FufTag|  - Tag mode (|fuf-tag-mode|) 
    |:FufTaggedFile| - Tagged-File mode (|fuf-taggedfile-mode|) 
    |:FufJumpList| - Jump-List mode (|fuf-jumplist-mode|) 
    |:FufChangeList| - Change-List mode (|fuf-changelist-mode|) 
    |:FufQuickfix| - Quickfix mode (|fuf-quickfix-mode|) 
    |:FufLine|  - Line mode (|fuf-line-mode|) 
    |:FufHelp|  - Help mode (|fuf-help-mode|) 

Así que sólo recientemente se enteraron de FuzzyFinder. Para cualquiera que haya usado esto por bastante tiempo, ¿puedes demostrar cómo realmente usas estos comandos en combinación, cualquier asignación que hagas, cualquier problema que uno deba saber mientras usas esto?

Respuesta

13

FuzzyFinder en sí mismo es bastante inútil para mí. Lo uso en combinación con FuzzyFinder-TextMate y una biblioteca de Ruby que atraviesa todos los archivos y los subdirectorios para encontrar un archivo, al igual que la opción Cmd + T para TextMate en una Mac. Puede verlo en acción here.

Lamentablemente, se necesita un poco de esfuerzo para que funcione, ya que el autor original dejó de mantener el script. Sin embargo, todavía hay personas que regularmente publican actualizaciones en Github. Necesitará dos scripts, fuzzyfinder_textmate.vim y fuzzy_file_finder.rb.

Las últimas versiones funcionan sin problemas en combinación con Vim FuzzyFinder 2.22.3. Su Vim debe compilarse con soporte de Ruby, de lo contrario no funcionará. El blog del autor original contiene más información sobre cómo usarlo correctamente. Alternativamente, eche un vistazo a mi Vim setup para ver cómo se puede utilizar. La configuración define dos keymappings ,s y ,e a difusa encontrar un archivo y abrirlo en una nueva ventana o la ventana actual, respectivamente:

function IdeFindTextMate() 
    let g:FuzzyFinderOptions.Base.key_open = '<CR>' 
    let g:FuzzyFinderOptions.Base.key_open_split = '<C-j>' 
    exe "FuzzyFinderTextMate" 
endfunction 

function IdeSplitFindTextMate() 
    let g:FuzzyFinderOptions.Base.key_open = '<C-j>' 
    let g:FuzzyFinderOptions.Base.key_open_split = '<CR>' 
    exe "FuzzyFinderTextMate" 
endfunction 

let mapleader = "," 
map <silent> <leader>e :call IdeFindTextMate()<CR> 
map <silent> <leader>s :call IdeSplitFindTextMate()<CR> 

Actualización:

Ahora uso el excelente Command-T plugin en lugar de FuzzyFinder. Eche un vistazo a this respuesta de superusuario mío por las razones por las cuales.

+1

Me gustaría que hubiera un guión como este sin el requisito de rubí (es decir pitón) – drozzy

+5

@drozzy, aquí van: https://github.com/kien/ctrlp.vim –

+0

FuzzyFinder siempre ha manejado subdirectorios para mí. ¿Es esto un problema de configuración o he entendido mal las referencias @Ton del déficit? –

6

Uso: FufFile mapeado a, b y comienzo tecleando **/seguido de los primeros caracteres de la cadena que estoy buscando.

Esto proporciona una lista de todos los archivos coincidentes que incluyen su cadena.

por ejemplo

,b 
**/doc 
    13: app/models/document.rb 
    75: test/fixtures/documents.yml 
    82: test/unit/document_test.rb 
+0

También agregaría que, personalmente, creo que el complemento Command-T es mucho más fácil de usar ya que simplemente escribe t y comienza a escribir caracteres. http://git.wincent.com/command-t.git/blob_plain/HEAD:/README.txt – Kris

+0

Usando fuzzyfinder, simplemente presiono ty empiezo a escribir caracteres.Pude haber tenido que modificar la configuración cuando la instalé hace años. (Rummages ...) Sí, mi .vimrc tiene líneas como "nnoremap f: FufFile **/". Tengo una línea como esta para cada modo de fuzzyfind que uso (archivo, búfer, etiqueta) –

+0

Desafortunadamente, mi código base ahora es demasiado grande para usar '** /'! –

10

Un poco tarde a la fiesta, pero me gustaría añadir que la última versión del FuzzyFinder tiene un nuevo comando: :FufCoverageFile, que hace exactamente lo que se desea, es decir:

>CoverageFile>appcontr 
    20: app/controllers/application_controller.rb 
    22: app/views/layouts/application.html.erb 
+2

También vale la pena señalar que la variable g: fuf_coveragefile_globPatterns se puede actualizar para incluir la ruta/patrones que desea buscar utilizando FufCoverageFile. Yo uso FufCoverageFile y FufBuffer casi cada minuto;) – Bazman

+0

¿Cómo se navega entre los resultados? No quiero utilizar las flechas y la pestaña no parece avanzar – Ixx

4

Éstos son el mapeo de uso (que no es el mío, aunque estoy muy acostumbrado a ellos ahora):

let g:fuf_modesDisable = [] 
let g:fuf_mrufile_maxItem = 1000 
let g:fuf_mrucmd_maxItem = 400 
let g:fuf_mrufile_exclude = '\v\~$|\.(bak|sw[po])$|^(\/\/|\\\\|\/mnt\/)' 
nnoremap <silent> <C-n>  :FufBuffer<CR> 
nnoremap <silent> <C-p>  :FufFileWithCurrentBufferDir<CR> 
nnoremap <silent> <C-f><C-p> :FufFileWithFullCwd<CR> 
nnoremap <silent> <C-f>p  :FufFile<CR> 
nnoremap <silent> <C-f><C-d> :FufDirWithCurrentBufferDir<CR> 
nnoremap <silent> <C-f>d  :FufDirWithFullCwd<CR> 
nnoremap <silent> <C-f>D  :FufDir<CR> 
nnoremap <silent> <C-j>  :FufMruFile<CR> 
nnoremap <silent> <C-k>  :FufMruCmd<CR> 
nnoremap <silent> <C-b>  :FufBookmarkDir<CR> 
nnoremap <silent> <C-f><C-t> :FufTag<CR> 
nnoremap <silent> <C-f>t  :FufTag!<CR> 
noremap <silent> g]   :FufTagWithCursorWord!<CR> 
nnoremap <silent> <C-f><C-f> :FufTaggedFile<CR> 
nnoremap <silent> <C-f><C-j> :FufJumpList<CR> 
nnoremap <silent> <C-f><C-g> :FufChangeList<CR> 
nnoremap <silent> <C-f><C-q> :FufQuickfix<CR> 
nnoremap <silent> <C-f><C-l> :FufLine<CR> 
nnoremap <silent> <C-f><C-h> :FufHelp<CR> 
nnoremap <silent> <C-f><C-b> :FufAddBookmark<CR> 
vnoremap <silent> <C-f><C-b> :FufAddBookmarkAsSelectedText<CR> 
nnoremap <silent> <C-f><C-e> :FufEditInfo<CR> 
nnoremap <silent> <C-f><C-r> :FufRenewCache<CR> 

uso principalmente: para la última abierta archivos a cambiar de buffer (y eliminado todos los plugins buxexplorer) p para navegar por los archivos/directorios

+0

Gracias por las asignaciones. es una de las varias teclas de paginación para mí, pero es bueno tener esto como punto de partida. –

+0

Quizás este no sea el lugar, pero ahora he cambiado a Unite.vim y FZF, que son realmente buenos. – Drasill

7

Además de Kris respuesta, es probable que desee asignar el '**/'inmediatamente en tu.el archivo vimrc así:

map ,f :FufFile **/<CR> 

lo que sólo tiene que escribir:

,fTest 

para encontrar todos los partidos de prueba en todos los subdirectorios!

HTH

5

En primer lugar, instale el último guión buscador difusa. Entonces ...

Config

ajustar algunas config en su .vimrc:

" Truth be told, I don't remember what these do, but I must have 
" found them necessary back when I installed fuzzyfinder years ago 
let s:slash = '[/\\]' 
let s:startname = '(^|'.s:slash.')' 
let s:endname = '($|'.s:slash.')' 

" directories and extensions to ignore when listing files 
" these contain a lot of Python-isms, yours will probably vary 
let s:extension = '\.bak|\.dll|\.exe|\.o|\.pyc|\.pyo|\.swp|\.swo' 
let s:dirname = 'build|deploy|dist|vms|\.bzr|\.git|\.hg|\.svn|.+\.egg-info' 
let g:fuf_file_exclude = '\v'.'('.s:startname.'('.s:dirname.')'.s:endname.')|(('.s:extension.')$)' 
let g:fuf_dir_exclude = '\v'.s:startname.'('.s:dirname.')'.s:endname 

" limit number of displayed matches 
" (makes response instant even on huge source trees) 
let g:fuf_enumeratingLimit = 60 

y definir algunas teclas de acceso directo para activarlo:

nnoremap <Leader>f :FufFile **/<cr> 
nnoremap <Leader>b :FufBuffer<cr> 
nnoremap <Leader>t :FufTag<cr> 

y reiniciar Vim para volver -leer la configuración .vimrc.

encontrar el archivo/tampón

Ahora puede presionar < líder > f para ver una lista de archivos en el directorio y subdirectorios actual. Comience a escribir y la lista se filtra solo a aquellos que (borrosos) coinciden con lo que escribe. Use las teclas del cursor para seleccionar una coincidencia e ingrese para abrir ese archivo. La primera vez que active esto en un proyecto nuevo muy grande, podría llevar un segundo almacenar en caché los nombres de archivo.

De manera similar, cuando tiene algunos búferes abiertos, presione < líder > b para seleccionar de una lista de búferes abiertos.

Buscar etiqueta

mejor de todo es la etiqueta correspondiente (es decir, ir a una función, clase, método, etc.) En primer lugar tenemos que generar una archivos de símbolos sin embargo.

Si no está acostumbrado a los archivos de etiquetas, puede parecer una molestia tener que hacerlo manualmente. Tenga en cuenta que muchas herramientas usan archivos de etiquetas, por ejemplo, Vim las leerá para habilitar 'ir a definición', vea ese enlace al final de esta respuesta, así que aprender sobre ellas es tal vez más valioso de lo que podría esperar.

Instale los últimos ctags (http://ctags.sourceforge.net/) y asegúrese de que esté en su RUTA para que pueda invocarlo desde la línea de comandos. Las versiones recientes han mejorado mucho para lenguajes como Python. A continuación, definir una combinación de teclas en .vimrc para que sea fácil de volver a ejecutarlo en su proyecto, y el golpe de distancia caché de fuzzyfinder al mismo tiempo:

noremap <f12> :silent !ctags -R --languages=python .<cr>:FufRenewCache<cr> 

o en Windows:

noremap <f12> :!start /min ctags -R --languages=python .<cr>:FufRenewCache<cr> 

(la/min es una forma específica de Windows de ejecutar el comando en segundo plano para que Vim no se bloquee al indexar proyectos muy grandes)

Reiniciar vim y presionar f12 ahora escaneará todos los archivos en el directorio actual y subdividirá y crea un índice de todas las funciones definidas, clases, etc. ctags analiza muchos lenguajes de programación. La salida va a un archivo llamado 'etiquetas'. Tiene sentido ejecutar esto en la raíz de su proyecto (use Vim's: pwd y: cd para asegurarse de que esté donde está) para que el archivo de etiquetas contenga todo en su proyecto.

Así que ahora puede presionar < líder > t para ver un listado de todas las clases, funciones, métodos, etc. en su proyecto. Como se indicó anteriormente, comience a escribir y la lista se filtrará solo a aquellas que coincidan con lo que escribe. Use los cursores e ingrese para seleccionar uno, y Vim irá al archivo/línea donde se define esa etiqueta.

Gotchas

Si una etiqueta se define más de una vez en su proyecto, (por ejemplo, una clase con el mismo nombre que una función), entonces fuzzyfinder ofrecerá un menú para que pueda elegir cuál de ellos desea saltar a . Esto puede ser un poco molesto, porque de forma predeterminada, ctags produce demasiadas definiciones de etiquetas para los archivos de Python. Enumera no solo la definición de clases, métodos y funciones, sino que todos los lugares en los que se define cualquier símbolo dentro de un archivo fuente. Esto incluye la creación de variables y los lugares donde se importa un símbolo desde otro lugar. Esto significa que un símbolo que está definido en un archivo e importado en un segundo archivo tendrá dos ubicaciones de definición, lo que significa que siempre se le presentará un menú en lugar de simplemente saltar directamente a la definición de clase. Puede solucionar este problema mediante la creación de un archivo de opciones ctags en ~/.ctags, diciéndole que no generar etiquetas para 'incluir' declaraciones provistas, y saltarse algunos directorios:

--python-kinds=-i 
--exclude=build 
--exclude=dist 

Cuando cambie su código fuente, las etiquetas archivo estará desactualizado. Si crea nuevas clases/funciones/métodos/etc, para saltar a ellas tendrá que volver a ejecutar ctags como se muestra arriba. Sin embargo, es sorprendente cuán poco importa esto.

Encontré que < líder > b se detendría por un segundo antes de trabajar, lo que fue molesto. Resultó que la razón es que hay otra asignación definida para < líder > bd definida por mi complemento BClose, y Vim estaba esperando ver si presioné o no la siguiente d antes de decidir qué asignación de teclas invocar. Nunca utilizo eso, así que inhabilitó el uso de este en mi .vimrc:

autocmd VimEnter * nunmap <Leader>bd 

Por cierto, ahora que se está generando tagfiles para su proyecto, es fácil para permitir también una combinación de teclas que hacer 'ir a definición' del símbolo debajo del cursor de texto. Ver mi blog sobre él: http://tartley.com/?p=1277

Cuestiones relacionadas