domingo, 18 de diciembre de 2016

Bash shell: atajos de teclado por defecto


Vamos a enumerar los atajos de teclado que vienen por defecto para el shell de bash.


Bash obtiene la mayoría de este comportamiento de las librerías GNU Readline y GNU History.


Combinaciones de teclas estilo Emacs vs. estilo vi


Readline por defecto usa combinaciones de teclas estilo emacs.

En este documento explicaremos los comandos estilo emacs.


También se puede configurar el fichero init para usar el estilo vi.

Las combinaciones de teclas se pueden personalizar mediante el fichero init de Readline (/etc/inputrc)


Librerías GNU Readline e History


Las aplicaciones enlazadas a la librería GNU Readline proporcionan al usuario la capacidad de editar la línea de comandos al tiempo que teclea palabras.

La librería GNU Readline también proporciona funciones de "historia", basadas en la librería GNU History.


La librería GNU History se puede usar separadamente de la GNU Readline.


Atajos de teclado


Nomenclatura:
Usaremos la siguiente convención. P.ej:

C-e significa presiona Control y la tecla e a la vez.

M-e significa presiona la tecla meta y la e. Podemos simular la tecla meta presinando primero la tecla Escape y después la letra e (metaficando la tecla e).

M-C-k significa metaficando C-k , es decir, presionando primero ESC y después C-k.


Auto inserción
(a, b, A, 1, !, ...)

Esos caracteres y algunos otros son insertados cuando se presiona su tecla asociada.

P.ej: e imprime una 'e'


Aceptar una línea
RET acepta la línea independientemente de la posición del cursor.


Símbolos especiales
C-i equivale a Tab

C-j equivale al caracter nueva línea

C-m equivale a Enter

C-d si el puntero está al principio de la línea y no hay otros caracteres, este símbolo equivale a FIN del FICHERO (EOF).


Inserción entrecomillada
C-vC-q) inserción entrecomillada

Si queremos insertar C-e en lugar de ejecutar el comando asociado a C-e presionaremos:
C-v C-e

ó para insertar C-v
C-v C-v


NOTA: C-s y C-q están restringidas al control de flujo del terminal si XON/XOFF está activado.
http://unix.stackexchange.com/questions/72086/ctrl-s-hang-terminal-emulator


Mover el cursor
C-b Mover un carácter hacia atrás.

C-f Mover un carácter hacia adelante.


C-a Moverse al comienzo de la línea.

C-e Mover al final de la línea.


M-f Desplazarse adelante una palabra.

M-b Moverse hacia atrás una palabra.



Borrar caracteres
DEL ó Backspace Borra el carácter a la izquierda del cursor

C-d Borra el carácter debajo del cursor

M-DEL Borra la palabra debajo del cursor.

M-d Borra la palabra después del cursor.


Limpiar la pantalla
C-l borra la pantalla y reimprime la línea actual en la parte superior.


Cambiando texto
M-u convierte a mayúsculas desde el cursor hasta el final de la palabra actual.

M-l convierte a minúsculas desde el cursor hasta el final de la palabra actual.

C-t transpone caracteres

M-t transpone palabras

M-c convierte la primera letra a mayúsculas (desde el cursor hasta el final de la palabra actual)


Comandos para eliminar y copiar texto

Estos comandos al "eliminar" texto lo añaden al anillo de texto eliminado y puede ser recuperado mediante el comando copiar (yank).

C-k elimina texto desde el cursor hasta el final de la línea.

C-u elimina desde el cursor hasta el comienzo de la línea actual.

M-d elimina texto desde el cursor hasta el fin de la palabra.

M-DEL elimina texto desde el cursor hasta el comienzo de la palabra actual.

C-w elimina desde el cursor hasta el espacio anterior.

C-y copiar el texto previamente "eliminado".

M-y rotar el "anillo de texto eliminado" (kill ring) y copiar el nuevo tope.


Comandos para deshacer
C-x C-u Deshacer el último comando de edición.

C-_ Deshacer el último comando de edición.

M-r Deshacer todos los comandos ejecutados en esta línea (revertir la línea).


Abortar
C-g Abortar el comando de edición actual (También se usa para parar una búsqueda incremental)


Puntero y marca
C-@ sitúa la marca en la posición del puntero.

C-x C-x intercambia la posición del puntero y la marca.


Pasando argumentos a los comandos readline
Podemos pasar un argumento numérico empleando la tecla meta.


P.ej: mover el cursor hacia adelante 3 caracteres.

M-3 C-f


P.ej:

M-3 w escribir www


También podemos pasar números negativos:

Si primero presionamos el signo menos, el argumento se convierte en negativo.

P.ej:

M-- C-k elimina el texto hasta el comienzo de la línea.

M--3 C-f mueve hacia atrás 3 caracteres.


Editor
C-x C-e invoca un editor para la línea de comandos actual.


Auto-completado
TAB Intenta autocompletar el texto anterior al puntero. El autocompletado que se realice es específico de la aplicación.

Bash intenta autocompletar tratando el texto como:
  • una variable(si el texto comienza con `$')
  • nombre de usuario (si el texto comienza con `~')
  • hostname (si el texto comienza con `@')
  • comando (incluyendo aliases y funciones)
  • Si ninguna de las anteriores es válida, entonces intenta el autocompletado de ficheros.

M-? lista los posibles autocompletados.

C-x / muestra los posibles autocompletados de ficheros.

M-/ realiza el autocompletado de ficheros.

C-x ~ muestra los posibles autocompletados de nombres de usuario.

M-~ realiza el autocompletado de nombre de usuario.

C-x $ muestra posibles autocompletados de variables de shell.

M-$ realiza autocompletado de variables de shell.

C-x @ muestra posibles autocompletados de hostname.

M-@ realiza autocompletado de hostname.

C-x ! muestra posibles autocompletados tratando el texto anterior al puntero como un nombre de comando. También trata de autocompletar los alias, palabras reservadas, funciones de shell, etc.

M-! realiza el autocompletado de nombres de comandos.

M-TAB realiza el autocompletado usando la lista histórica de comandos.


Macros de teclado
C-x ( comenzar una macro de teclado.

C-x ) terminar una macro de teclado.

C-x e ejecutar la útima macro de teclado definida.


Buscando en la historia
C-r búsqueda incremental hacia atrás en la historia, buscando coincidencias de la cadena introducida.

C-s búsqueda incremental hacia adelante en la historia. (NOTA: si está activado el control de flujo por software, el terminal se quedará colgado. Presiona C-q para recuperarlo)

http://unix.stackexchange.com/questions/72086/ctrl-s-hang-terminal-emulator


ESC y C-j paran la búsqueda incremental actual manteniendo los resultados ya obtenidos.

C-g para la actual búsqueda incremental y restaura los valores originales.

RET ejecuta el resultado de la actual búsqueda.


M-p búsqueda hacia atrás (no incremental)

M-n búsqueda hacia adelante (no incremental)


Expansión de la historia (De GNU History)
M- Moverse a la primera línea en la historia.

M- Moverse al final de la historia de entradas (normalmente la línea actual que estamos tecleando)


C-p comando previo en la historia

C-n comando siguiente en la historia


!! ejecutar de nuevo el comando previo

!3 ejecutar de nuevo el comando de la línea 3

!-n ejecutal el comando de n líneas atrás.
!! equals ( !-1 )

!string ejecuta un comando que empieza con string

!?string ejecuta un comando que termina con string

!?string? ejecuta un comando que contiene string


Usando la designadores y modificadores de palabras podemos sustituir anteriores comandos y argumentos de la historia y ejecutarlos de nuevo.
http://www.catonmat.net/blog/the-definitive-guide-to-bash-command-line-history/


Control de trabajos/procesos de bash
C-z suspender el trabajo actual (Mandarle la señal SIGSTOP)

C-y suspensión con retraso del trabajo actual (continúa hasta que se produce una entrada de datos)


Señales
C-c manda SIGINT al trabajo actual (Normalmente cierra el proceso limpiamente)


Configurar el fichero init y recargarlo
Fichero init de Readline: /etc/inputrc

C-x C-r recargar el fichero init de Readline.



REFERENCIA


Bash manual de referencia:
https://www.gnu.org/software/bash/manual/bashref.html
https://www.gnu.org/software/bash/manual/bashref.html#Command-Line-Editing

Página de GNU Readline:
http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html

Documentación de Readline:
http://cnswww.cns.cwru.edu/php/chet/readline/readline.html

Documentación para la librería GNU History:
http://cnswww.cns.cwru.edu/php/chet/readline/history.html

https://en.wikipedia.org/wiki/GNU_Readline


TRADUCIDO DE


Bash shell: default keyboard shortcuts

No hay comentarios:

Publicar un comentario