Linux #02.05 Intérprete de Comandos en Linux

Lo primero vamos a presentar en que forma se presentan los comandos.

  • #comando < ruta_origen>
  • #comando

Comandos en Background

Linux, como todos los sistemas Unix, puede ejecutar varias tareas a la vez. En los sistemas monoprocesadores, se suele asignar un tiempo a cada tarea, lo que hace que al usuario leparezca que se están ejecutando al mismo tiempo.

Con poner ampersand (&) al termino de la línea de comandos se ejecutará el programa en background.

Ejemplo: queremos copiar el directorio /usr/src/linux al directorio /tmp:

#cp -r /usr/src/linux /tmp &

#

Cuando ha terminado la ejecución del programa, el sistema lo reporta mediante un mensaje:

#

[Done] cp -r /usr/src/linux /tmp

#

Si ejecutamos un programa y no ponemos ampersand, lo podemos pasar a background de la siguiente forma:

  • Se suspende la ejecución del programa, pulsando Ctrl+Z.
  • Se ejecutamos la siguiente orden: bg

Intérprete de Comandos (shell)

Un intérprete de comandos es una pieza fundamental del sistema operativo, ya que se va a encargar de ejecutar las órdenes básicas del manejo del sistema. También lo llamamos shell. Suelen incorporar algunas características como: el control de procesos, redirección de entrada/salida y un lenguaje de órdenes para escribir scripts.

El objetivo del intérprete de comandos es ejecutar los programas que el usuario teclea en el prompt. El prompt es una indicación que el intérprete nos muestra para indicarnos la espera de una orden.

Cuando un usuario escribe una orden, el intérprete ejecuta dicha orden. En dicha orden se pueden ejecutar tanto programas internos como externos. Los programas internos son aquellos que vienen incorporados en el intérprete de comandos, y los externos son los programas separados de este.

Los principales intérpretes de comandos son:

  • command.com: perteneciente a los sistemas MS-DOS y derivados como Windows95 y 98.
  • ksh: El korn shell de UNIX.
  • C Shell (csh): similar en sintaxis al lenguaje C Bourne Shell (sh).
  • GNU Bourne Again Shell (bash): variante del Bourne Shell clásico para Linux con características avanzadas como control de procesos, historial de órdenes y edición similar a Emacs entre otras.
  • Tcsh: versión de C Shell para Linux con funcionalidades similares a bash.
  • Zsh: pequeño intérprete similar al Bourne Shell.

SINTAXIS DE COMANDOS

Los comandos tienen la siguiente sintaxis:

#Programa Arg1 Arg2 … Argn

En la línea de comandos se introduce el programa con varios argumentos seguidos. Así el intérprete ejecuta el programa con las opciones.

Si se quiere que el comando tenga varias líneas, se separa cada línea con el carácter barra invertida (\).

Y si se quiere ejecutar varios comandos en la misma línea, los separa con punto y coma (;).

Ejemplo: # make modules; make modules_install

También se puede utilizar los comodines:

  • El asterisco (*) equivale a uno o más caracteres en el nombre de un archivo. Ejm: ls *.c lista todos los archivos con extensión c.
  • El signo de interrogación (?) equivalente a un único carácter. Ejm: ls curso.te? lista el archivo curso.tex completando el último carácter.
  • Un conjunto de caracteres entre corchetes es equivalente a cualquier carácter del conjunto. Ejm: ls curso_linux.t[aeiou]x lista curso_linux.tex seleccionando la e del conjunto.

VARIABLES DE ENTORNO

Una variable de entorno es un nombre asociado a una cadena de caracteres.

Algunas son útiles para no tener que escribir muchas opciones al ejecutar un programa, otras las utiliza el propio shell (PATH, PS1,…).

Variables de Entorno Más Usuales

(Ver fotografía)

Para definir una variable de entorno, hay que tener en cuenta en que intérprete nosencontramos, ya que no es igual en todos.

bash: export VARIABLE=Valor

tcsh: setenv VARIABLE Valor

ALIAS

Un “alias”’ es un nombre alternativo para un comando. Un alias se puede definir por varios motivos, por ejemplo:

Dar nombres familiares a comandos comunes: alias md = ‘mkdir’.Crería un alias para el comando mkdir, similar al de DOS.

Dar nombres a comandos largos: alias tbz2 = ‘tar –cv –use-compress-program=bzip2. Crearía un alias para el comando tar para que use el compresor bzip2 en lugar de gzip.

Para no tener que escribir todos los alias siempre que entremos al sistema, escribiríamos estos alias en el archivo  /.bash_profile

REDIRECCIONAMIENTO DE E/S

La filosofía de Linux/Unix es modular. Se prefieren las herramientas pequeñas con tareas puntuales. Hace falta proveer el medio para ensamblar estas herramientas en estructuras más complejas. Esto se realiza por medio del redireccionamiento de las entradas y las salidas.

Redirección de Entrada y Salidas fig_redirect width=5cmimages/standard_io.eps

Todos los programas tiene por defecto como entrada estándar el teclado y dos salidas: la estándar (pantalla) y la salida de error. Se pueden sustituir estas salidas por otros dispositivos utilizando los caracteres «» y «».

Ejemplo:

Entrada:

Se desea realizar una transferencia de archivos por ftp automática. Para ello se va a utilizar el programa ncftp con unas determinadas instrucciones preestablecidas.

Se crea un archivo entrada con dichas instrucciones:

open linuxcol.uniandes.edu.co

cd /pub/linux/utils

get *

quit

y se ejecuta el programa: ncftp < entrada.

Salida:

Se quiere saber los archivos que empiezan por i o I y almacenarlo en un archivo:

ls [iI]* > listado.txt

TUBERÍAS O PIPES

Una tubería o pipe es una combinación de varios comandos que se ejecutan simultáneamente, donde el resultado del primero se envía a la entrada del siguiente.

Por ejemplo si se quiere ver todos los archivos que hay en el directorio /usr/bin, se ejecuta lo siguiente: ls /usr/bin | more. De este modo, la salida del programa ls (listado de todos los archivos del directorio /usr/bin) irá al programa more (modo paginado, es decir, muestra una pantalla y espera a que pulsemos una tecla para mostrar la siguiente).

Algunos Filtros en Línea de Comandos Linux/Unix

Ver imagen

Vamos explicar algunas de estas herramientas en la siguiente sección, ya que algunas son complejas.

REUTILIZACIÓN DE COMANDOS

El shell tiene una especie de historial con los comandos que ha escrito el usuario. Por medio de este historial se puede volver a ejecutar una orden anterior.

El comando history muestra la secuencia de comandos, con un número a su izquierda. Con este número es posible llamar de nuevo el comando utilizando el carácter admiración “!”.

  1. history
  2. ls
  3. cd public_html
  4. ls
  5. rm *.bak
  6. history

Y para ejecutar nuevamente el comando rm *.bak solo es necesario escribir !5. También se puede pedir el último «rm» que se ha ejecutado escribiendo !rm.

Programación Shell

La programación de shell es una de las herramientas más valoradas por los administradores y usuarios de Linux/Unix, debido a que permite la automatización de tareas complejas, comandos repetitivos y ejecutarlo con una sola llamada a un script o hacerlo automáticamente a horas determinadas.

Estos scripts pueden usar un sin número de herramientas como:

  • Comandos del sistema Linux/Unix (ejm: ls, cut)
  • Funciones intrínsecas del shell (ejm: kill, nice)
  • Lenguaje de programación del shell (ejm: if/then/else/fi)
  • Programas y/o lenguajes de procesamiento en línea. (ejm: awk, sed, Perl)
  • Programas propios del usuario escritos en cualquier lenguaje.

El lenguaje de programación de cada shell tiene una amplia gama de estructuras de control:

  • for name [ in word; ] do list ; done
  • select name [ in word ; ] do list ; done
  • case word in [ pattern [ | pattern ]\ldots ) list ;; ]\ldots esac
  • if list then list [ elif list then list ]\ldots [ else list ] fi
  • $while list do list done
  • $until list do list done
  • [ function ] name () { list; }

PROGRAMACIÓN BASH

Conceptos básicos de los shell script en Bash.

Todos los scripts Bash tienen que comenzar con la línea:

#!/Bin/Bash

Esta línea le indica al shell usado por el usuario con qué shell hay que ejecutar el script.

El script puede ejecutarse de dos modos diferentes:

  • Por ejecución directa desde la línea de comandos, para ello hay que darle permiso de ejecución. Para darle los permisos solo debemos poner: chmod +x script.
  • Por ejecución mediante el shell, llamamos al shell explícitamente: bash script.

Variables en Bash

La asignación de variables se realiza por:

variable = valor

El valor de la variable se puede ver con:

echo $variable

donde ’$’ nos hace referencia al valor de la variable.

Las variables por defecto solo son visibles en el script. Si la variable debe ser vista fuera de este, debe de ser exportada además de asignada. Se puede hacer de la siguiente forma:

  • Asignar y exportar después:

var = valor

export var

  • Exportar en la asignación:

export var = valor

En los scripts Bash tenemos algunas variables predeterminadas accesibles:

  • $1-$N: Guarda los argumentos pasados como parámetros al script desde la línea de comandos.
  • $0 : Guarda el nombre del script, sería el parámetro 0 de la línea de comandos.
  • $* : Guarda todos los parámetros del 1 al N en esta variable.
  • $ : Guarda todos los parámetros, pero con comillas dobles (“ ”) en cada uno de ellos.
  • $? ,“Status”: guarda el valor devuelto por el último comando ejecutado.

Otra cuestión importante en las asignaciones es el uso de las comillas:

  • Las “dobles” permiten que sea considerado todo como una unidad.
  • Las ‘simples’ son parecidas, ignorando los caracteres especiales que se encuentren dentro.
  • Las inclinadas hacia la izquierda `comando`, son utilizadas para evaluar el interior, si hay alguna ejecución o sustitución que hacer.
  • listado del directorio en $var.

Comparaciones

  • Comparación numérica: -eq, -ge, -gt, -le, -lt, -ne, correspondiendo a: igual que, más grande o igual que (ge), más grande que, menor o igual que (le), menor que, distinto que.
  • Comparación de cadenas: = , ! = , -n, -z, correspondiendo a cadenas de caracteres: iguales, diferentes, con longitud mayor que 0, longitud igual a cero o vacío.
  • Comparación de ficheros: -d, -f -r, -s, -w, -x. El fichero es: un directorio, un fichero ordinario, es leíble, es no vacío, es escribible, es ejecutable.
  • Booleanos entre expresiones: !, -a, -o, condiciones de not, and y or.

Estructuras de Control

Nos vamos a encontrar con:

  • Comandos propios del operativo.
  • Comandos propios internos del shell Bash (ver: man bash).
  • Las estructuras de control propias de programación (for, while, …), con la sintaxis propia de Bash.

La sintaxis de las estructuras de control es:

  • Estructura if…then, se evalúa la expresión y si se obtiene un valor cierto, entoncesse ejecutan los commands.

if [ expresion ]

then

commands

  • Estructura if..then…else, se evalúa la expresión, y si se obtiene un valor de cierto, entonces se ejecutan los commands1, en caso contrario se ejecutan los commands2:

if [ expresion ]

then

commands1

else

commands2

  • Estructura if..then…else if…else, misma utilización que la anterior, con anidamientos de estructuras if.

if [ expresion ]

then

commands

elif [ expresion2 ]

then

commands

else

commands

  • Estructura case select, estructura de selección múltiple según valor de selección (en case)

case string1 in

str1)

commands;;

str2)

commands;;

*)

commands;;

esac

  • Bucle for, sustitución de variable por cada elemento de la lista:

for var1 in list

commands

done

  • Bucle while, mientras se cumpla la expresión:

while [ expresion ]

commands

done

  • Bucle until, hasta que se cumpla la expresión:

until [ expresion ]

commands

done

  • Declaración de funciones:

fname() {

commands

o bien con llamada acompañada de parámetros:

fname2(arg1,arg2…argN) {

commands

Editor Emacs

¿QUÉ ES EMACS?

(Ver fotografía)

Emacs es un editor de texto de gran potencia que está disponible para multitud de plataformas y forma parte del Proyecto GNU. Emacs significa Editor MACroS aunque también se suele traducir como “advanced, self-documenting, customizable extensible real-time display editor”. Emacs surgió como una implementación para otro editor de texto llamado TECO (Text Editor and Corrector), el cual era un proyecto del MIT para la edición de programas. Emacs surgió como un programa para editar las macros que luego se utilizarían en la edición de programas con TECO, lo que agilizaba enormemente la edición de los programas que interactuaban con los primeros ordenadores. Por lo tanto Emacs surgió como complemento de un editor de texto pero dada su gran funcionalidad tuvo tal aceptación y desarrollo que se ha creado un nombre propio dentro del campo de la edición.

Todo el mundo le atribuye la creación de Emacs a Richard M. Stallman en 1976 pero cabe decir que también hubo otro programador involucrado en un principio que fue quien empezó la implementación de la distintas clase de macros, este programador fue Guy Steele el cual cuando lo entrevistan y sale el tema de Emacs suele decir “Tengo el honor de haber hecho el 0,001% de la implementación de Emacs el resto es obra de Stallman”.

Emacs también tiene un “hermano gemelo” llamado Xemacs que esta basado en los mismos principios del primero; de hecho si usas el Xemacs te servirán la mayoría (si no todos) los comandos que se comentaran aquí, aunque lo más probable es que estén accesibles desde los menús y no haya que aprender las teclas rápidas.

CARACTERÍSTICAS

Una de las principales características de Emacs es que esta programado en LISP (cuyas siglas significan List Processing) aunque sus detractores también lo traducen como Lots of Isolated Silly Parentheses (que se traduciría algo así como ‘Montones de paréntesis tontamente aislados’); pero resulta que para manejar las listas y listas de listas Lisp usa los paréntesis, los cuales marcan los limites de las listas.

Resumiendo que las listas son la base para programar en Lisp. El hecho de estar programado en este lenguaje le añade la posibilidad de crear nuevos comandos a gusto y necesidades del usuario.

Como se comento antes, Emacs es un editor funcionalmente completo, muy potente y ampliado con funciones que van mas allá de la simple edición de texto; por ejemplo en algunas instalaciones se puedo usar para mantener un calendario, trabajar con e-mail, leer noticias de la red, leer USENET, gestionar archivos, calculadora, etc; por lo que podría decirse que de alguna forma Emacs en un entorno de trabajo que contiene un editor de textos.

Otra de sus principales características es que posee un keymap global que abarca a todos los demás modos de edición y además también posee otros para los distintos modos (‘major’,’minor’, que serán explicados a continuación).

A groso modo podría decirse que el modo global es como la base sobre la cual se erige toda la estructura del editor, y es sobre esta base donde se cargan los ‘major modes’ con sus correspondientes keymaps aportando novedades y teniendo preferencia en caso de conflicto pues se entiende que estamos amoldando el editor a nuestras necesidades y por último estarían los ‘minor modes’ que afinan el editor aún mas a nuestras necesidades.

Como última característica se podría destacar que Emacs es un editor multiplataforma, o sea que existen versiones para distintos sistemas operativos, lo cual lo dota de una gran utilidad para el desarrollo en universidades y la alta disponibilidad que posee facilita el intercambio de documentos entre plataformas y la adaptación de los usuarios a un nuevo entorno.

CÓMO OBTENER EMACS

Emacs es software libre, y como tal puedes obtener de forma completamente gratuita (y legal) el código fuente así como versiones precompiladas para tu plataforma específica.

La forma más fácil de obtener tu copia de Emacs es descargarlo de Internet. En la página principal de emacs (http://www.gnu.org/emacs/emacs.html), se encuentra la última versión estable la 21.3.

Si por cualquier otro motivo prefieres el Xemacs, su página principal es http://www.xemacs.org y su última versión estable es la 21.4.16.

DESCRIPCIÓN DEL ENTORNO EMACS

Emacs ofrece la posibilidad de modificar sus keymaps. El keymap o mapa de teclas es lo que caracteriza a un editor. Emacs por ejemplo utiliza las siguientes combinaciones de teclas para cortar y pegar ctrl-space ctrl-w (para cortar) y ctrl-y (para pegar). Emacs posee distintos tipos de keymaps. El principal se denomina global y afecta a todos los modos de edición. Para cada modo denominado major existe otro keymap que define las características propias del modo y finalmente para los modos minor tenemos más keymaps que definen las teclas especiales de esos modos. Solo necesitamos tener una idea aproximada de lo que son los modos en Emacs, y espero que según avancemos esta idea se concrete poco a poco. Las definiciones global se pueden ver como la base de la pirámide sobre la que se basa todo el resto y sin la cual no existiría nada. Un poco como el sistema operativo para un ordenador. Los major modes se sobreponen al global de forma que aportan novedades, es decir nuevas utilidades y en caso de conflicto tienen mayor prioridad porque consideramos que estamos adaptando nuestro editor a nuestras necesidades concretas que ya no son tan generales. Finalmente los minor modes son una capa superior que con la misma lógica afinan más el editor.

Podemos modificar cualquiera de estos keymaps de forma sencilla mediante los comandos: M-x global-set-key o M-x local-set-key Estas modificaciones incluyen tanto la redefinición de teclas como la definición de nuevas secuencias de teclas que ejecuten nuevas acciones. Otra forma interesante de configurar Emacs es redefiniendo sus variables. Estas variables determinan de muchas formas el comportamiento del editor puesto que definen valores clave para Emacs. Por ejemplo cuando se realiza el wrapping en Emacs?. Pues el valor que determina esto se encuentra en la variable fill-column que podemos cambiar a nuestro gusto con el comando M-x set-variable. Estos son los conceptos básicos sobre la configuración del editor.

Debería empezar a quedar claro que en Emacs podemos acceder a casi todo. Esto se debe a que la mayor parte del código está escrito en LISP y nos permite crear nuevos comandos y modificar los ya existentes en una misma sesión, de forma interactiva. Una pequeña nota sobre la asignación de teclas. Conviene utilizar las combinaciones de tipo ctrl-c seguido por una letra porque este rango esta reservado a este fin. De otra forma podrían surgir conflictos.

EMACS: AUTO-AYUDA (SELF-DOCUMENTING)

Hasta ahora hemos mostrado una diminuta parte de las posibilidades de Emacs, sin embargo puede parecer que el número de comandos que entrarán en juego va a ser muy grande. La verdad es que conocer diez o veinte comandos o secuencias de teclas suele bastar para la mayor parte de las actividades habituales.

Pero para poder aprovechar de forma real y efectiva la potencia de Emacs tiene que existir un mecanismo de ayuda que nos permita aprender nuevas funciones a medida que las vayamos necesitando, o que simplemente nos recuerde como se utilizaba tal o tal función.

Si no recordamos la secuencia de teclas que realiza una función siempre podemos probar a teclear M-x y una parte del nombre que creemos pueda haber sido elegido para nombrar la función deseada.

Por ejemplo si queremos hacer algo tan sencillo como borrar un carácter y no recordamos que hay que pulsar ctrl-d, podemos teclear M-x delete y después una o dos veces el tabulador. Se abrirá una ventana nueva (entiéndase como ventana una window de Emacs es decir una subdivisión del frame que es el objeto que se abre al iniciar Emacs) con posibles soluciones.

Para nuestro ejemplo habremos acertado puesto que no hay muchas y entre ellas se encuentra delete-char. Si solo hubiera una solución el hecho de pulsar el tabulador hubiera completado automáticamente el nombre de la función. Además del enorme juego que proporciona el tabulador Emacs posee una importante ayuda.

Vamos a describir de forma muy breve una serie de comandos de ayuda de forma que nos hagamos una idea de como funcionan pero sin entrar en detalle. C-h a topic RET Busca los comandos que tengan coincidencias con el topic C-h i d m emacs RET i topic RET Busca el topic en los índices del manual on-line de Emacs. Mostrando el primero por pantalla. C-h F Muestra la sección FAQ de Emacs donde se pueden realizar búsquedas como si se tratase de un documento normal de Emacs. C-h c seguido por una serie de teclas nos indica a que función están asociadas las teclas. Siempre es interesante teclear C-h ? para ver el resto de opciones que ofrece la ayuda de Emacs.

LA PANTALLA DE EMACS

Emacs puede ejecutarse en dos modos, en modo consola (terminal) o en modo gráfico (X-Window, Windows…). Nosotros nos centraremos en el modo gráfico, aunque el funcionamiento en modo texto es idéntico salvo que no podremos usar el ratón y que accedemos a los menús con la tecla .

Cuando entramos en Emacs tenemos una ventana con una barra de menús en la parte superior y un par de líneas de texto en la parte inferior. La parte central es la parte donde editaremos nuestros documentos.

Como hemos mencionado antes, la parte inferior tiene dos líneas: la superior nos muestra información sobre el documento actual y nos permite efectuar algunas operaciones con el ratón y la inferior es el “minibuffer”, por donde el programa se comunica con nosotros.

EL FUNCIONAMIENTO DE EMACS

Al entrar en Emacs veremos un “buffer” llamado “scratch”, que es un documento para anotaciones y pruebas, en el que no deberíamos empezar a trabajar…

Acaba de aparecer un término importante: buffer. Buffer es el objeto donde tenemos los documentos con los que estamos trabajando actualmente. En Emacs podemos tener varios bufferes abiertos y podemos movernos entre ellos de varias formas, que veremos más adelante.

Al estar pensado para ejecutarse en muchos entornos, las teclas de los cursores tienen equivalencias en el teclado como combinaciones de teclas, pero dado que actualmente casi todo el mundo tiene un teclado expandido no comentaremos estas peculiaridades.

Las abreviaturas sobre las teclas que podemos observar en la ayuda de Emacs (y que emplearemos en este documento) son las siguientes:

C-1 significa pulsar la tecla y la tecla <1> simultáneamente.

M-1 significa pulsar la tecla y la tecla <1> simultáneamente.

C-1 2 significa pulsar la tecla y la tecla <1> simultáneamente y posteriormente pulsar la tecla <2>.

C-1 2 significa pulsar la tecla y la tecla <1> simultáneamente y posteriormente pulsar la tecla 2.

Nosotros encerraremos las combinaciones de teclas entre corchetes [] para evitar confusiones con el texto que las rodea. A continuación se describen a groso modo las FUNCIONES BÁSICAS, divididas en funciones generales, Tratamiento de archivos, Funciones de edición (en las que nos centraremos más), Visualización y Especiales.

FUNCIONES GENERALES

Para salir de Emacs emplear la combinación de teclas [C-x C-c].

Si queremos dejar de usar Emacs momentáneamente pero no deseamos salir del programa podemos usar [C-z], que en un entorno gráfico normalmente minimizará la ventana.

Si en algún momento hemos entrado en alguna opción y no estamos muy seguros de lo que estamos haciendo podemos cancelarla pulsando hasta que aparezca el mensaje de que está cancelada o pulsando [C-g].

TRATAMIENTO DE ARCHIVOS

Cuando queremos empezar a trabajar lo primero que necesitamos es un documento nuevo. En Emacs no existe esta opción como tal, lo cual puede sorprender al usuario que está acostumbrado a las aplicaciones Windows, pero la solución es fácil: cuando queremos crear un nuevo documento simplemente lo abrimos.

Para abrir un documento empleamos la combinación de teclas [C-x C-f] y escribimos en el minibuffer el nombre del archivo que queremos abrir.

El minibuffer posee la característica de auto-completado, es decir, que si pulsamos la tecla y sólo hay una opción que comienza por el texto que ya tenemos escrito rellenará el restante automáticamente. Esto funciona tanto al abrir archivos como la mayoría de las veces que usemos el minibuffer para introducir información.

Para guardar un documento empleamos [C-x C-s]. Si queremos guardarlo con un nombre distinto empleamos [C-x C-w].

FUNCIONES DE EDICIÓN

Para desplazarnos por el texto en Emacs podemos usar las teclas de cursores, así como las teclas <repÁg><avpÁg>y . Estas dos últimas no siempre tienen el comportamiento normal de llevarnos al final</avpÁg></repÁg> de la línea que estamos editando, sino que pueden llevarnos al final del documento. Si estamos en este caso, para ir al final de la línea emplearemos [C-e] y para ir al comienzo [C-a].

Si mantenemos la tecla mientras empleamos los cursores ampliamos su rango de efecto, de forma que en lugar de desplazarnos de carácter en carácter y de línea en línea nos movemos de palabra en palabra y de párrafo en párrafo.

Para borrar caracteres empleamos la tecla o . Su funcionamiento puede varia dependiendo de la plataforma y versión de Emacs, por lo que deberías probar.

Para borrar desde la posición del cursor hasta el final de la línea empleamos la combinación [c-k].

Para borrar desde la posición del cursor hasta el final del párrafo empelamos [m-k].

Para copiar tienes que seleccionar el texto y pulsar [C-], para cortar tienes que pulsar [C-w] y para pegar [C-y] o [-]. Debes tener cuidado con el comando de cortar, porque realmente lo que hace es borrar, y [C-y] deshace un borrado, así que si borras un párrafo o una línea [C-y] lo restaurará en el punto que te encuentres… Si crees que has perdido algo que habías cortado no te preocupes, siempre lo puedes recuperar con [M-y], que irá recorriendo todos los textos que hayas borrado.

Para seleccionar con el teclado hay que pulsar [C-] y desplazarse con los cursores de la forma habitual.

Para deshacer cualquier cambio hay que usar la combinación de teclas [C-_], lo que normalmente equivale a ++<->.

Hay una opción de pegar el texto seleccionado con el ratón. Para realizar esta operación debes pulsar los dos botones del ratón al mismo tiempo (ó botón central).

Hay una opción para repetir pulsaciones de teclas un número determinado de veces: [C-u ##], donde las almohadillas son el número de veces que se va a repetir la tecla pulsada a continuación. Esto es útil para deshacer un número determinado de veces, o para borrar varias líneas.Esta opción a veces se usa como entrada para los argumentos de algunas funciones.

FUNCIONES DE VISUALIZACIÓN

Para desplazar la ventana sin desplazar el cursor tenemos algunas opciones bastante útiles: [C-l] centra la ventana en el cursor, [C-M-l] reajusta la ventana para mostrar la información útil empleando un heurístico (normalmente dejará el cursor en la parte superior de la pantalla).

En Emacs podemos tener en la misma ventana varios buffers al mismo tiempo o varias ventanas abiertas.

Para dividir la ventana actual tenemos las siguientes opciones:

[C-x 1] Restaura la ventana a un solo buffer.

[C-x 2] Divide la ventana horizontalmente.

[C-x 3] Divide la ventana verticalmente.

Para cambiar de una sección a otra se emplea la combinación [C-x o].

Para cambiar el contenido de una sección se puede abrir un archivo ([C-x C-f]) o se puede escoger entre alguno de los que ya están abiertos con [C-x C-b].

Si estamos trabajando en un documento y necesitamos repasar continuamente otro, podemos navegar en el buffer que no tenemos activo usando [M-] y [M-] sin tener que cambiar continuamente de buffer.

FUNCIONES ESPECIALIZADAS

Para emplear una función para la cual no existe una combinación de teclas rápidas usamos la combinación [M-x], que nos permite introducir el nombre del comando a usar. De nuevo aquí la opción de auto-completado del minibuffer nos será de gran utilidad.

BÚSQUEDAS

En Emacs se pueden hacer búsquedas en el texto de las siguientes formas:

[C-s] Busca un texto que coincida exactamente con el introducido en el minibuffer en el texto a partir de la posición del cursor en adelante. Para buscar la siguiente ocurrencia debemos volver a pulsar [C-s] sin salir del modo de búsqueda.

[C-r] Funciona igual que la búsqueda hacia adelante pero hacia atrás.

[M-%] Es la función de reemplazar. Funciona igual que la búsqueda hacia adelante pero necesita un segundo parámetro, que es el texto que se pondrá en lugar del texto buscado.

Esta opción es algo incómoda cuando se quieren reemplazar todas las ocurrencias de un tipo en un documento, ya que va una por una.

Para reemplazar todas las ocurrencias de un tipo en un documento empleamos la función “replace-string”.

El modo de usarlo es el siguiente: [[M-x]replace-stringtexto_viejotexto_nuevo]

Para buscar y reemplazar expresiones regulares disponemos de las mismas funciones, pero hay que pulsar y al mismotiempo en lugar de uno de los dos.

La sintaxis de las expresiones regulares en Emacs es bastante amplia, por lo que aquí sólo haremos una pequeña referencia:

‘*’ Es el cierre sobre un elemento. Indica que ese elemento puede aparecer un número de veces desde cero hasta infinito (postfijo).

‘+’ Es la clausura positiva. Indica que ese elemento puede aparecer desde una vez hasta infinito (postfijo).

‘?’ Indica que la aparición de un elemento es opcional (postfijo).

‘\’ Indica que un carácter especial es un literal, o indica que un carácter normal es un carácter especial 😐

‘\|’ Indica un or exclusivo entre los elementos que hay a ambos lados. Ha de haber uno u otro, pero no ambos a la vez.

‘\(…\)’ Agrupa elementos.

‘[…]’ Indica cualquier elemento dentro de los corchetes (pero sólo uno).

‘[^…]’ Indica cualquier elemento que no esté entre los corchetes.

FUNCIONES DE FORMATEO DE TEXTO

Emacs posee algunas capacidades como editor de texto con formato, aunque este no es su principal cometido.

Para centrar la línea actual se emplea [M-s].

Para justificar un párrafo se emplea la combinación de teclas [M-q], que por defecto deja el texto alineado a la izquierda, con un ancho de párrafo de 70 caracteres.

Para cambiar el ancho del párrafo tenemos que emplear [C-x C-f], pasándole antes un argumento numérico mediante [C-u ##] (el número de caracteres de ancho).

Para cambiar el tipo de justificado hay que introducir los siguientes comandos en el minibuffer (mediante [M-x])

set-justification-left

set-justification-right

set-justification-center

set-justification-full

set-justification-none

Para cambiar el formato de la fuente está la opción [M-g] donde podremos escoger entre negrilla, cursiva, subrayado, etc.

Editor Vim

¿QUÉ ES VIM?

VI iMproved, es un clon del editor de texto VI distribuido con la mayoría de los sistemas UNIX. (Ver fotografía)

Vim es uno de los editores más eficientes y altamente configurables del mercado. La revista internacional ´The Linux Journal magazine otorgó a este editor el pasado 17 de Nov y por cuarta vez consecutiva el premio al mejor editor de textos ´Readers´ Choice Award´ (Vi segundo y GNU Emacs tercero).

La versión más actual es la versión 6.3.053.

Vim es conocido como ´Editor de programadores´(Programmer´s editor) por su potencia en configuración y rapidez (una vez q se sabe usar) en edición. Pero también es perfecto para todo tipo de edición de texto, como mail, ficheros, etc.

Vim no es un ´word processor´, aunque permite editar en varios formatos. Pero no esta hecho para proporcionar edición WYSIWYG de documentos escritos.

Características:

  • Trabaja tanto en modo texto -vim- como con interfaz gráfico –gvim- (ratón, iconos, menús, …)
  • Disponibles en múltiples plataformas.
  • Disponibles para muchos SO: Windows, Mac, OS/2, DOS, Atari, Amiga, UNIX,…. Especialmente para FreeBSD y LINUX.
  • Soporta múltiples lenguajes, tales como edición derecha-izquierda para Árabe y Hebreo y caracteres gráficos de más de un octeto como por ejemplo el Chimo y Japonés.
  • Colonización de la sintaxis según lenguaje de programación. Más de 200 ficheros de sintaxis.
  • 100% compatible con Vi.
  • Comandos de completación de entrada, comandos automáticos, caracteres especiales (Diagraphs), detección y conversión de formatos, historia, macros, undo y redo, ayudas, etc, etc, etc.

Licencia

Por último decir que Vim es un programa OpenSource (todos son bienvenidos para ayudar a mejorarlo), GPL compatible y ´charityware´ (programa de caridad) el cual sugiere donación a los huérfanos en Uganda. El copyright está en las manos del autor principal y mantenedor Bram Moolennar, bram@vim.org.

MODO NORMAL. EDICIÓN BÁSICA.

  • Vim fichero para abrir un fichero a editar.
  • ~ indica que no hay línea introducida.
  • Nombre del fichero en la parte inferior del la pantalla.
  • 3 Modos:
    • NORMAL y COMANDO: Se reconoce cuando en la parte inferior esta en negro o aparece el nombre del fichero. ESC para ir a este modo. Este modo permite introducir comandos.
    • INSERT: Parte inferior de la pantalla aparece – INSERT-. Teclas i, a, tecla insert… permite pasar a este modo. Estemodo es el usado para editar el fichero.
    • VISUAL: Parte inferior de la pantalla aparece – VISUAL. Tecla v permite pasar a este modo. Este modo es el usado para realizar funciones de pegado, copia, etc sobre el fichero.
  • Para salir cuando no se sabe en que modo nos encontramos pulsar ESC para volver al modo Normal.
  • h, j, k, l para moverse por el texto, son muchas más rápidas que usando las teclas de fechas. Además las teclas de flechas a veces no están disponibles o se encuentran en una posición diferente a la acostumbrada.
  • ncomando. Realiza el comando (en modo Normal) n veces. Ej 5u, deshace los 5 últimos cambios.
  • Pulsar enter para ejecutar los comandos introducidos en el modo Comando los cuales van seguidos de :. Estos comandos aparecen en la parte inferior izquierda de la pantalla.
  • Comandos en modo normal que necesitan introducir más de un carácter, aparecen abajo a la derecha en la pantalla. Ej: dd, 1u,….
  • $ vimtutor en la shell muestra un tutorial de VIM.

MODO NORMAL

Ver imagen 1 Ver imagen 2 Ver imagen 3 Ver imagen 4

Modo Normal. Buscando con Vim.

Ver imagen 1 Ver imagen 2

MODO VISUAL.

  • Para entrar en el modo visual desde el Modo Normal (ESC) pulse:
    • v: Selecciona carácter a carácter.
    • V: Selecciona línea completa.
    • CTRL-V: Selecciona bloques. Muy útil para tablas.
  • Al mover el cursor se selecciona el texto deseado.
  • Pulsar un el comando de edición oportuno para realizar la operación deseada. Ej d borra el texto seleccionada.
  • Pulsar ESC para salir y volver al modo Normal.
  • Para conseguir ayuda de este modo:help v_comando o :help v_b_comando cuando se usan bloques con CTRL-V.  Ver imagen

MODO COMANDO.

Vim esta basado en un mas viejo editor llamado Vi. A su vez, Vi esta basado en un editor de línea de comando llamado ex. Ex aún es usado y aunque Vim contiene una gran cantidad de comandos algunos son mejor llevado a cabo por los comandos de ex y otros solo se encuentran en este modo.

Cualquier comando que empiece con: son considerados comandos al estilo ex. Ver imagen

AYUDA EN VIM.

Resumen

  • Linux puede ejecutar varias tareas al mismo tiempo. En sistemas monoprocesador, se asigna un determinado tiempo a cada tarea de manera que, al usuario, le parece que se ejecutan al mismo tiempo. Para ejecutar un programa en background, basta con poner el signo ampersand (&) al término de la línea de comandos.
  • Un intérprete de comandos es la parte fundamental de un sistema operativo encargada de ejecutar las órdenes básicas para el manejo del sistema. También se denomina shell. Suelen incorporar características tales como control de procesos, redirección de entrada/salida y un lenguaje de órdenes para escribir programas por lotes o (scripts).
  • Los comandos tienen la siguiente sintaxis: # programa arg1 arg2 … argn.
  • En los comandos se puede utilizar los comodines (*, ¿, …).
  • Una variable de entorno es un nombre asociado a una cadena de caracteres.
  • Un “alias”’ es un nombre alternativo para un comando. Así, en lugar de escribir el comando propiamente dicho, escribiríamos el alias de dicho comando.
  • En la línea de comandos la integración entre diferentes programas se realiza por medio de la re-dirección de las entradas y salidas a través de pipes o tuberías.
  • El comando history muestra la secuencia de comandos, con un número a su izquierda.
  • La programación del shell es una de las herramientas mas apreciadas por todos los administradores y muchos usuarios de Linux/Unix ya que permite automatizar tareas complejas, comandos repetitivos y ejecutarlas con un solo llamado al script o hacerlo automáticamente a horas escogidas sin intervención de personas.
  • Emacs es un editor de texto de gran potencia que está disponible para multitud de plataformas y forma parte del Proyecto GNU.
  • Es un clon del editor de texto VI distribuido con la mayoría de los sistemas UNIX.