Skip to content

Instantly share code, notes, and snippets.

@farfanoide
Last active March 21, 2016 13:44
Show Gist options
  • Select an option

  • Save farfanoide/0fa1a67a25820f2de3c1 to your computer and use it in GitHub Desktop.

Select an option

Save farfanoide/0fa1a67a25820f2de3c1 to your computer and use it in GitHub Desktop.

Optimizando CtrlP

Problema: ctrlp tarda mucho en indizar el path actual.

Update

Podemos resolver todo esto y mas con tan solo instalar fzf

Es remarcable la poca configuracion que necesitamos con este cambio:

map <c-p> :Files<cr>

Listo, con esto tendremos la misma funcionalidad que nos brindaba CtrlP con algunas mejoras, como no tener que esperar a que se llene la lista de sugerencias para poder interactuar con el plugin!

Seguimos con las configuraciones de CtrlP para quienes no quieran cambiar.

Podemos intentar optimizar la busqueda de archivos dentro de ctrlp desde varios puntos:

Una opcion es instalar ag e indicarle a ctrlp que lo utilice, esto lo logramos asi:

let g:ctrlp_user_command = 'ag %s -i --nocolor --nogroup
      \ --ignore .git
      \ --ignore .svn
      \ --ignore .hg
      \ --ignore .DS_Store
      \ --ignore "**/*.pyc"
      \ -g ""'

ag por defecto lee archivos de exclusion de VCS's como el .gitignore lo cual agiliza bastante la busqueda considerando que normalmente en dichos archivos vamos a agregar librerias externas o assets compilados. Una consideracion a tener es el formato de los patrones que especificamos en dichos archivos.

Extraido de la documentacion de git:

... patterns match relative to the location of the .gitignore file. ...

Con esto apunto especificamente a la defnicion de directorios para ignorar, ej: supongamos que queremos excluir la carpeta public y todos sus contenidos, el patron mas comun seria /public/*. si bien esto funciona perfectamente para git, cuando ag lea la linea lo tomara como que debe excluir todo lo que este en pubic en el root del file system en vez de considerar la carpeta perteneciente a nuestra app. No hay problema, como acabamos de leer de la documentacion de git, los patrones son relativos, con lo cual /public/* puede ser cambiado por public/* si ningun tipo de problema para git

Ya que estamos con vim podemos tirar un substitute simple que se encarga de borrar la barra inicial de aquellas lineas que corresponda guardando el patron restante. Abrimos nuestro .gitignore y ejecutamos lo siguiente:

:%s/^\/\(.*\)/\1

Algun otro dia podemos darle una revisada a substitue y las expresiones regulares de vim, pero ahora sigamos con ctrlp que ya nos falta poco

Hasta ahora agilizamos como se indiza el directorio , todavia podemos mejorar el matcheo de los archivos en si. Para esto vamos a instalar otro plugin, el py-matcher y nuevamente vamos a indicarle a vim que reemplace su comportamiento por defecto con el de este:

let g:ctrlp_match_func = {'match': 'pymatcher#PyMatch'}

Listo nomas, con eso ya deberiamos poder saltar entre archivos tan rapido que ni nos damos cuenta, de hecho, la ganancia de velocidad es tanta (en mi experiencia) que podemos obligar a ctrlp a no utilizar cache y asi tener siempre una lista actualizada.

let g:ctrlp_use_caching = 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment