Domingo, Noviembre 19, 2006

Vim y plantillas

Aunque no se muy bien cómo titular esta entrada, este es un pequeño truco para desarrolladores. Vamos a tomar como ejemplo C++ y que cada uno lo extienda a su caso particular. Casi siempre en un proyecto el esqueleto de una cabecera para una clase y de su fichero cpp es muy similar, tanto que yo siempre acabo por crearme un “Dummy.h” y un “Dummy.cpp”, con esta pinta:

#ifndef _MyProject_DUMMY_HPP_
#define _MyProject_DUMMY_HPP_
#include "Referenced.h"
namespace MyProject {
    class Dummy : public Referenced
    {
    public:
        Dummy();
    protected:
        ~Dummy();
        Dummy & operator= (const Dummy&) { return *this; }
    private:
    };
} // end of MyProject namespace
#endif
//------ y este es el cpp --------------
#include <MyProject/Dummy.h>
namespace MyProject {
} // end of MyProject namespace

El código en si no es lo importante, en lo que hay que fijarse es que si usamos este fichero como plantilla hay mucho “Dummy” que cambiar por el nombre de la nueva clase. Para ello nada más fácil que:

:%s/Dummy/MiClase/g
:%s/DUMMY/MICLASE/g

El primero va bien, el segundo también, pero cuando llevas 15 te hartas de los “:%s”, y aquí viene el truco, dejemos que vim haga su faena:

function Dummy()
    let name = expand("%:t:r")
    execute "%s/DUMMY/".toupper(name)."/g"
    execute "%s/Dummy/".name."/g"
endfunction

Se invoca con “: call Dummy()” y hace toda la faena por ti tomando como nombre a reemplazar el nombre del fichero que estamos editando.

posteado por PpluX @ 12:42 pm tags:Programación, Vim, recetas  

Jueves, Julio 20, 2006

SnippetsEmu: TextMate for Vim

snippetsEmu logo
El autor de SnippetsEmu ha abierto un blog para ir comentando el desarrollo de este plugin para vim que permite tener snippets como los de TextMate. El script se puede bajar directamente de la pagina de plugins de vim. Probadlo es más que recomendable y en la ultima versión tiene soporte para modo TextMate completando con el tab.

posteado por PpluX @ 10:59 am tags:Vim  

Lunes, Junio 5, 2006

GVim con fondo negro

Muchas veces he arrancado vim dentro de una consola sólamente por tener el fondo oscuro con las letras claras ( de noche mola más ). Para poder tener esta misma configuración en gvim puedes añadir estas linea a tu ~/.vimrc.

highlight Normal guibg=Black guifg=White


y si ya quieres que vim tenga aspecto de consola, sin menú ni botonera puedes usar esta opción:

set guioptions=agirLt


Este guioptions es el que viene por defecto, pero quitando las opciones “m” y “T” de (menu y toolbar).

posteado por PpluX @ 10:51 am tags:Vim, recetas  

Martes, Enero 17, 2006

Snippets de TextMate para Vim (v2.0)

Vale, después de escribir al autor me mandó una versión previa que debería funcionar con tabs. Me lo mandó deprisa y corriendo, así que obviamente no funcionaba y el problema básicamente se debe a que cuando sales del modo inserción y vuelves a él, el cursor se mueve perdiendo toda posibilidad de poder insertar correctamente un tab. La solución pasa por el vim-truco #102 donde se explica como llamar a una función sin salir del modo inserción. Así que le he mandado al autor una versión modificada de su script que funciona con tabs. Si lo queréis probar en primicia ;) lo dejo colgado aquí: snippetsEmu.vim

posteado por PpluX @ 10:38 am tags:Vim  

Lunes, Enero 16, 2006

Snippets de TextMate para Vim

Para el qué aun no haya visto TextMate en acción sólo tiene que curiosear cualquiera de los screencasts de ruby on rails, se trata de una de estas aplicaciones que le cambian a uno el concepto de editor por completo. Dan ganas de comprar una licencia (39$), aunque además tendrás que comprarte algo que funcione con Mac OS X (que tampoco es mala idea :)).

Pero para los vimmeros ha llegado la solución, SnippetsEmu, se trata de un script para vim con muy poco tiempo pero que funciona realmente bien, el autor lo está actualizando con bastante frecuencia y me juego que este va a ser pronto uno de los scripts más cotizados en el top-rated.

 Update: Originalmente este post iba a explicar como usarlo, y algún que otro ejemplo. Pero he estado curioseando el código y no me ha acabado de convencer como está hecho. Funciona muy bien y lo pienso usar, pero aun le falta. En cualquier caso os dejo unas notas de uso para que no perdáis mucho el tiempo:

  • Los mappings en vez de con iabbr, se hacen con Iabbr (i-latina-mayúscula)
  • los tag del tipo <elem:element>, son tags que tienen valor por defecto. En este caso el nombre del tag es “element” (lo que implica que cualquier cosa que se ponga aquí afecará al resto de tags de tipo ) el “elem” es en si el valor por defecto (si no se escribe nada y se pasa a la siguiente etiqueta se podrán ese valor).
  • Es muy cómodo añadir un tag vacío “<>” al final de la plantilla, o en el último punto, para quedarnos ahí editando después de dar valor a todos los tags.
  • <CR> sirve para poner retornos de carro y <TAB> para poner un tab, estas etiquetas son del vim pero son muy prácticas para hacer los mappings.
  • Mirad la parte de ejecutar código, es realmente útil ( en etiquetas del tipo <foo:substitute(@z,’.*’,'\U\0′,”g”)>) Donde @z es una variable que tendrá el valor que el usuario pusiera en <foo> previamente.
  • Dercargad el script y dejadlo en directorio ~/.vim/plugin/ , los ficheros con los Iabbr dejadlos en directorio ~/.vim/after/plugin/ para que se carguen automáticamente pero siempre después del plugin.
  • Si queréis usarlo para editar .rhtml (ruby on rails views) os aconsejo esto para el .vimrc:
    • au BufNewFile,BufRead *.html,*.rhtml let g:snip_start_tag = “@”
      au BufNewFile,BufRead *.html,*.rhtml let g:snip_end_tag = “@”
    • De esta forma se usa el símbolo @ en vez de “<>” para marcar los snippets y no molesta con el resto de html
  • Por defecto el script funciona saltando con la tecla <S-Del> (shift-del o mayúsculas-del), se puede cambiar escribiendo en el ~/.vimrc   imap TECLA <Plug>Jumper.

A probar :)

PD: La intención es hacer en un futuro, cuando tenga tiempo, una versión que funcione con “tab” de forma más similar al textmate. Por lo visto en el código hubo una revisión que comentando y descomentando unas líneas se podía usar con el tab pero el autor lo descontinuó. En definitiva se debería poder hacer más sencillo y más práctico, ya os contaré cómo es el mundo del scripting en vim.

posteado por PpluX @ 1:03 am tags:Vim  

Martes, Septiembre 27, 2005

VimTrucos: Cambiar de buffer sin tener que escribirlos

Al hilo del post anterior, Vim nos permite editar varios ficheros en diferentes buffers en una única instancia, esto se hace con la opción de –remote, –remote-silent, etc que en vez de abrir una nueva instancia lo añaden a un vim ya existente (para determinar qué instancia utilizar, se puede lanzar con la opción –servername nombre_de_instancia). El problema con esto es que no puedes editar cómodamente varios ficheros si para cambiar de un buffer a otro toca guardarlo o el vim se queja…

La opción más cómoda para cambiar de buffer consiste en jugar con la ocultación de buffers mediante el comando hide, concretamente para cambiar al siguiente buffer ocultando el actual podemos escribir en modo comando :hide bn. Pero aun resulta mejor si lo bindeamos a alguna tecla, Control+Tab por ejemplo:


:map :hide bn

Si este comportamiento te gusta ya sabes, añádelo a tu vimrc correspondiente ;)

PD: Si quieres guardar todos los buffers modificados a la vez… :wa es tu solución

Update: Miguel sugiere que otra forma es “forzando” el cambio con :bn!, efectivamente no guarda el fichero :D y funcionalmente hace lo mismo. También es cierto que se pueden mapear otras teclas como <C-Left> haciendo :bp (previous buffer) y <C-Right> a :bn (next buffer)

posteado por PpluX @ 12:21 pm tags:Vim  

Martes, Septiembre 27, 2005

Vim y Visual Studio

A falta de ViEmu ( plugin de VS para usar el editor como el vim) curioseando en la instalación de gvim para windows me he encontrado con un fichero llamado vim_vs_net.cmd, que se supone sirve para editar con el vim como herramienta externa. Esta es una micro-guía para hacerlo funcionar y poder editar cómodamente con el vim en Visual Studio (.Net).

Dentro de nuestra instalación de GVim para windows hay un directorio llamado tools donde se encuentra el fichero vim_vs_net.cm que tendremos que modificar ya que por sí mismo no funciona (por lo menos a mi no me funcionaba). Copia el fichero a uno nuevo o modifícalo y déjalo así (haz lo que quieras con los comentarios):

start "Ejecutando vim..." "C:\Archivos de programa\Vim\vim63\gvim.exe"  --servername VS_NET --remote-silent "%1" "%2"

Cambia la ruta convenientemente en función de dónde tengas instalado el GVim. Ahora vamos al Visual Studio para añadir una nueva herramienta externa:

  • Herramientas -> Herramientas externas…
  • Agregar
  • Título: Edit with Vim
  • Comando: C:\Tu_ruta_del_vim\tools\vim_vs_net.cmd
  • Argumentos: +$(CurLine) $(ItemPath)
  • Marcamos la opción de Cerrar al salir

En el menú Herramientas aparece ahora una opción nueva titulada Edit with Vim que lanzará el vim con el fichero que actualmente estemos editando y además se irá a la linea en la que nos encontrábamos. No hace falta estar editando los ficheros realmente, también puedes marcalos en el explorador de soluciones y seleccionar la opción de Edit with Vim. El problema es que modificar un fichero hace que se queje el VS diciendo “quiere recargarlo?”, además de que resulta incómodo tener que ir al menu para poder editar con nuestro querido vim, pero esto tiene fácil solución:

Hotkeys para lanzar el Vim:

  • Herramientas -> Personalizar
  • Volvemos al menu Herramientas y nos fijamos que número de herramienta externa nos ha colocado el vim (o contamos), en mi caso es el Commando externo 7.
  • En el diálogo Personalizar pulsamos en el botón de Teclado…
  • Creamos una Combinación de asignación de teclado nueva presionando sobre Guardar como…
  • Buscamos en el campo de comandos comandoexterno7 (7 en mi caso) y nos situamos sobre la casilla de Téclas de método abreviado
  • Presionamos la combinación de teclas que queramos asignalres por ejemplo Alt+Enter y Asignamos
  • Aceptar

De esta forma mapearemos el Vim a una combinación de teclas.

Auto-Recarga del fichero en el VS:

  • Herramientas->Opciones
  • En la pestaña de Entorno->Documentos
  • Marcamos la opción: Detectar si se modifica el archivo fuera del entorno
  • Marcamos la opción: Cargar los cambios automáticamente(…)

De esta forma el VS no se quejará cada vez que cambiemos algo en el vim y lo cargará automáticamente.

A disfrutar programando… aunque tenga que ser en windows, pero mejor con el VIM!!!

posteado por PpluX @ 12:03 pm tags:Programación, Vim  

Jueves, Julio 28, 2005

Plugin de Vim para Visual Studio

Para todos aquellos que tienen que programar en Visual Studio (por placer, trabajo o penitencia) ha salido un plugin para poder utilizar el estilo vim/vi en esta herramienta de desarrollo. Se llama ViEmu y aunque es de pago (D’oh!!!), puede ser una buena inversión para todos aquellos que son mucho más productivos usando herramientas de edición tan versátiles y portentes como el vim.

Fuente: Versión Cero

Por otro lado….

:help MSVisualStudio

The OLE version can be used to run Vim as the editor in Microsoft Visual
Studio.  This is called "VisVim".  It is included in the archive that contains
the OLE version.  The documentation can be found in the runtime directory, the
README_VisVim.txt file.

Se refiere a la versión para windows que viene con un componente OLE para integrar el editor en cualquier aplicación, y teóricamente se debe poder integrar con el Visual Studio. Eso sí, yo personalmente no lo he conseguido y claro está, a diferencia del ViEmu no tienes cosas como el Intellisense integrado que es de lo mejor que tiene el VS. Revisando la página de Vim parece que tendremos que probar el Tip #946 , que está pensado para el VS.net

posteado por PpluX @ 4:50 pm tags:Programación, Vim  
« Entradas anteriores

Gestionado con WordPress