sábado, febrero 09, 2013

vim: Modos básicos


Una característica peculiar del vim es que es un editor modal. Según el modo de funcionamiento en el que se encuentre en un determinado momento, se podrán realizar unas acciones u otras.

Los modos originales del vi o vim

El vi original tiene tres modos: El modo normal, el modo de insercción y el modo de línea de comandos. El vim se comporta exactamente igual que el vim original en estos modos. A continuación se describen los tres:

  • Modo normal:

    Este es el modo normal en el que el vim comienza su ejecución. Para moverse, buscar o borrar el texto que se está editando. Desde este modo se puede pasar a cualquiera de los otros dos. Si se pulsa los :,/,? o !, se pasará al modo línea de comandos. Si se introduce uno de los comandos que permiten la edición de texto como i, I,a,A,o,O,c,C,s,S, el editor pasará automáticamente a modo edición.

  • Modo de inserción:

    En el modo edición se usa para introducir nuestro texto en el buffer que estamos editando en ese momento. Para salir de dicho modo y volver al modo normal, se pulsa la tecla ESCAPE (ESC). No se puede pasar del modo de edición al modo de comandos directamente.

  • Modo de línea de comandos

    En modo de comandos se tienen diferentes opciones en función del mecanismo que se use para activarlo. Si se llega a través de los comandos de búsqueda, / o ?, se ejecutará una búsqueda dependiendo de las opciones que se le pasen al editor. Si se llega a través de : se podrá introducir diferentes comandos que el vim ejecutará. Por último si se llega a través de !, se podrá ejecutar una orden del sistema tras el signo de admiración que use el texto del buffer actual como entrada. Para salir de este modo, se puede pulsar ESCAPE (ESC)1, cancelándose la orden que se estuviese introduciendo y volviendo a modo normal, pulsar ENTER - realmente una combinación que produzca un retorno de carro o una nueva línea -, pulsar CTRL-C para cancelar el comando.

    Desde el modo de línea de comandos se puede pasar al modo de edición con :start

Lo anterior queda recogido en este pequeño esquema:


Los modos nuevos en vim

Vim tiene una serie de modos nuevos adicionales a los descritos en el apartado anterior. Estos son:

  • Modo visual.

    El modo visual se utiliza para seleccionar texto y aplicarle los operadores que se deseen. Desde modo normal pasamos a visual pulsando v - con lo que el bloque se seleccionará carácter a carácter -, V - en este caso el bloque se seleccionará línea a línea - o CTRL-V - que se puede usar para seleccionar un bloque completo de texto -. Una vez que se acaba de seleccionar, se pueden hacer una serie de operaciones, aunque éstas varían según se haya seleccionado el texto en bloques, líneas o caracteres.

  • Modo de selección

    Este modo es muy simular a la manera de seleccionar texto que existe en las aplicaciones de Microsoft Windows. Como entrar en este modo depende del valor de la variable selectmode. Puede entrarse en este modo si se selecciona con el ratón un área de texto2, con pulsar un comando que mueva el cursor junto a la tecla shift3 - siempre que esté configurado5, las mismas teclas usadas en el modo visual , siempre que selectmode contenga la palabra cmd, o bien desde modo normal con los comandos gh o gH, según se quiera seleccionar trozos de texto por caracteres o por líneas.

    En este caso, si se escriben caracteres que pueden ser representados en pantalla o se pulsa enter4, vim borrará el texto seleccionado, y pasará a modo de edición. Se puede extender la selección usando comandos de movimiento siempre que éstos estén acompañados de pulsar la tecla shift3 y que el vim esté configurado adecuadamente5

    Las operaciones que pueden hacerse sobre el texto seleccionado de esta manera son distintas que en el caso del modo visual. Desde este modo podemos pasar para un comando CTRL-O a modo visual o directamente a éste modo con CTRL-G

  • Modo Ex
    Se pasa al modo del antiguo editor de Unix ex.Desde modo normal se entra en modo Ex pulsando Q o qQ. En el primer caso se funciona editando comandos con capacidades de edición de textos en la línea similares a las de una shell normal, mientras que en el segundo, están disponibles todos los mapeos y facilidades de edición que hay presentes en vim en el modo comandos. En este modo, podemos ir introduciendo comandos uno detrás de otro sin que se actualice el texto. Se sale del mismo con :visual.

Además existen otros seis modos adicionales que son combinaciones de los anteriores, que describiré en una próxima entrada así como se debe de configurar el vim que muestre en la línea de estado cual es el actual modo.

Todo lo descrito en esta sección puede verse en el siguiente esquema. Lo único que no ha sido reflejado es la manera de ir a modo de selección, puesto que ésto depende de la configuración.


Referencias

  1. Vim modes intro (inglés)
  2. Using normal-mode motions in command-line mode in Vim

Notas

  1. Ojo, esto es comportamiento de vim. El vi original, si se pulsa escape se ejecuta la línea. Se puede simular dicho comportamiento con un mapeo de teclas.
  2. Suponiendo que estamos usando una versión de vim compilado con soporte de ratón, lo más normal si se está ejecutando bajo un entorno gráfico.
  3. Mayúsculas
  4. Realmente si se introduce el retorno de carro (CR) o el avance de línea (LF)
  5. Consiste en que la lista de la variable de configuración keymodel aparezca las palabras startsel y stopsel, y además selectmode debe contener la palabra key.

Technorati Tags: vim

No hay comentarios: