103.8 Lección 1
Certificación: |
LPIC-1 |
---|---|
Versión: |
5.0 |
Tema: |
103 Comandos GNU y Unix |
Objetivo: |
103.8 Edición básica de archivos |
Lección: |
1 de 1 |
Introducción
En la mayoría de las distribuciones de Linux, vi
, abreviatura de “visual”, está preinstalado y es el editor estándar en el entorno de shell. Vi es un editor de texto interactivo, muestra el contenido del archivo en la pantalla mientras se está editando. Como tal, permite al usuario moverse y realizar modificaciones en cualquier parte del documento. Sin embargo, a diferencia de los editores visuales del escritorio gráfico, el editor vi
es una aplicación de shell con atajos de teclado para cada tarea de edición.
Una alternativa a vi
, llamada vim
(vi mejorado), a veces se usa como un reemplazo moderno de vi
. Entre otras mejoras, vim
ofrece soporte para resaltado de sintaxis, deshacer/rehacer multinivel y edición de varios documentos. Aunque tiene más recursos, vim
es totalmente compatible con vi
, lo que hace que ambos sean indistinguibles para la mayoría de las tareas.
La forma estándar de iniciar vi
es darle una ruta a un archivo como parámetro. Para saltar directamente a una línea específica, su número debe ser informado con un signo más, como en vi +9 /etc/fstab
para abrir /etc/fstab/
y colocar el cursor en la novena línea. Sin un número, el signo más por sí solo coloca el cursor en la última línea.
La interfaz de vi
es muy simple: todo el espacio disponible en la ventana de la terminal está ocupado para presentar un archivo, normalmente informado como un argumento de comando, al usuario. Las únicas pistas visuales son una línea de pie de página que muestra la posición actual del cursor y una tilde ~
que indica dónde termina el archivo. Hay diferentes modos de ejecución para vi
donde cambia el comportamiento del programa. Los más comunes son: modo inserción y modo normal.
Modo de Inserción
El modo de inserción es sencillo: el texto aparece en la pantalla a medida que se escribe en el teclado. Es el tipo de interacción que la mayoría de los usuarios esperan de un editor de texto, pero no es la forma en que vi
presenta un documento por primera vez. Para ingresar al modo de inserción, el usuario debe ejecutar un comando de inserción en el modo normal. La tecla Esc finaliza el modo de inserción y vuelve al modo normal, el modo vi
predeterminado.
Note
|
Si está interesado en saber más sobre los otros modos de ejecución, abra :help vim-modes-intro |
Modo Normal
El modo normal, también conocido como modo de comando, es cómo se inicia vi
de forma predeterminada. En este modo, las teclas del teclado están asociadas con comandos para tareas de manipulación de texto y navegación. La mayoría de los comandos de este modo son teclas únicas. Algunas de las teclas y sus funciones en modo normal son:
0
,$
-
Ve al principio y al final de la línea.
1G
,G
-
Vaya al principio y al final del documento.
(
,)
-
Vaya al principio y al final de la oración.
{
,}
-
Vaya al principio y al final del párrafo.
w
,W
-
Saltar palabra y saltar palabra, incluida la puntuación.
h
,j
,k
,l
-
Izquierda, abajo, arriba, derecha.
e
oE
-
Ir al final de la palabra actual.
/
,?
-
Busca hacia adelante y hacia atrás.
i
,I
-
Ingrese al modo de inserción antes de la posición actual del cursor y al comienzo de la línea actual.
a
,A
-
Ingrese al modo de inserción después de la posición actual del cursor y al final de la línea actual.
o
,O
-
Agregue una nueva línea e ingrese al modo de inserción en la línea siguiente o en la línea anterior.
s
,S
-
Borre el carácter debajo del cursor o toda la línea e ingrese al modo de inserción.
c
-
Cambie el (los) carácter (es) debajo del cursor.
r
-
Reemplaza el carácter debajo del cursor.
x
-
Elimina los caracteres seleccionados o el carácter debajo del cursor.
v
,V
-
Inicie una nueva selección con el carácter actual o la línea completa.
y
,yy
-
Copia (tira) los caracteres o la línea completa.
p
,P
-
Pega el contenido copiado, antes o después de la posición actual.
u
-
Deshace la última acción.
Ctrl-R
-
Rehace la última acción.
ZZ
-
Cerrar y guardar.
ZQ
-
Cerrar y no guardar.
Si está precedido por un número, el comando se ejecutará el mismo número de veces. Por ejemplo, presione 3yy
para copiar la línea actual más las dos siguientes, presione d5w
para eliminar la palabra actual y las 4 palabras siguientes, y así sucesivamente.
La mayoría de las tareas de edición son combinaciones de varios comandos. Por ejemplo, la secuencia de teclas vey
se utiliza para copiar una selección desde la posición actual hasta el final de la palabra actual. La repetición de comandos también se puede usar en combinaciones, por lo que v3ey
copiaría una selección comenzando en la posición actual hasta el final de la tercera palabra desde allí.
vi
puede organizar el texto copiado en registros, lo que permite mantener distintos contenidos al mismo tiempo. Un registro se especifica con un carácter precedido por "
y una vez creado se mantiene hasta el final de la sesión actual. La secuencia de teclas "ly
crea un registro que contiene la selección actual, que será accesible a través de la tecla l
. Luego, el registro l
se puede pegar con "lp
.
También hay una forma de establecer marcas personalizadas en posiciones arbitrarias a lo largo del texto, lo que facilita el salto rápido entre ellas. Las marcas se crean presionando la tecla m
y luego una tecla para abordar la posición actual. Una vez hecho esto, el cursor volverá a la posición marcada cuando se presione '
seguido de la tecla elegida.
Cualquier secuencia de teclas puede registrarse como una macro para su ejecución futura. Se puede grabar una macro, por ejemplo, para rodear un texto seleccionado entre comillas dobles. Primero, se selecciona una cadena de texto y se presiona la tecla q
, seguida de una tecla de registro para asociar la macro, como d
. La línea recording @d
aparecerá en la línea del pie de página, indicando que la grabación está activada. Se supone que ya se ha seleccionado algún texto, por lo que el primer comando es x
para eliminar (y copiar automáticamente) el texto seleccionado. Se presiona la tecla i
para insertar dos comillas dobles en la posición actual, luego Esc regresa al modo normal. El último comando es P
, para volver a insertar la selección eliminada justo antes de la última comilla doble. Si presiona q
nuevamente, finalizará la grabación. Ahora, una macro que consta de la secuencia de teclas x
, i
, ""
, Esc y P
se ejecutará cada vez que se presionen las teclas @d
en modo normal, donde d
es la clave de registro asociada con la macro.
Sin embargo, la macro estará disponible solo durante la sesión actual. Para que las macros sean persistentes, deben almacenarse en el archivo de configuración. Como la mayoría de las distribuciones modernas usan vim como editor compatible con vi, el archivo de configuración del usuario es ~/.vimrc
. Dentro de ~/.vimrc
, la línea let @d = 'xi""^[P'
establecerá el registro d
en la secuencia de teclas entre comillas simples. El mismo registro asignado previamente a una macro se puede utilizar para pegar su secuencia de teclas.
Comandos Colon
El modo normal también admite otro conjunto de comandos vi
: los comandos colon. Los comandos de dos puntos, como su nombre indica, se ejecutan después de presionar la tecla de dos puntos : en modo normal. Los comandos de dos puntos permiten al usuario realizar búsquedas, guardar, salir, ejecutar comandos de shell, cambiar la configuración de vi
, etc. Para volver al modo normal, se debe ejecutar el comando :visual
o la tecla Enter presionado sin ningún comando. Aquí se indican algunos de los comandos de dos puntos más comunes (la inicial no es parte del comando):
:s/REGEX/TEXT/g
-
Reemplaza todas las apariciones de la expresión regular
REGEX
porTEXT
en la línea actual. Acepta la misma sintaxis del comandosed
, incluidas las direcciones. :!
-
Ejecutar el comando de shell especificado a continuación.
:quit
o:q
-
Salir del programa.
:quit!
o:q!
-
Salir del programa sin guardar.
:wq
-
Guardar y Salir.
:exit
o:x
o:e
-
Guardar y salir, si es necesario.
:visual
-
Volver al modo de navegación.
El programa estándar vi
es capaz de realizar la mayoría de las tareas de edición de texto, pero se puede usar cualquier otro editor no gráfico para editar archivos de texto en el entorno de shell.
Tip
|
Los usuarios novatos pueden tener dificultades para memorizar todas las teclas de comando de |
Editores alternativos
Los usuarios que no estén familiarizados con vi
pueden tener dificultades para adaptarse a él, ya que su funcionamiento no es intuitivo. Una alternativa más simple es GNU nano
, un pequeño editor de texto que ofrece todas las funciones básicas de edición de texto como deshacer/rehacer, colorear sintaxis, búsqueda y reemplazo interactivos, sangría automática, números de línea, finalización de palabras, bloqueo de archivos, respaldo de archivos y apoyo a la internacionalización. A diferencia de vi
, todas las pulsaciones de teclas se insertan en el documento que se está editando. Los comandos en nano
se dan usando la tecla Ctrl o la tecla Meta (dependiendo del sistema, Meta es Alt o ⌘).
Ctrl-6
oMeta-A
-
Iniciar una nueva selección. También es posible crear una selección presionando Shift y moviendo el cursor.
Meta-6
-
Copia la selección actual.
Ctrl-K
-
Cortar la selección actual.
Ctrl-U
-
Pegar el contenido copiado.
Meta-U
-
Deshacer.
Meta-E
-
Rehacer.
Ctrl-\
-
Reemplazar el texto en la selección.
Ctrl-T
-
Iniciar una sesión de revisión ortográfica para el documento o la selección actual.
Emacs es otro editor de texto muy popular para el entorno de shell. Mientras que el texto se inserta simplemente escribiéndolo, como en nano
, la navegación a través del documento es asistida por comandos de teclado, como en vi
. Emacs incluye muchas características que lo convierten en algo más que un editor de texto. También es un IDE (entorno de desarrollo integrado) capaz de compilar, ejecutar y probar programas. Emacs se puede configurar como cliente de correo electrónico, noticias o RSS, lo que lo convierte en una auténtica suite productiva.
El propio shell ejecutará un editor de texto predeterminado, generalmente vi
, cada vez que sea necesario. Este es el caso, por ejemplo, cuando se ejecuta crontab -e
para editar cronjobs. Bash usa las variables de sesión VISUAL
o EDITOR
para encontrar el editor de texto predeterminado para el entorno de shell. Por ejemplo, el comando export EDITOR=nano
define nano
como el editor de texto predeterminado en la sesión de shell actual. Para que este cambio sea persistente en todas las sesiones, el comando debe incluirse en ~/.bash_profile
.
Ejercicios Guiados
-
vi
se usa principalmente como editor para archivos de configuración y código fuente, donde la sangría ayuda a identificar secciones de texto. Una selección se puede sangrar a la izquierda presionando<
y a la derecha presionando>
. ¿Qué teclas deben presionarse en modo normal para sangrar la selección actual tres pasos a la izquierda? -
Se puede seleccionar una línea completa presionando
V
en el modo normalvi
. Sin embargo, también se incluye el carácter de nueva línea de terminación. ¿Qué teclas se deben presionar en modo normal para seleccionar desde el carácter inicial hasta el carácter de nueva línea, pero sin incluirlo? -
¿Cómo debería ejecutarse
vi
en la línea de comando para abrir~/.bash_profile
y saltar directamente a la última línea? -
¿Qué teclas se deben presionar en el modo normal
vi
para eliminar caracteres desde la posición actual del cursor hasta el siguiente carácter de punto?
Ejercicios Exploratorios
-
vim
permite seleccionar bloques de texto con ancho arbitrario, no sólo secciones con líneas completas. Al presionar Ctrl+V en modo normal, se realiza una selección moviendo el cursor hacia arriba, abajo, izquierda y derecha. Con este método, ¿cómo se eliminaría un bloque que comienza en el primer carácter de la línea actual, que contiene las siguientes ocho columnas y cinco líneas de texto? -
Una sesión
vi
fue interrumpida por una falla de energía inesperada. Cuando se vuelve a abrir el archivo,vi
pregunta al usuario si desea recuperar el archivo de intercambio (una copia automática realizada porvi
). ¿Qué debe hacer el usuario para descartar el archivo de intercambio? -
En una sesión de
vim
, una línea fue previamente copiada al registrol
. ¿Qué combinación de teclas registraría una macro en el registroa
para pegar la línea en el registrol
inmediatamente antes de la línea actual?
Resumen
Esta lección cubre el editor de texto estándar para el entorno de shell de Linux: el editor vi
. Aunque intimida al usuario desconocido, vi
tiene características que lo convierten en una buena opción para la edición de texto técnica y no técnica. La lección pasa por los siguientes pasos:
-
Uso básico de
vi
y funciones útiles. -
¿Qué es
vim
? - elvi
mejorado - y otros editores alternativos. -
¿Cómo definir el editor de texto predeterminado para el entorno de shell?
Los comandos y procedimientos abordados fueron:
-
Editor
vi
y su versión mejoradavim
. -
Edición de texto básica en
vi
. -
Editores alternativos
emacs
ynano
.
Respuestas a los ejercicios guiados
-
vi
se usa principalmente como editor para archivos de configuración y código fuente, donde la sangría ayuda a identificar secciones de texto. Una selección se puede sangrar a la izquierda presionando<
y a la derecha presionando>
. ¿Qué teclas deben presionarse en modo normal para sangrar la selección actual tres pasos a la izquierda?Las teclas
3<
, es decir, tres pasos a la izquierda. -
Se puede seleccionar una línea completa presionando
V
en el modo normalvi
. Sin embargo, también se incluye el carácter de nueva línea de terminación. ¿Qué teclas se deben presionar en modo normal para seleccionar desde el carácter inicial hasta el carácter de nueva línea, pero sin incluirlo?Las teclas
0v$h
, que significan0
(“saltar al inicio de una línea”),v
(“iniciar la selección de caracteres”),$
(“ir al final de la línea”) yh
(“retroceder una posición”). -
¿Cómo debería ejecutarse
vi
en la línea de comando para abrir~/.bash_profile
y saltar directamente a la última línea?El comando
vi + ~/.bash_profile
abrirá el archivo y colocará el cursor en su última línea. -
¿Qué teclas se deben presionar en el modo normal
vi
para eliminar caracteres desde la posición actual del cursor hasta el siguiente carácter de punto?Las teclas
dt
, que significand
(“iniciar eliminación”),t
(“saltar al siguiente carácter”) y.
(carácter de punto).
Respuestas a ejercicios exploratorios
-
vim
permite seleccionar bloques de texto con ancho arbitrario, no sólo secciones con líneas completas. Al presionar Ctrl+V en modo normal, se realiza una selección moviendo el cursor hacia arriba, abajo, izquierda y derecha. Con este método, ¿cómo se eliminaría un bloque que comienza en el primer carácter de la línea actual, que contiene las siguientes ocho columnas y cinco líneas de texto?La combinación
0
,Ctrl-V
y8l5jd
seleccionará y eliminará el bloque correspondiente. -
Una sesión
vi
fue interrumpida por una falla de energía inesperada. Cuando se vuelve a abrir el archivo,vi
pregunta al usuario si desea recuperar el archivo de intercambio (una copia automática realizada porvi
). ¿Qué debe hacer el usuario para descartar el archivo de intercambio?Presione
d
cuando se lo solicitevi
. -
En una sesión de
vim
, una línea fue previamente copiada al registrol
. ¿Qué combinación de teclas registraría una macro en el registroa
para pegar la línea en el registrol
inmediatamente antes de la línea actual?La combinación
qa"lPq
, que significaq
(“iniciar grabación de macro”),a
(“asignar registroa
a macro”),"l
(“seleccionar texto en registrol
”),P
(“pegar antes de la línea actual”) yq
(“finalizar grabación macro”).