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
Me gustaría que hubiera un guión como este sin el requisito de rubí (es decir pitón) – drozzy
@drozzy, aquí van: https://github.com/kien/ctrlp.vim –
FuzzyFinder siempre ha manejado subdirectorios para mí. ¿Es esto un problema de configuración o he entendido mal las referencias @Ton del déficit? –