Una de las las características más potentes que tiene el editor vim es la de definir nuestros propios comandos . La ejecución de las mismas puede hacerse desde el modo de comandos, o se puede asociar a una determinada combinación de teclas para que se ejecute cuando se pulse. Los comandos están compuestos de órdenes del editor, son capaces de cambiar el modo de este y de llamar a funciones escritas en vimscript para realizar las tareas que se le indiquen.
Los comandos se definen en la línea de comandos o en nuestro fichero .vimrc. Para definir un comando se usa la orden command seguido del nombre que vaya a tener. Hay algunas restricciones a la hora de elegir el nombre: Según la documentación de vim, debe de empezar por una letra mayúscula1. Si se quiere sobreescribir un comando con el mismo nombre, lo que se hace es usar command!. Si se quiere borrar un determinado comando se usa la orden delcommand seguida del nombre a borrar. Para listar todos los comandos que hay definidos se usa la orden command sin parámetros. Todas estas órdenes deben de hacerse en modo de comandos.
Por ejemplo, si se quiere hacer un comando llamado Insparagraph, que inserte una nueva línea, inserte el siguiente texto:
Además, se quiere que el cursor quede situado en el nuevo entre la línea que está entre los etiquetas HTML. Para ello, nos ponemos en modo comandos, e introducimos el comando:
<p style="text-indent:30px;">
</p>
command Insertparagraph :normal o<p style="text-indent:30px">^M^M</p>^[k
La línea anterior crea el comando Insertparagraph que hace lo siguiente:
- Pasa el editor a modo normal con :normal.
- Pasa el editor a modo inserción en una nueva línea con o.
- Escribe el texto.2
- Se pasa a modo normal, con ESC (^[).
- Se mueve a la línea anterior con k.
Para llamar a este comado lo único que hay que hacer en modo de comando es escribir Insertparagraph. Funciona el completado de comandos, de tal manera que si se pulsa la tecla TAB nos irá mostrando los diferentes comandos que coinciden con el texto introducido.
Si se quisiera borrar la comando anterior, se usaría la orden delcommand Insertparagraph.
Actualización
Aunque para mi, estos comandos son equivalentes a lo que suelo llamar macros, he quitado dicha definición para ajustarme a la terminología del vim, donde macros pueden ser secuencias de teclas que se graban para ejecutarse posteriormente.
Notas
- Puede empezar por un número, pero no es aconsejable. Tampoco se puede usar los nombres de comando X, Next o Print
- Para introducir caracteres espaciales como ^M o ^[ (Escape) lo que se hace es pulsar CTRL-V enter en el primer caso y CTRL-V Esc para el segundo.