Comandos de autocompletado de Vim

Sábado, 21 de agosto de 2010 Rafa García 3 comentarios

Estos días estoy leyendo el libro “CSS the missing manual” y el autocompletado de Vim me viene de maravilla,  es capaz de autocompletar las propiedades y los valores. Esto es lo que me ha motivado a escribir el siguiente post.

Vim tiene varios comandos de autocompletado, personalmente suelo usar omni completion y el comando que busca palabras del fichero actual pero hay otros que conviene conocerlos y habituarse a usarlos.

Estos comandos son llamados desde el modo de inserción con la combinación de teclas CTRL-X y luego CTRL-<modo de autocompletado>. Cuando empiezas a escribir una palabra invocas el comando, se abrirá un popup con las coincidencias de la palabra que hay justo delante del cursor y para moverte entre ellas CTRL-N para saltar a la siguiente(Next) y CTRL-P para volver a la previa (Previous).

Ahora que sabemos como manejarlo vamos a ver algunos de los diferentes modos:

Omni completion

Para invocarlo CTRL-X_CTRL-O , este comando es “inteligente”(en cierta medida y según la configuración) porque las coincidencias que te ofrecerá estarán relacionadas con el contexto.

Si abrimos un fichero con un script en Ruby, escribimos  ”5.” (cinco punto) y seguido pulsamos CTRL-X_CTRL-O nos mostrará todos los operadores y métodos de la clase Integer. Por esto digo que tiene algo de inteligente.

Ocurre algo por el estilo si usamos este modo con un fichero CSS:

Ejemplo de omni completion de un fichero css

Simplemente invoqué el comando y me mostró las coincidencias

Autocompletado con palabras del fichero actual:

Para invocarlo CTRL-X_CTRL-N. Este comando no es inteligente, simplemente autocompleta la palabra buscándola entre las palabras claves de fichero actual.

Imaginad que tenemos el siguiente texto y tenemos que desarrollar una tesis sobre ello:

“El músculo esternocleidomastoideo (Sternocleidomastoideus) es un músculo de la cara lateral del cuello, en la región anterolateral; largo, robusto, constituido en su tramo torácico por dos manojoscabezas: la esternal, cilíndrica, y laclavicular, aplanada. Entre ambas dejan el triángulo de Sédillot, que permite un acceso a la vena yugular interna para establecer una vía.” – Texto sacado de la wikipedia.

Escribir la palabra esternocle… es largo y tortuoso, con este comando será menos tortuoso.

Autocompletado con palabras del fichero actual y los incluidos:

Para invocarlo CTRL-X_CTRL-I. Este comando funciona exactamente igual al anterior pero además de buscar en el fichero local busca las palabras clave en los ficheros incluidos.

Este comando según como tengas configurado ‘complete’ funciona prácticamente igual que CTRL-N , personalmente uso este último porque es mas fácil de recordar y configurable.

Autocompletado de una línea entera:

Para invocarlo CTRL-X_CTRL-L. Este comando no acostumbro a usarlo porque intento ser DRY, si lo usas mucho programando eres poco DRY ;-)

Un ejemplo gráfico con un fichero CSS:

Ejemplo de autocompletado de línea en un fichero CSSEmpecé a escribir la propiedad “font” e invoqué el comando.

Autocompletado de tags:

Para invocarlo CTRL-X_CTRL-]. Este comando autocompleta el texto delante del cursor buscando la coincidencia en la lista de tags.

La lista de tags hay que generarla previamente. En proyectos Rails usando  rails.vim tenemos el comando :Rtags o lo puedes hacer a mano con Exuberant Ctags. Este es un autocompletado que no uso así que no me viene a la cabeza un caso de uso concreto pero he pensado que podía ser útil a otras personas.

Autocompletado de ficheros:

Para invocarlo CTRL-X_CTRL-F. Este comando autocompleta paths y ficheros desde el directorio en el que te encuentras actualmente. Funciona muy bien porque reconoce rutas relativas y absolutas.

Un ejemplo gráfico con un fichero HTML:

Ejemplo de autocompletado de ficheros en un fichero HTML

Invoqué autocompletado sin escribir nada

 

Hay otros comandos de autocompletado que no he nombrado(por ej. las sugerencias de ortografía o el autocompletado de definiciones y macros). Si los queréis ver todos o profundizar sobre el tema os recomiendo la ayuda de Vim :help ins-completion

¡Esto es todo por hoy!

Categories: vim Tags:

Prompt dialog y capybara

Viernes, 11 de junio de 2010 Rafa García Sin comentarios

Escribiendo los tests de borrado de items de una aplicación me encontré con una cosa muy molesta al usar el driver de selenium. Al aparecer el diálogo de confirmación de borrado se quedaba esperando que alguien pulsara el botón de aceptar para empezar con el borrado.

Casualmente en el stand up meeting matinal de hoy uno de los chicos de Chile(Leo) tuvo el mismo problema y las soluciones han sido similares. Aquí os las dejo por si os ocurre lo mismo.

La versión para cucumber:

Y la solución para RSpec de Leo:


Si no usas selenium(el tag @javascript en cucumber) y usas la emulación de javascript de capybara(tag  @emulate_rails_javascript) la pulsación del botón aceptar en el diálogo de confirmación es automágica y no necesitas nada mas.


Saludos y que os vaya bonito.

Categories: rails Tags: , , , ,

Capistrano: Submódulos de los submódulos

Jueves, 13 de mayo de 2010 Rafa García Sin comentarios

Últimamente al “deployar” mi pet-project dejaba de funcionar la aplicación, passenger no arrancaba. Mirando los logs me di cuenta de que la dependencia de prawn y prawn-labels me estropeaban el deploy.

Recomiendan instalar prawn (y prawn-labels) como submódulo y eso por suerte está contemplado en los despliegues con Capistrano, al menos parcialmente, añadiendo la siguiente variable a nuestro deploy.rb:

set :git_enable_submodules, true

Ver fichero: capistrano/lib/capistrano/recipes/deploy/scm/git.rb

De todos modos al hacer un nuevo despliegue la cosa seguía fallando. Siguiendo el proceso a mano resulta que Capistrano solo hace el init y update de los submódulos “raíz”. Quiero decir que si estos tienen mas submódulos no son tenidos en cuenta.

Finalmente dándome un paseo por Internet encontré la solución, se trata de la gema capistrano-deepmodules de morhekil. La cosa es muy simple:

  1. Instalamos la gema “morhekil-capistrano-deepmodules”
  2. Añadimos en nuestro deploy.rb: “require ‘capistrano/deepmodules’”
  3. (Opcional) podemos quitar de nuestro deploy.rb: “set :git_enable_submodules, true”


That’s all folks!

Categories: capistrano Tags: , ,

Git vía SSH y guebs.com

Martes, 6 de abril de 2010 Rafa García Sin comentarios

Montar un repositorio con Git y guebs.com es prácticamente lo mismo que en otros servidores, existe la sutil diferencia de que el puerto que se usa para SSH no es el estándar.

Conectamos a nuestro servidor e iniciamos el repositorio con git:


$ ssh usuario@rafagarcia.net -p 333
$ mkdir foo.git
$ cd foo.git
$ git --bare init

Nota: Paso la opción “bare” para que en ese repositorio solo almacene los deltas y no los ficheros, si vas a navegar por los ficheros desde el servidor no la pongas.


Ahora para añadir ficheros desde nuestro repositorio local:


$ mkdir foo
$ cd foo
$ git init
$ touch README
$ git add README
$ git commit -m 'my first commit'
$ git remote add origin ssh://usuario@hostname:333/home/usuario/foo.git
$ git push origin master

Nota: No olvidar poner el protocolo en la url (“ssh://”).


Esta información ha sido fusilada de los siguientes sitios(thanks!):

Categories: Uncategorized Tags:

Reinstalando el sistema

Lunes, 22 de febrero de 2010 Rafa García Sin comentarios

Este fin de semana iba a hacer una copia de seguridad, instalé lucky backup, lo configuré, lo dejé trabajando y cuando volví mi sistema había cascado. Resulta que alguna opción de configuración le dijo que cambiara los permisos y usuarios de todos los directorios de mi sistema. Después de perder un rato con la consola de recuperación restaurando permisos opté por reinstalar.

La ventaja de tener la home en una partición separada en estos casos tiene un gran valor.

Por otra parte los datos que quería conservar eran:

  • Algunos ficheros de configuración (/etc)
  • Mis bases de datos (/var/lib/mysql)
  • Gemas, paquetes autogenerados, librerías ruby,… (/usr/local)

Leer más…

Categories: Uncategorized Tags: , , ,

Capistrano y deployments sin Rails

Miércoles, 17 de febrero de 2010 Rafa García Sin comentarios

Siguiendo con la tónica de  ”cosas de las que quise hablar en el taller de Capistrano y no pude – episodio 2″.

A veces toca hacer deployment de aplicaciones que no tienen nada que ver con rails, el caso mas claro unas páginas estáticas(solo subir ficheros, sin migration, ni restart).

Para eso Lee Hambley hizo la gema railsless-deploy, básicamente lo que hace es quitar las “railties” de Capistrano. Con esta gema y un pequeño cambio en tu fichero Capfile puedes “deployar” lo que quieras. :-)

Por una vez no me voy a enrollar y a escribir paso a paso un ejemplo porque creo que con las explicaciones que hay en la página de la gema es suficiente.


“Solo puede deployar uno” – Los inmortales

Categories: capistrano Tags:

Redirección transparente a otro dominio por idioma con Apache

Jueves, 11 de febrero de 2010 Rafa García Sin comentarios

Hoy he necesitado hacer una redirección transparente (que el usuario no se entere de que lo estoy llevando a otro lado) según el idioma aceptado del navegador.


Para entendernos, si el usuario iba a http://bar.com con su navegado en inglés debía redireccionarlo a http://en.foo.com pero sin cambiar la dirección del navegador.

Leer más…

Categories: apache Tags:

Capistrano y multistaging

Sábado, 9 de enero de 2010 Rafa García Sin comentarios

Mientras veía caer los copos de nieve por la ventana, observando como cuajaban en el patio, me vino a la mente que este “viernes de Capistrano” tenía que ser diferente, no estaba/estoy lo suficiente inspirado para corregir bugs. Entonces he recordado que tengo una deuda pendiente con la gente que vino al taller de Capistrano en la Conferencia Rails. Hubo varios temas que quería haber tocado pero que tuve que eliminar por falta de tiempo. Así que vamos a por uno de esos temas, el multistaging.

Leer más…

Categories: capistrano Tags: , ,

Manifiesto “En defensa de los derechos fundamentales en internet”

Jueves, 3 de diciembre de 2009 Rafa García Sin comentarios

Ante la inclusión en el Anteproyecto de Ley de Economía sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de Internet manifestamos nuestra firme oposición al proyecto, y declaramos que:

  1. Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.
  2. La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.
  3. La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.
  4. La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.
  5. Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.
  6. Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.
  7. Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.
  8. Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.
  9. Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.
  10. En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.


Categories: Uncategorized Tags: ,

Tus gemas al día con gemcutter

Jueves, 12 de noviembre de 2009 Rafa García Sin comentarios

Con este post no os voy a descubrir nada nuevo a muchos pero aquí quedará para la posteridad.

Ahora que tenemos gemcutter el “awesome gem hosting” (tal como se describen ellos mismos) debemos hacer que nuestro origen principal de gemas sea este.

Esto lo hacemos de manera muy simple y en 3 pasos.


1. Actualizamos Rubygems a la última version:

$ sudo gem update –system

2. Instalamos la gema gemcutter:

$ sudo gem install gemcutter

3. Cambiamos el origen de las gemas con el comando:

$ sudo gem tumble


Esto es todo :-)


Actualización:

Parece que eso no era todo.

Diego, un programador cualquiera ;-) , me ha recordado de que os avise que la orden para actualizar Rubygems(paso 1) se usan 2 guiones que WordPress se ha emperrado en poner como si fuese uno largo.

Categories: ruby Tags: ,