Busque un comando anterior con el mismo prefijo cuando presiono Arriba en el símbolo del shell

Busque un comando anterior con el mismo prefijo cuando presiono Arriba en el símbolo del shell

Viniendo de un mundo FreeBSD, deseo que la terminal Linux se comporte como una FreeBSD, especialmente la versión 9.1, básicamente cuando escribes cden la terminal y presionas la flecha "arriba" puedes explorar todos los comandos en el historial, comenzando por cdel que te hace ganar mucho tiempo.

No sé cómo habilitar esta función en Linux Debian o CentOS que me obliga a escribir todo, ¿podría alguien ayudarme?

Respuesta1

Agregue lo siguiente a ~/.inputrc:

# Press up-arrow for previous matching command
"\e[A":history-search-backward
# Press down-arrow for next matching command
"\e[B":history-search-forward

Explicación

~/.inputrces el archivo de configuración paralínea de lectura de GNU. Muchos shells, incluido Readline bash, lo tcshutilizan para editar la línea de comandos. Las dos líneas anteriores le indicarán a readline que invoque su funcionalidad de búsqueda de historial cuando se encuentren las secuencias de escape para las teclas de flecha hacia arriba ( \e[A) y hacia abajo ( ).\e[B

Respuesta2

Lo que sucede es que FreeBSD y Linux usan shells diferentes por defecto. FreeBSD por defecto estcsh, que tenía mejores características interactivas que bash en el pasado (pero bash se ha puesto al día) perocaracterísticas de scripting notablemente peores.

La forma más sencilla de obtener el entorno al que está acostumbrado sería cambiar su shell a tcsh en Linux. Siempre que tcsh esté instalado en todo el sistema (si no lo está, pídale al administrador del sistema que lo instale), ejecútelo chsh -s tcshpara cambiar su shell predeterminado.

Alternativamente, puedes configurar bash para que tenga este comando al que estás acostumbrado. De forma predeterminada, las Upflechas Downy navegan entre todos los comandos del historial, no solo los que comienzan con el prefijo que has escrito. Para cambiar esto al comportamiento al que está acostumbrado, coloque las siguientes líneas en el archivo de inicialización de bash, que se encuentra .bashrcen su directorio de inicio. Ejecute . ~/.bashrco inicie un nuevo shell para volver a leer el archivo de inicialización.

bind '"\eOA": history-search-backward'
bind '"\e[A": history-search-backward'
bind '"\eOB": history-search-forward'
bind '"\e[B": history-search-forward'

Las secuencias de escape son lo que su terminal envía al shell cuando presiona una tecla de flecha. Uppuede ser \eOA(escape, O, A) o \e[Adependiendo de tu terminal, y lo mismo para Down.

De forma predeterminada, bash ofrece diferentes combinaciones de teclas para buscar en el historial de comandos. Puede presionar Ctrl+ Ry luego ingresar algunos caracteres para buscar un comando que contenga esta subcadena en cualquier lugar de la línea. Presione Ctrl+ Spara avanzar en lugar de retroceder. La búsqueda es incremental (es decir, a medida que escribe); Alt+ Py Alt+ Nte ofrecen una búsqueda no incremental.

En lugar de bash y tcsh, puedes cambiar a zsh, quetiene algunas características interesantes que no se encuentran en otros shells. Zsh tiene Ctrl+ Ry Ctrl+ Spor defecto al igual que bash. Para obtener Upy Downcomo lo tenía en tcsh, coloque las siguientes líneas ~/.zshrc:

bindkey '\eOA' history-beginning-search-backward
bindkey '\e[A' history-beginning-search-backward
bindkey '\eOB' history-beginning-search-forward
bindkey '\e[B' history-beginning-search-forward

Si desea utilizar el mismo shell en todas partes, también puede utilizar bash o zsh en FreeBSD, siempre que el puerto esté instalado (nuevamente, consulte con el administrador del sistema).

Respuesta3

tcshestá disponible para la mayoría de las distribuciones de Linux. Intente instalar el tcshpaquete y luego ejecútelo chsh -s /bin/tcshpara convertirlo en su shell predeterminado.

información relacionada