Ejecutar un programa dentro del editor vi

El comando :!cmd ejecutará el comando cmd. :sh ejecutará un shell interactivo. Dentro de este shell, podrías si quisieses, ejecutar el editor vi de nuevo. Esto es particularmente útil cuando estas editando makefiles y ficheros de configuración de programas en un intento de hacer que un programa compile. La ventaja sobre :e es que no necesitas salvar el fichero, y que estarás en el mismo sitio cuando salgas del shell (aconsejo salvar el fichero de todos modos …).

¡Hubo un apagón mientras escribía con el vi!

Bien, deberías haber recibido un correo con un mensaje al respecto, pero deberías ser capaz de recuperar el fichero tecleando vi –r donde es el nombre del fichero que estabas editando en el momento del apagón o caída del sistema. vi –r te dará una lista de ficheros que pueden ser recuperados.

¿Como hacer más amigable la programación con vi?

  • :set ai.- hará que vi realice la autoindentación por ti.
  • :set sw=#.- donde # es un número que fijará el shiftwidth (ancho de tabulador). Puedes utilizar <<, >> para desplazar una línea “shiftwidth” caracteres a la izquierda o a la derecha respectivamente. Además, puedes utilizar < % para desplazar un conjunto {, (, [ a la izquierda o > % para hacer el desplazamiento a la derecha. Debes estar en la parte superior del {, }, (, ), [ o ] específico del par para desplazarlos.
  • :set sm.- mostrará el {, ( or [ correspondiente cuando escribes el }, ), ] que lo cierra. Es la mejor forma de que no se te quede un carácter de bloque {, (, [ sin su pareja.
  • :set lisp.- realizará algunos cambios que son útiles para la programación en lisp. () se moverá hacia atrás y forth a través de las expresiones, y {} se moverá sin detenerse en los átomos.

Escribiendo Macros

Una macro es un nombre de comando que representa un conjunto de operaciones. Las macros suelen ser utilizadas cuando se ejecutan una serie de comandos frecuentemente y siempre en el mismo orden.

El nombre de la macro puede ser una o más letras o una tecla de función. Las macros se pueden definir para modo comando o modo texto según se desee. Es importante señalar que la macro debe ser una palabra completa. No funciona cuando la macro se encuentra formando parte de una palabra.

Para definir las macros se puede hacer de las siguientes formas:

Macros en modo comando.- :map [#] nombre_macro definición
Macros en modo texto.- :map ! [#] nombre_macro definición

Donde nombre_macro puede ser de hasta 10 caracteres (aunque es preferible que dicho nombre sea exclusivamente una letra) y definición de hasta 100 caracteres.

Si se utilizan múltiples comandos en la definición, no es necesario que estén separados. Existen una serie de caracteres de control que se pueden utilizar dentro de la definición de las macros:

Los nombres de las macros no deberían ser letras del editor vi que se utilicen en modo comando, como por ejemplo la “a” para añadir, la “o” para insertar líneas, etc.

Recuerda utilizar ^V antes de cualquier carácter de control que pudieses utilizar.

:unmap <lhs>.- eliminará la macro.
:map! <lhs><rhs>.- hará que <lhs> inserte <rhs> en el texto del documento.

Mapear tecla de función para que se comporte como una Macro

Si en la definición de la macro se especifica #n donde n es un número entre 0 y 9, se mapeará con la tecla de función apropiada.

Ejemplo:

:map #1 :set all.- Cuando pulsemos la tecla de función F1 será igual que si tecleamos “:set all” para que nos muestre todas las variables de entorno.