Visitante: Perdone, ¿cómo puedo llegar al Carnegie Hall?
Transeúnte: ¡Practique, practique, practique!
Aprender la línea de comandos de Linux, como llegar a ser un pianista experto, no es algo que logramos en una tarde. Lleva años de práctica. En este capítulo, presentaremos el editor de texto vi (que se pronuncia “vi ai”), uno de los programas clave en la tradición Unix. vi es famoso por su compleja interfaz de usuario, pero cuando vemos a un maestro sentado en el teclado y comienza a “tocar”, seremos testigos de algo grandioso. No nos convertiremos en maestros en este capítulo, pero cuando lo terminemos, aprenderemos como usar los “palillos” en vi.
Por qué deberíamos aprender vi
En esta moderna era de los editores gráficos y los editores de texto faciles-de-usar como nano, ¿por qué deberíamos aprender vi? Hay tres buenas razones:
- vi está siempre disponible. Puede ser un salvavidas si tenemos un sistema sin interfaz gráfica, como un servidor remoto o un sistema local con la configuración de las X estropeada. nano, aunque cada vez es más popula,r todavía no es universal. POSIX, un estándar de compatibilidad para sistemas Unix, requiere que vi está presente.
- vi es ligero y rápido. Para muchas tareas, es más fácil arrancar vi que encontrar el editor gráfico de texto en los menús y esperar que sus múltiples megabytes carguen. Además, vi está diseñado para teclear rápido. Como veremos, un usuario o usuaria con experiencia en vi nunca tiene que separar sus dedos del teclado mientras está editando.
- No queremos que otros usuarios de Linux y Unix piensen que somos unos gallinas.
La primera versión de vi fue escrita en 1976 por Bill Joy, un estudiante de la Universidad de California en Berkley que más tarde se convirtió en co-fundador de Sun Microsystems. vi toma su nombre de la palabra “visual”, porque estaba pensado para permitir la edición en un terminal de vídeo con un cursor con movimiento. Anteriormente a los editores visuales, había editores de línea para ir a una línea concreta y decirle los cambios a realizar, como añadir o eliminar texto. Con la llegada de los terminales de vídeo (en lugar de los terminales basados en impresión como los teletipos) los editores visuales se hicieron posibles. vi en realidad incorpora un potente editor de líneas llamado ex, y podemos usar la edición de líneas de comandos mientras usamos vi.
La mayoría de las distribuciones no incluyen el auténtico vi; en su lugar, están equipados con un sustituto mejorado llamado vim (que es la abreviatura de “vi improved “ - “vi mejorado”) escrito por Bram Moolenaar. vim es una mejora sustancial sobre el vi tradicional de Unix y normalmente está simbólicamente enlazado (o con un alias) al nombre “vi” en los sistemas Linux. En los temas que siguen asumiremos que tenemos un programa llamado “vi” que en realidad es vim.
Arrancando y parando vi
Para arrancar vi, simplemente escribe lo sisguiente:
[me@linuxbox ~]$ vi
Y aparecerá una pantalla como ésta:
~
~
~ VIM - Vi Improved
~
~ version 7.1.138
~ by Bram Moolenaar et al.
~ Vim is open source and freely distributable
~
~ Sponsor Vim development!
~ type :help sponsor<Enter> for information
~
~ type :q<Enter> to exit
~ type :help<Enter> or <F1> for on-line help
~ type :help version7<Enter> for version info
~
~ Running in Vi compatible mode
~ type :set nocp<Enter> for Vim defaults
~ type :help cp-default<Enter> for info on this
~
~
~
Tal como hicimos con nano antes, la primera cosa que aprenderemos es cómo salir. Para salir, introducimos el siguiente comando (fíjate que los dos puntos forman parte del comando):
:q
El prompt del shell debería volver. Si, por alguna razón, vi no se cierra (normalmente porque hacemos un cambio a un archivo que no ha sido salvado todavía), podemos decirle a vi que eso es lo que queremos añadiendo un signo de exclamación al comando:
:q!
Consejo: Si te “pierdes” en vi, prueba a pulsar la tecla Esc dos veces para encontrar el camino otra vez.
Modo de compatibilidad
Modo de compatibilidad
En la pantalla de inicio del ejemplo anterior (tomada de Ubuntu 8,04), vemos el texto “Running in Vi compatible mode.”. Ésto significa que vim funcionará en un modo que es parecido al funcionamiento normal de vi en lugar del funcionamiento mejorado de vim. Para los objetivos de este capítulo, querremos ejecutar vim con su funcionamiento mejorado.
Modo de compatibilidad
Para hacerlo, tenemos unas pocas opciones:
Prueba ejecutar vim en lugar de vi.
Si funciona, considera añadir alias vi='vim' a tu archivo .bashrc.
Alternativamente, usa este comando para añadir una linea al archivo de configuración de vim:
echo “set nocp” >> ~/.vimrc
Las diferentes distribuciones de Linux empaquetan vim de formas distintas. Algunas distribuciones instalan una versión mínima de vim par defecto que sólo soporta un catálogo limitado de funciones de vim. Según vayamos viendo las siguientes lecciones, encontrarás que faltan funciones. Si ese es el caso, instala la versión completa de vim.
Modo de edición
Arranquemos vi de nuevo, esta vez pasándole el nombre de un archivo inexistente. Así es como creamos un nuevo archivo con vi:
[me@linuxbox ~]$ rm -f foo.txt
[me@linuxbox ~]$ vi foo.txt
Si todo va bien, deberíamos tener una pantalla como esta:
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"foo.txt" [New File]
Las tildes de ñ (“~”) indican que no existe texto en esa línea. Ésto muestra que tenemos un archivo vacío. ¡No escribas nada todavía!
La segunda cosa más importante a aprender sobre vi (después de aprender a salir) es que vi es un editor modal. Cuando vi arranca, lo hace en modo comando. En este modo, casi cualquier tecla es un comando, así que si empezáramos a escribir, vi básicamente se volvería loco y se formaría un gran lío.
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"foo.txt" [New File]
Las tildes de ñ (“~”) indican que no existe texto en esa línea. Ésto muestra que tenemos un archivo vacío. ¡No escribas nada todavía!
La segunda cosa más importante a aprender sobre vi (después de aprender a salir) es que vi es un editor modal. Cuando vi arranca, lo hace en modo comando. En este modo, casi cualquier tecla es un comando, así que si empezáramos a escribir, vi básicamente se volvería loco y se formaría un gran lío.
Entrar en el modo de inserción
Para añadir texto a nuestro archivo, debemos entrar primero en el modo de inserción. Para hacerlo, pulsamos la tecla “i”. Tras ésto, deberíamos ver lo siguiente en la parte inferior de la pantalla si vim está funcionando en su modo normal mejorado (esto no aparecerá en el modo compatible con vi):
-- INSERT --
Ahora podemos introducir texto. Prueba ésto:
The quick brown fox jumped over the lazy dog.
The quick brown fox jumped over the lazy dog.
Para salir del modo de inserción y volver al modo de comandos, pulsa la tecla Esc.
Salvando nuestro trabajo
Para salvar el cambio que acabamos de hacer en nuestro archivo, sólo tenemos que introducir un comando ex estando en el modo comando. Ésto se hace fácilmente pulsando la tecla “:”. Después de hacer ésto, un carácter de dos puntos aparecerá en la parte de abajo de la pantalla:
:
Para guardar los cambios en nuestro archivo modificado, añadiremos una “w” después de los dos puntos y pulsaremos Enter:
:w
El archivo será guardado en el disco duro y tendremos un mensaje de confirmación en la parte inferior de la pantalla, como éste:
"foo.txt" [New] 1L, 46C written
Consejo: Si lees la documentación de vim, notarás que (confusamente) el modo comando se llama modo normal y los comandos ex se llaman modo comando. Ten cuidado.
Consejo: Si lees la documentación de vim, notarás que (confusamente) el modo comando se llama modo normal y los comandos ex se llaman modo comando. Ten cuidado.
Moviendo el cursor
Mientras que está en el modo comando, vi ofrece un gran número de comandos de movimiento, algunos de los cuales comparte con less. Aquí hay una muestra:
Teclas de movimiento de cursor
l o Flecha derecha
Un carácter a la derecha.
h o flecha izquierda
Un carácter a la izquierda.
j o Flecha abajo
Abajo una línea.
k o Flecha arriba
Arriba una línea.
0 (cero)
Al principio de la linea actual.
^
Al primer espacio no en blanco en la linea actual.
$
Al final de la línea actual.
w
Al principio de la siguiente palabra o signo de puntuación.
W
Al principio de la siguiente palabra, ignorando signos de puntuación.
Al principio de la siguiente palabra, ignorando signos de puntuación.
b
Al principio de la anterior palabra o signo de puntuación.
Al principio de la anterior palabra o signo de puntuación.
B
Al principio de la anterior palabra, ignorando signos de puntuación.
Al principio de la anterior palabra, ignorando signos de puntuación.
Ctrl-f o Page Down
Abajo una página.
Ctrl-b o Page Up
Arriba una página.
numberG
A la línea número. Por ejemplo, 1G lo mueve a la primera linea del archivo.
Abajo una página.
Ctrl-b o Page Up
Arriba una página.
numberG
A la línea número. Por ejemplo, 1G lo mueve a la primera linea del archivo.
G
A la última línea del archivo.
A la última línea del archivo.
¿Por qué se usan las teclas h, j, k y l para movimientos de cursor? Porque cuando vifue originalmente escrito, no todos los terminales de vídeo tenían las teclas de las flechas, y los hábiles mecanógrafos podían usar teclas normales del teclado para mover el cursor sin tan siguiera tener que despegar los dedos del teclado.
Muchos comandos en vi pueden ir precedidos con un número, tal como el comando “G” listado antes. Precediendo un comando con un número, podemos especificar el número de veces que un comando va a ser ejecutado. Por ejemplo, el comando “5j” hace que vi mueva el cursor hacia abajo cinco líneas.
Edición básica
La mayoría de las ediciones consisten en unas pocas operaciones básicas como insertar texto, borrar texto y mover texto de sitio cortando y pegando. vi, por supuesto, soporta todas estas operaciones en su forma única. vi también proporciona una forma limitada de deshacer. Si pulsamos la tecla “u” mientras está en modo comando, vi deshará el último cambio que hayas hecho. Ésto será práctico cuando probemos algunos de los comandos de edición básica.
Añadiendo texto
vi tiene varias formas para entrar en el modo inserción. Ya hemos usado el comando ipara insertar texto.
Volvamos a nuestro archivo foo.txt un momento:
The quick brown fox jumped over the lazy dog.
Si quisiéramos añadir texto al final de esta frase, descubriríamos que el comando i no lo hace, ya que no podemos mover el cursor más allá del final de la línea. vi cuenta con un comando para añadir texto, el comando sensatamente llamado “a”. Si movemos el cursor al final de la línea y escribimos “a”, el cursor se moverá hasta pasado el final de la línea y vi entrará en modo inserción. Ésto nos permitirá añadir más texto:
The quick brown fox jumped over the lazy dog. It was cool.
The quick brown fox jumped over the lazy dog. It was cool.
Recuerda pulsar la tecla Esc para salir del modo inserción.
Como casi siempre querremos añadir texto al final de una línea, vi ofrece un atajo para moverte al final de la línea actual y comenzar a añadir texto. Es el comando “A”. Probémoslo y añadamos algunas líneas más a nuestro archivo.
Primero, movamos el cursor al principio de la línea usando el comando “0” (cero).
Ahora pulsamos “A” y añadimos las siguientes líneas de texto:
The quick brown fox jumped over the lazy dog. It was cool.
Como casi siempre querremos añadir texto al final de una línea, vi ofrece un atajo para moverte al final de la línea actual y comenzar a añadir texto. Es el comando “A”. Probémoslo y añadamos algunas líneas más a nuestro archivo.
Primero, movamos el cursor al principio de la línea usando el comando “0” (cero).
Ahora pulsamos “A” y añadimos las siguientes líneas de texto:
The quick brown fox jumped over the lazy dog. It was cool.
Line 2
Line 3
Line 4
Line 5
De nuevo, pulsamos la tecla Esc para salir del modo de inserción.
Como podemos ver, el comando “A” es más útil que mover el cursor al final de la línea antes de entrar en el modo de inserción.
Como podemos ver, el comando “A” es más útil que mover el cursor al final de la línea antes de entrar en el modo de inserción.
Abriendo una línea
Otra forma en que podemos insertar texto es “abriendo” una línea. Ésto inserta una línea en blanco entre dos líneas existentes y entra en el modo inserción. Tiene dos variantes:
Teclas de apertura de líneas
Comando Abre
o La línea bajo la línea actual.
O La línea sobre la línea actual.
Podemos demostrar esto de la siguiente forma: coloca el cursor en la “Línea 3” y luego pulsa la tecla o.
The quick brown fox jumped over the lazy dog. It was cool.
Line 2
Line 3
Line 4
Line 4
Line 5
Una nueva línea se abre bajo la tercera línea y entramos en el modo inserción. Salimos del modo inserción pulsando la tecla Esc. Pulsamos la tecla u para deshacer nuestro cambio.
Pulsa la tecla O para abrir la línea sobre el cursor.
The quick brown fox jumped over the lazy dog. It was cool.
Line 2
Line 3
Line 4
Line 5
Salimos del modo inserción presionando la tecla Esc y deshaciendo nuestro cambio pulsando u.
Borrando texto
Como esperaríamos, vi ofrece una variedad de formas de borrar texto, todos ellos contienen uno o dos atajos de teclado. Primero, la tecla x borrará un carácter en la localización del cursor. x debería ir precedida por un número especificando cuantos caracteres van a ser borrados. La tecla d es de propósito más general. Como x, debería ir precedida por un número especificando el número de veces que se realizará el borrado. Además, d siempre va seguido por un comando de movimiento que controla el tamaño del borrado. Aquí tenemos algunos ejemplos:
Comandos de borrado de texto
x El carácter actual.
3x El carácter actual y los siguientes dos caracteres.
dd La línea actual.
5dd La línea actual y las cuatro siguientes.
dW Desde la posición actual del cursor hasta el principio de la siguiente palabra.
d$ Desde la posición actual del cursor hasta el final de la linea actual.
d0 Desde la posición actual del cursor hasta el principio de la línea.
d^ Desde la posición actual de cursor hasta el primer carácter no en blanco de la línea.
dG Desde la línea actual al final del archivo.
d20G Desde la línea actual hasta la vigésima línea del archivo.
Coloca el cursor en la palabra “It” en la primera línea de nuestro texto. Pulsa la tecla xrepetidamente hasta que el resto de la frase se borre. A continuación, pulas la tecla urepetidamente hasta que se deshaga el borrado.
Nota: El auténtico vi sólo soporta un único nivel de deshacer. vim soporta múltiples niveles.
Probemos el borrado de nuevo, esta vez usando el comando d. De nuevo, mueve el cursor a la palabra “It” y pulsa dW para borrar la palabra:
The quick brown fox jumped over the lazy dog. was cool.
Line 2
d20G Desde la línea actual hasta la vigésima línea del archivo.
Coloca el cursor en la palabra “It” en la primera línea de nuestro texto. Pulsa la tecla xrepetidamente hasta que el resto de la frase se borre. A continuación, pulas la tecla urepetidamente hasta que se deshaga el borrado.
Nota: El auténtico vi sólo soporta un único nivel de deshacer. vim soporta múltiples niveles.
Probemos el borrado de nuevo, esta vez usando el comando d. De nuevo, mueve el cursor a la palabra “It” y pulsa dW para borrar la palabra:
The quick brown fox jumped over the lazy dog. was cool.
Line 2
Line 3
Line 4
Line 5
Pulsa d$ para borrar desde la posición del cursor hasta el final de la línea:
The quick brown fox jumped over the lazy dog.
Line 2
The quick brown fox jumped over the lazy dog.
Line 2
Line 3
Line 4
Line 5
Pulsa dG para borrar desde la línea actual hasta el final del archivo:
~
~
~
~
~
~
~
~
~
~
Pulsa u tres veces para deshacer el borrado.
Cortando, copiando y pegando texto
El comando d no sólo borra texto, también “corta” texto. Cada vez que usamos el comando d el borrado se copia en un buffer de pegado (el portapapeles) al que podemos rellamar luego con el comando p para pegar el contenido del buffer tras el cursor o el comando P para pegar el contenido delante del cursor.
El comando y se usa para “yank” (copiar) texto de forma muy parecida a la que el comando d usa para cortar texto. Aquí tienes algunos ejemplos combinando el comando y con varios comandos de movimiento:
Comandos de copiado
yy La línea actual.
5yy La línea actual y las siguientes cuatro líneas.
yW Desde la posición actual del cursor hasta el principio de la siguiente palabra.
y$ Desde la posición actual del cursor al final de la línea actual.
y0 Desde la posición actual del cursor hasta el principio de la línea.
y^ Desde la posición actual del cursor hasta el primer espacio no en blanco de la línea.
yG Desde la línea actual hasta el final de la línea.
y20G Desde la línea actual hasta la vigésima línea del archivo.
y20G Desde la línea actual hasta la vigésima línea del archivo.
Probemos algunos copiados y pegados. Coloca el cursor en la primera línea del texto y pulsa yy para copiar la línea actual. A continuación, mueve el cursor a la última línea (G) y pulsa p para pegar la línea debajo de la línea actual:
The quick brown fox jumped over the lazy dog. It was cool.
Line 2
Line 3
Line 4
Line 5
The quick brown fox jumped over the lazy dog. It was cool.Tal como antes, el comando u deshará nuestro cambio. Con el cursor posicionado todavía en la última línea del archivo, pulsa P para pegar el texto sobre la línea actual:
The quick brown fox jumped over the lazy dog. It was cool.
Line 2
Line 3
Line 4
The quick brown fox jumped over the lazy dog. It was cool.
Line 5
The quick brown fox jumped over the lazy dog. It was cool.
Line 5
Prueba algunos otros comandos y de la tabla anterior y trata de comprender el funcionamiento de los comandos p y P. Cuando lo hayas hecho, vuelve el archivo a su estado original.
Añadiendo líneas
vi es bastante estricto acerca de su idea de línea. Normalmente, no es posible mover el cursor al final de una línea y borrar el carácter de fin de línea para añadir una linea con la otra debajo. Por ésto, vi provee un comando específico, J (no confundir con j, que es para mover el cursor) para añadir líneas juntas.
Si colocamos el cursor en la línea 3 y escribimos el comando J, aquí tenemos lo que ocurre:
The quick brown fox jumped over the lazy dog. It was cool.
Line 2
Line 3 Line 4
Line 3 Line 4
Line 5
Buscar y reemplazar
vi tiene la capacidad de mover el cursor a localizaciones basadas en búsquedas. Puede hacer esto tanto en una línea individual como en un archivo completo. También puede realizar reemplazos de texto con o sin confirmación del usuario.
Buscar y reemplazar
vi tiene la capacidad de mover el cursor a localizaciones basadas en búsquedas. Puede hacer esto tanto en una línea individual como en un archivo completo. También puede realizar reemplazos de texto con o sin confirmación del usuario.
Buscando dentro de una línea
El comando f busca en una línea y mueve el cursor a la siguiente instancia de un carácter especificado. Por ejemplo, el comando fa movería el cursor hasta la siguiente aparición del carácter “a” dentro de la línea actual. Después de realizar una búsqueda de un carácter en una línea, la búsqueda se repetiría escribiendo un punto y coma.
Buscando en el archivo completo
Para mover el cursor a la siguiente aparición de una palabra o frase se usa el comando /. Ésto funciona de la misma forma en que hemos aprendido para el programa less. Cuando escribes el comando / una “/” aparecerá en la parte de abajo de la pantalla. A continuación, escribe la palabra o frase a buscar, seguida de la tecla Enter. El cursor se moverá a la siguiente posición que contenga la cadena buscada. Una búsqueda puede ser repetida usando la cadena de búsqueda previa con el comando n. Aquí tenemos un ejemplo:
The quick brown fox jumped over the lazy dog. It was cool.
Line 2
Line 3
Line 4
Line 5
Seguido de la tecla Enter. El cursor se moverá a la línea 2. A continuación, escribe n y el cursor se moverá a la línea 3. Repitiendo el comando n moverá el cursor hacia abajo por el archivo hasta que se quede sin resultados. Aunque hasta ahora sólo hemos usado palabras y frases para nuestras búsquedas, vi permite el uso de expresiones regulares, un potente método de expresar patrones complejos de texto. Veremos las expresiones regulares en más detalle en un capítulo posterior.
Coloca el cursor en la primera línea del archivo. Escribe:
/Line
/Line
Seguido de la tecla Enter. El cursor se moverá a la línea 2. A continuación, escribe n y el cursor se moverá a la línea 3. Repitiendo el comando n moverá el cursor hacia abajo por el archivo hasta que se quede sin resultados. Aunque hasta ahora sólo hemos usado palabras y frases para nuestras búsquedas, vi permite el uso de expresiones regulares, un potente método de expresar patrones complejos de texto. Veremos las expresiones regulares en más detalle en un capítulo posterior.
Búsqueda y reemplazo global
vi usa un comando ex para realizar operaciones de búsqueda y reemplazo (llamadas “sustituciones” en vi) sobre un rango del líneas del total del archivo. Para cambiar la palabra “Line” a “line” en el archivo completo, utilizaríamos el siguiente comando:
:%s/Line/line/g
Dividamos este comando en elementos separados y veamos que hace cada uno:
Un ejemplo de la sintaxis de la búsqueda y reemplazo global
:
El carácter dos puntos comienza un comando ex.
%
Especifica el rango de líneas para la operación. % es una abreviatura que significa desde la primera a la última línea. Alternativamente, el rango podría ser especificado como 1, 5 (ya que nuestro archivo tiene cinco líneas), o 1, $ que significa “de la línea 1 a la última línea del archivo.” Si el rango de líneas se omite, la operación sólo se realiza en la línea actual.
s
Especifica la operación. En este caso, sustitución (buscar y reemplazar).
/Line/line/
El patrón de búsqueda y el texto de reemplazo.
El patrón de búsqueda y el texto de reemplazo.
g
Significa “global” en sentido de que la búsqueda y reemplazo se realiza en cada instancia de la cadena de búsqueda en la línea. Si la omitimos, sólo la primera instancia de la cadena de búsqueda de cada línea se reemplazará.
Después de ejecutar nuestro comando de búsqueda y reemplazo nuestro archivo aparece así:
The quick brown fox jumped over the lazy dog. It was cool.
line 2
line 3
line 4
line 5
Podemos especificar también un comando de sustitución con confirmación del usuario. Ésto se hace añadiendo una “c” al final del comando. Por ejemplo:
:%s/line/Line/gc
El comando cambiará nuestro archivo de nuevo a su forma previa; sin embargo, antes de cada sustitución, vi para y nos pregunta que confirmemos la sustitución con este mensaje:
replace with Line (y/n/a/q/l/^E/^Y)?
Cada uno de los caracteres dentro del paréntesis es una posible elección de la siguiente forma:
Claves de confirmación de reemplazo
y
Realiza la sustitución.
n
Se salta esta instancia del patrón.
a
Realiza la sustitución en esta y todas las siguientes instancias del patrón.
q o Esc
Salir de sustituir
l
Realiza esta sustitución y luego salir. Abreviatura de “último”.
Ctrl-e, Ctrl-y
Desplazamiento arriba y abajo, respectivamente. Útil para ver el contexto de la sustitución prevista.
Si escribes y, la sustitución se realizará, n hará que vi se salta esta instancia y se mueva a la siguiente.
Editando múltiples archivos
A veces es útil editar más de un archivo a la vez. Podrías necesitar hacer cambios en múltiples archivos o necesitar copiar contenido de un archivo a otro. Con vi podemos abrir múltiples archivos para editar especificándolos en la línea de comandos:
vi file1 file2 file3...
Salgamos de nuestra sesión de vi existente y creemos un nuevo archivo para editar. Escribe :wq para salir de vi, salvando nuestro texto modificado. A continuación, crearemos un archivo adicional en nuestro directorio home para que podamos jugar con él. Crearemos el archivo capturando salida del comando ls:
[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt
[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt
Editemos nuestro antiguo archivo y el nuevo con vi:
[me@linuxbox ~]$ vi foo.txt ls-output.txt
[me@linuxbox ~]$ vi foo.txt ls-output.txt
vi arrancará y vermos la primera línea en la pantalla:
The quick brown fox jumped over the lazy dog. It was cool.
The quick brown fox jumped over the lazy dog. It was cool.
Line 2
Line 3
Line 4
Line 5
Cambiando entre archivos
Para cambiar de un archivo al siguiente, usaremos el este comando ex:
:n
Para volver al archivo previo usa:
:N
Como podemos movernos de un archivo a otro, vi impone una política que nos previene de cambiar de archivo si el archivo actual tiene cambios sin guardar. Para forzar a vi a cambiar de archivo y abandonar tus cambios, añade un signo de exclamación (!) al comando.
Además del método de cambio descrito antes, vim (y algunas versiones de vi) también cuenta con algunos comandos ex para hacer más fácil el manejo de múltiples archivos. Podemos ver una lista de los archivos que están siendo editados con el comando :buffers. Hacer esto mostrará una lista de los archivos en la parte inferior de la pantalla:
Además del método de cambio descrito antes, vim (y algunas versiones de vi) también cuenta con algunos comandos ex para hacer más fácil el manejo de múltiples archivos. Podemos ver una lista de los archivos que están siendo editados con el comando :buffers. Hacer esto mostrará una lista de los archivos en la parte inferior de la pantalla:
:buffers
1 %a "foo.txt" line 1
2 "ls-output.txt" line 0
Press ENTER or type command to continue
Para cambiar a otro buffer (archivo), escribe :buffer seguido del número del buffer que quieres editar. Por ejemplo, para cambiar del buffer 1 que contiene el archivo foo.txt al buffer 2 que contiene el archivo ls-output.txt deberías escribir esto:
:buffer 2
y nuestra pantalla ahora muestra el segundo archivo.
Abriendo archivos adicionales para editar
También es posible añadir archivos a nuestra actual sesión de edición. El comando ex :e (abreviatura de “edit”) seguido por el nombre del archivo abrirá el archivo adicional. Terminemos nuestra sesión de edición actual y volvamos a la línea de comandos.
Arranca vi de nuevo con un sólo archivo:
[me@linuxbox ~]$ vi foo.txt
Para añadir un segundo archivo, escribe:
:e ls-output.txt
:e ls-output.txt
Y debería aparecer en la pantalla. El primer archivo está todavía presente como podemos comprobar:
:buffers
:buffers
1 # "foo.txt" line 1
2 %a "ls-output.txt" line 0
Press ENTER or type command to continue
Nota: No puedes cambiar a archivos cargados con el comando :e usando el comando :n o el comando :N. Para cambiar entre archivos, usa el comando :buffer seguido del número de buffer.
Copiando contenido de un archivo a otro
A menudo, mientras editamos múltiples archivos, querremos copiar una porción de un archivo en otro archivo que estamos editando. Ésto se hace fácilmente usando los comandos usuales de cortar y pegar que hemos usado antes. Podemos demostrarlo como sigue. Primero, usando dos archivos, cambia al buffer 1 (foo.txt) escribiendo:
:buffer 1
que debería darnos ésto:
The quick brown fox jumped over the lazy dog. It was cool.
Line 2
Line 3
Line 4
Line 5
The quick brown fox jumped over the lazy dog. It was cool.
Line 2
Line 3
Line 4
Line 5
A continuación, mueve el cursor al la primera línea y escribe yy para copiar la línea.
Cambia al segundo buffer escribiendo:
:buffer 2
Cambia al segundo buffer escribiendo:
:buffer 2
La pantalla contendrá ahora listas de archivos como ésta (sólo se muestra una porción aquí):
total 343700
total 343700
-rwxr-xr-x 1 root root 31316 2007-12-05 08:58 [
-rwxr-xr-x 1 root root 8240 2007-12-09 13:39 411toppm
-rwxr-xr-x 1 root root 111276 2008-01-31 13:36 a2p
-rwxr-xr-x 1 root root 25368 2006-10-06 20:16 a52dec
-rwxr-xr-x 1 root root 11532 2007-05-04 17:43 aafire
-rwxr-xr-x 1 root root 7292 2007-05-04 17:43 aainfo
Mueve el cursor a la primera línea y pega la linea copiada del archivo precedente escribiendo el comando p:
total 343700
The quick brown fox jumped over the lazy dog. It was cool.
-rwxr-xr-x 1 root root 31316 2007-12-05 08:58 [
-rwxr-xr-x 1 root root 8240 2007-12-09 13:39 411toppm
-rwxr-xr-x 1 root root 111276 2008-01-31 13:36 a2p
-rwxr-xr-x 1 root root 25368 2006-10-06 20:16 a52dec
-rwxr-xr-x 1 root root 11532 2007-05-04 17:43 aafire
-rwxr-xr-x 1 root root 7292 2007-05-04 17:43 aainfo
total 343700
The quick brown fox jumped over the lazy dog. It was cool.
-rwxr-xr-x 1 root root 31316 2007-12-05 08:58 [
-rwxr-xr-x 1 root root 8240 2007-12-09 13:39 411toppm
-rwxr-xr-x 1 root root 111276 2008-01-31 13:36 a2p
-rwxr-xr-x 1 root root 25368 2006-10-06 20:16 a52dec
-rwxr-xr-x 1 root root 11532 2007-05-04 17:43 aafire
-rwxr-xr-x 1 root root 7292 2007-05-04 17:43 aainfo
Insertando un archivo entero dentro de otro
También es posible insertar un archivo entero dentro de otro que estemos editando. Para verlo en acción, terminemos nuestra sesión vi y comencemos una nueva con un único archivo:
[me@linuxbox ~]$ vi ls-output.txt
Veremos nuestra lista de archivos de nuevo:
total 343700
-rwxr-xr-x 1 root root 31316 2007-12-05 08:58 [
-rwxr-xr-x 1 root root 8240 2007-12-09 13:39 411toppm
-rwxr-xr-x 1 root root 111276 2008-01-31 13:36 a2p
-rwxr-xr-x 1 root root 25368 2006-10-06 20:16 a52dec
-rwxr-xr-x 1 root root 11532 2007-05-04 17:43 aafire
-rwxr-xr-x 1 root root 7292 2007-05-04 17:43 aainfo
total 343700
-rwxr-xr-x 1 root root 31316 2007-12-05 08:58 [
-rwxr-xr-x 1 root root 8240 2007-12-09 13:39 411toppm
-rwxr-xr-x 1 root root 111276 2008-01-31 13:36 a2p
-rwxr-xr-x 1 root root 25368 2006-10-06 20:16 a52dec
-rwxr-xr-x 1 root root 11532 2007-05-04 17:43 aafire
-rwxr-xr-x 1 root root 7292 2007-05-04 17:43 aainfo
Movemos el cursor a la tercera línea, luego introduce el siguiente comando ex:
:r foo.txt
:r foo.txt
El comando :r (abreviatura de “leer”) inserta el archivo especificado antes de la posición del cursor. Nuestra pantalla debería aparecer ahora así:
total 343700
-rwxr-xr-x 1 root root 31316 2007-12-05 08:58 [
-rwxr-xr-x 1 root root 8240 2007-12-09 13:39 411toppm
The quick brown fox jumped over the lazy dog. It was cool.
Line 2
Line 3
Line 4
Line 5
-rwxr-xr-x 1 root root 111276 2008-01-31 13:36 a2p
-rwxr-xr-x 1 root root 25368 2006-10-06 20:16 a52dec
-rwxr-xr-x 1 root root 11532 2007-05-04 17:43 aafire
-rwxr-xr-x 1 root root 7292 2007-05-04 17:43 aainfo
Salvando nuestro trabajo
Como todo lo demás en vi, hay varias formas distintas de salvar nuestros archivos editados. Ya hemos visto el comando ex :w, pero hay otros que podríamos encontrar útiles.
total 343700
-rwxr-xr-x 1 root root 31316 2007-12-05 08:58 [
-rwxr-xr-x 1 root root 8240 2007-12-09 13:39 411toppm
The quick brown fox jumped over the lazy dog. It was cool.
Line 2
Line 3
Line 4
Line 5
-rwxr-xr-x 1 root root 111276 2008-01-31 13:36 a2p
-rwxr-xr-x 1 root root 25368 2006-10-06 20:16 a52dec
-rwxr-xr-x 1 root root 11532 2007-05-04 17:43 aafire
-rwxr-xr-x 1 root root 7292 2007-05-04 17:43 aainfo
Salvando nuestro trabajo
Como todo lo demás en vi, hay varias formas distintas de salvar nuestros archivos editados. Ya hemos visto el comando ex :w, pero hay otros que podríamos encontrar útiles.
En el modo comando, escribir ZZ salvará el archivo actual y saldrá de vi. Igualmente, el comando ex :wq combinará los comandos :w y :q en uno que salvará el archivo y saldrá.
El comando :w también puede especificar un nombre de archivo opcional. Esto actúa como “Guardar como...” Por ejemplo, si estuviéramos editando foo.txt y quisiéramos salvar una versión alternativa llamada foo1.txt, escribiríamos lo siguiente:
:w foo1.txt
Nota: Mientras que el comando anterior salva el archivo bajo un nuevo nombre, no cambia el nombre del archivo que estás editando. Si continuas editando, estarás todavía editando foo.txt, no foo1.txt.
Resumiendo
Con esta serie básica de habilidades ya podemos realizar la mayoría de las ediciones de texto necesarias para mantener un sistema Linux típico. Aprender a usar vim en el día a día será beneficioso a largo plazo. Como los editores estilo vi están tan profundamente incluidos en la cultura Unix, veremos muchos otros programas que han estado influenciados por su diseño. less es un buen ejemplo de esta influencia.
Para saber más
Incluso con todo lo que hemos cubierto en este capítulo, apenas hemos arañado la superficie de lo que vi y vim pueden hacer. Aquí tienes un par de recursos en línea que puedes usar para continuar tu viaje para hacerte un maestro de vi:
Learning The vi Editor – Un Wikilibro de Wikipedia que ofrece una guía concisa a vi y varios de sus similares incluyendo vim. Está disponible en:
The Vim Book – El proyecto vim tiene un libro de 570 páginas que cubre (casi) todas las funciones de vim. Puedes encontrarlo en:
ftp://ftp.vim.or g/pub/vim/doc/book/vimbook-OPL.pdf
Un artículo de Wikipedia sobre Bill Joy, el creador de vi:
Un artículo de Wikipedia sobre Bram Moolenaar, el autor de vim:
Un artículo de Wikipedia sobre Bill Joy, el creador de vi:
Un artículo de Wikipedia sobre Bram Moolenaar, el autor de vim:
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.