next up previous contents
Siguiente: Recordar el lugar en Subir: Utilidades adicionales Anterior: Otras cuestiones relacionadas con   Índice General

Conexión con comandos del sistema operativo

En Vim podemos ejecutar comandos del sistema operativo pasándoles como argumento nuestro buffer de edición, o algún rango dentro de él, y ver el resultado de dichos comandos o incluso integrarlo en el buffer objeto de edición. Los comandos para hacer esto son 0 0«!0 0», 0 0«!!0 0», 0 0«:write !comando0 0», 0 0«read: !comando0 0». Veámoslos por separado:

El comando ``!''
Mediante este comando podemos señalar una parte del fichero (un ámbito de actuación del comando) y enviarla como argumento de entrada a algún comando externo a Vim, recogiendo luego el resultado del mismo y colocándolo en lugar del texto que se usó como argumento. Esta operación se hace fundamentalmente para aprovechar el comando ``sort''.

El ámbito para ``!'' puede indicarse por cualquiera de los procedimientos habituales. Si no indicamos el rango de forma manual, tras haber pulsado ``!'' y el comando que delimite el ámbito (un movimiento del cursor, un objeto de texto, un texto previamente seleccionado), el cursor saltará a la línea inferior y, tras escribir el rango de líneas que se haya seleccionado y el comando ``!'', esperará a que escribamos el nombre del comando externo a ejecutar.

Por ejemplo: para ordenar alfabéticamente las cinco próximas líneas deberíamos escribir 0 0«!5$0 0», y luego 0 0«sort0 0» o, directamente escribir: 0 0«:.,+4!sort0 0».

El comando ``!!''
Es similar a 0 0«!0 0» pero actúa sobre la línea actual, por lo tanto no espera a que se le indique ningún rango. Así por ejemplo 0 0«!!date0 0» reemplazará la línea actual con la fecha del sistema.

El comando ``:!comando''
Este comando es como 0 0«!0 0» pero sin indicación de ámbito. Para conseguirlo hay que teclear los dos puntos antes que ``!''. El efecto será que el comando que a continuación se escriba será ejecutado y su resultado mostrado en pantalla.

El comando ``:write !comando''
Este comando primero graba el buffer y luego envía el fichero grabado como argumento al comando que se le indique, mostrando a continuación en pantalla el resultado producido por dicho comando, pero sin insertar dicho resultado en nuestro buffer. Es muy parecido al anterior, la diferencia está en que en el anterior no se enviaba nuestro buffer como argumento para el comando.

El comando ``:read !comando''
Este comando ejecuta una utilidad externa e inserta en nuestro buffer su salida. Podemos indicar el número de línea bajo el que se insertará la salida. Si no decimos nada esta se insertará en la posición del cursor. La inserción se producirá tras la línea indicada, por lo que para insertar al principio del buffer hay que indicar como número de línea el valor 0. Así, por ejemplo, 0 0«:0read !ls0 0» insertará la salida del comando 0 0«ls0 0» al principio del fichero.

El comando ``K''
Este comando ejecuta el programa almacenado en la opción ``keywordprg'' (que por defecto es man) pasándole como argumento la palabra sobre la que se encuentre el cursor. Si la opción ``keywordprg'' estuviera vacía se ejecutaría el comando 0 0«:help0 0». Si recibe un prefijo numérico este se interpretará como la sección del manual en el que hay que buscar (en el caso de que el valor de keywordprg siga siendo el de man).

El comando ``:shell''
suspende la ejecución de Vim e inicia un shell nuevo. Cuando salgamos de él volveremos a Vim. Si Vim se está ejecutando en modo gráfico, es posible que la consola desde la que se ejecuta nuestra shell no sea totalmente operativa. Un efecto parecido se obtiene pulsando en el modo normal y ejecutándose Vim en una terminal de texto CTRL-Z (en modo gráfico CTRL-Z se limita a minimizar la ventana). La diferencia es que en este último caso, Vim suspende su ejecución, pasa al segundo plano, y devuelve el control al mismo shell desde el que fue llamado y no a uno nuevo. El comando 0 0«:suspend0 0» hace lo mismo. Para recuperar el control de Vim hay que volverlo a traer al primer plano.

El funcionamiento de estas utilidades que conectan a nuestro buffer con comandos externos al propio Vim depende del valor de varias opciones: shell, shellcmdflag, shellquote, shellxquote, sheltype, shelsplash y shelredir. Si se produce algún problema o funcionamiento imprevisto hay que consultar la ayuda de estas opciones y asegurarse de que tienen el valor correcto.

En ocasiones alguna de las utilidades externas puede alterar a la visualización de la pantalla sin que Vim se percate de ello. En tal caso para redibujar la pantalla hay que pulsar CTRL-L

En fin: además de estos comandos, Vim incorpora como comandos propios algunos comandos del shell, como 0 0«:cd0 0», 0 0«:ls0 0», 0 0«:grep0 0»... Algunos de ellos actúan sobre variables internas de Vim similares a las de la shell; otros capturan el resultado y lo integran en el buffer, otros solamente muestran el resultado de dichos comandos.


next up previous contents
Siguiente: Recordar el lugar en Subir: Utilidades adicionales Anterior: Otras cuestiones relacionadas con   Índice General
Cancerbero 2005-02-12