Siguiente: Recordar el lugar en
Subir: Utilidades adicionales
Anterior: Otras cuestiones relacionadas con
  Índice General
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.
Siguiente: Recordar el lugar en
Subir: Utilidades adicionales
Anterior: Otras cuestiones relacionadas con
  Índice General
Cancerbero
2005-02-12