Jump to content
From ArchWiki
Esta traducción de Readline fue revisada el 2022-11-04. Si existen cambios puede actualizarla o avisar al equipo de traducción.

Readline es una biblioteca del Proyecto GNU, utilizada por Bash y otros programas con interfaz CLI para editar e interactuar con la línea de órdenes. Véase readline(3) para más información.

## Instalación

Es probable que el paquete readline ya esté instalado como una dependencia de Bash.

## Modo de edición

De manera predeterminada, Readline utiliza los atajos de estilo Emacs para interactuar con la línea de órdenes. Sin embargo, la interfaz de edición de estilo vi también están soportados añadiendo lo siguiente a `~/.inputrc`:

    ~/.inputrc

    set editing-mode vi

Alternativamente, para configurarlo solo para Bash, añada la siguiente línea a `~/.bashrc`:

    ~/.bashrc

    set -o vi

### Indicador de modo en el prompt

La edición de estilo vi tiene dos modos: comando e insertar. Puede visualizar cuál está activo actualmente añadiendo la siguiente opción:

    ~/.inputrc

    set show-mode-in-prompt on

Esto imprimirá una cadena en su prompt (`(cmd)`/`(ins)` por defecto) que se puede personalizar con las variables `vi-ins-mode-string` y `vi-cmd-mode-string`.

### Diferentes formas de cursor para cada modo

Puede configurar una forma de cursor diferente para cada modo utilizando "\1 .. \2" escapes:

    ~/.inputrc

    set vi-ins-mode-string \1\e[6 q\2
    set vi-cmd-mode-string \1\e[2 q\2

Esto establecerá un cursor en forma de bloque cuando esté en el modo de comando y un cursor de tubería cuando esté en el modo de inserción. Tenga en cuenta que debe tener activado el indicador de modo para que esto funcione (véase #Indicador de modo en el prompt.

La consola virtual utiliza diferentes códigos de escape, por lo que antes debe verificar qué terminal se está utilizando:

    ~/.inputrc

    $if term=linux
    	set vi-ins-mode-string \1\e[?0c\2
    	set vi-cmd-mode-string \1\e[?8c\2
    $else
    	set vi-ins-mode-string \1\e[6 q\2
    	set vi-cmd-mode-string \1\e[2 q\2
    $endif

Véase Cursor software para VGA para mas detalles.

## Movimiento rápido entre palabras

Xterm permite moverse entre palabras con `Control+Izquierda` y `Control+Derecha` de forma predeterminada. Para lograr este efecto con otros emuladores de terminal, encuentre los códigos de terminal correctos [1], y conéctelos a `backward-word` y `forward-word` en `~/.inputrc`.

Por ejemplo, para urxvt:

    ~/.inputrc

    "\e[1;5D": backward-word
    "\e[1;5C": forward-word

## Historial

Por lo general, presionar la tecla de flecha hacia arriba hará que se muestre la última orden, independientemente de la orden que se haya escrito hasta el momento. Sin embargo, a los usuarios les puede resultar más práctico listar solo las órdenes anteriores ​​que coincidan con la entrada actual.

Por ejemplo, si el usuario ha escrito las siguientes órdenes:

- `ls /usr/src/linux-2.6.15-ARCH/kernel/power/Kconfig`
- `who`
- `mount`
- `man mount`

En esta situación, al escribir `ls` y presionar la tecla de flecha hacia arriba, la entrada actual se reemplazará con `man mount`, la última orden ejecutada. Si se ha habilitado la búsqueda de historial, solo se mostrarán las órdenes anteriores que comiencen con `ls` (la entrada actual), en este caso `ls /usr/src/linux-2.6.15-ARCH/kernel/power/Kconfig`.

Puede habilitar el modo de búsqueda de historial añadiendo las siguientes líneas a `/etc/inputrc` o `~/.inputrc`:

    "\e[A": history-search-backward
    "\e[B": history-search-forward

Si está utilizando el modo vi, puede añadir las siguientes líneas a `~/.inputrc` (de esta publicación):

    set editing-mode vi
    $if mode=vi
    set keymap vi-command
    # estos son para el modo de órdenes vi
    "\e[A": history-search-backward
    "\e[B": history-search-forward
    j: history-search-forward
    k: history-search-backward
    set keymap vi-insert
    # estos son para el modo de inserción vi
    "\e[A": history-search-backward
    "\e[B": history-search-forward
    $endif

Si eligió añadir estas líneas a `~/.inputrc`, se recomienda que también añada la siguiente línea al principio de este archivo para evitar cosas extrañas como esta:

    $include /etc/inputrc

Alternativamente, se puede utilizar el historial de búsqueda inversa (búsqueda incremental) presionando `Control+R`, que no busca en base a la entrada anterior, sino que salta hacia atrás en el búfer del historial a medida que se escriben las órdenes en la búsqueda de términos. Al presionar nuevamente `Control+R` durante este modo, se mostrará la línea anterior en el búfer que coincide con el término de búsqueda actual, mientras que al presionar `Control+G` (abortar) se cancelará la búsqueda y se restaurará la línea de entrada actual. Entonces, para buscar en todos las órdenes `mount` anteriores, presione `Control+R`, escriba 'mount' y siga presionando `Control+R` hasta que se encuentre la línea deseada.

El equivalente directo de este modo se denomina historial de búsqueda avanzada y está vinculado a `Control+S` de forma predeterminada. Tenga en cuenta que la mayoría de los terminales anulan `Control+S` para suspender la ejecución hasta que se presione `Control+Q`. (A esto se le llama control de flujo XON/XOFF). Para activar el historial de búsqueda avanzada, deshabilite el control de flujo de esta forma:

    $ stty -ixon

o utilice una tecla diferente en `inputrc`. Por ejemplo, para utilizar `Alt+S` que no está enlazado por defecto:

    "\es": forward-search-history

## Completado más rápido

Al realizar el completado mediante tabulador, una sola pulsación intenta completar parcialmente la palabra actual. Si no son posibles los completados parciales, una doble pulsación muestra todas los completados posibles.

La doble pulsación de tabulador se puede cambiar a una sola pulsación con la configuración siguiente:

    ~/.inputrc

    set show-all-if-unmodified on

O puede configurarlo de modo que una sola pulsación de tabulador realice ambos pasos: que complete parcialmente la palabra y que muestre todas los completados posibles si aún es ambigua:

    ~/.inputrc

    set show-all-if-ambiguous on

## Colores en el completado

Puede habilitar el coloreado del completado de los nombres de archivo con la opción `colored-stats`. También puede colorear el prefijo idéntico de las listas de completado con `colored-completed-prefix`. Por ejemplo:

    ~/.inputrc

    # Archivos de color por tipos
    # Tenga en cuenta que esto puede hacer que el texto de finalización parpadee en algunos terminales (p.e. xterm)
    set colored-stats On
    # Añadir un carácter para indicar el tipo
    set visible-stats On
    # Marcar directorios enlazados
    set mark-symlinked-directories On
    # Colorea el prefijo común
    set colored-completion-prefix On
    # Colorea el prefijo común en completado por menú
    set menu-complete-display-prefix On

## Macros

Readline también admite teclas enlazadas para macros de teclado. Para un ejemplo simple, ejecute esta orden en Bash:

    bind '"\ew": "\C-e # macro"'

o añada la parte entre comillas simples a inputrc:

    "\ew": "\C-e # macro"

Ahora escriba una línea y presione `Alt+W`. Readline actuará como si se hubiera presionado `Control+E` (final de línea), añadido con '`# macro`'.

Utilice cualquiera de las combinaciones de teclas existentes dentro de una macro de readline, lo que puede ser bastante útil para automatizar los términos de uso frecuente. Por ejemplo, este hace que `Control+Alt+L` añada "| less" a la línea y la ejecute (`Control+M` es equivalente a `Intro`):

    "\e\C-l": "\C-e | less\C-m"

El siguiente prefija la línea con 'yes |' al presionar `Control+Alt+Y`, confirmando cualquier pregunta de sí/no que la orden pudiera preguntar:

    "\e\C-y": "\C-ayes | \C-m"

Este ejemplo ajusta la línea en `su -c ''`, si se presiona `Alt+S`:

    "\es": "\C-a su -c '\C-e'\C-m"

Este ejemplo prefija la línea con `sudo`, si se presiona `Alt+S`. Es más seguro porque no introduce la tecla `Intro`.

    "\es": "\C-asudo \C-e"

Como último ejemplo, envíe rápidamente una orden en segundo plano con `Control+Alt+B`, descartando toda su salida:

    "\e\C-b": "\C-e > /dev/null 2>&1 &\C-m"

## Desactivando el control de eco

Readline hace que el terminal se haga eco de `^C` después de presionar `Control+C`. Para los usuarios que deseen deshabilitar esto, simplemente añada lo siguiente a `~/.inputrc`:

    set echo-control-characters off

## Véase también

- Hoja de trucos de edición de vi readline
- Hoja de trucos de edición de emacs readline

Categories:

- Command-line (Español)
- GNU (Español)