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”).