Configure la flecha hacia arriba para examinar los comandos con los mismos caracteres iniciales en lugar de todos los comandos anteriores

15

En la bashlínea de comandos, me da el comando anterior. En las líneas de comando en numpyo matlab, cuando escribo algunos caracteres, me da el comando ingresado previamente que comienza con esos caracteres . ¿Cómo puedo habilitar exactamente este comportamiento bash?

Conozco formas más avanzadas de buscar en el historial de la línea de comandos, pero a veces una forma simple es más conveniente.

gerrit
fuente

Respuestas:

18

Los comandos de readline que está buscando son los history-search-*comandos:

history-search-forward
Busca en el historial la cadena de caracteres entre el comienzo de la línea actual y la posición actual del cursor (el punto). Esta es una búsqueda no incremental.
history-search-backward
Busca hacia atrás a través del historial la cadena de caracteres entre el inicio de la línea actual y el punto. Esta es una búsqueda no incremental.

Vinculando estos en su .inputrc, así:

"\e[A": history-search-backward            # arrow up
"\e[B": history-search-forward             # arrow down

le permitirá ingresar los primeros caracteres de un comando, y luego usar las teclas Upy Downpara moverse a través de los comandos .bash_historyque comienzan con esa cadena.

Por ejemplo, al ingresar viy al Upiría al primer comando anterior que comienza con vi, como vim somefile. Entrar Upte llevaría a la siguiente instancia anterior, y así sucesivamente.

Puede leer más sobre todos los enlaces de readline aquí: http://linux.about.com/library/cmd/blcmdl3_readline.htm

jasonwryan
fuente
10

Agregue lo siguiente a su .inputrc en ~ /, para hacer lo que sugirió:

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

Quizás también desee agregar lo siguiente a su .bash_profile:

export INPUTRC=~/.inputrc
johankj
fuente
¿Puedes explicar por qué hacer esta "exportación"?
texnic
2

Anteponer un "!" al comando que estás buscando. Si desea reemplazar la funcionalidad de las flechas hacia arriba y hacia abajo, el camino a seguir es modificar el archivo inputrc (como sugieren las otras respuestas).

Si "comando" es el comando que está buscando, ingrese esto:

!comm

Debería obtener "comando" como salida.

Del mismo modo, si desea encontrar un comando que incluya (pero no comience con) parte del comando, presione ctrl + r y luego escriba parte del comando.

También puede escribir "pestaña" para completar automáticamente el texto ingresado (esto también incluye archivos). Esto es útil si está buscando un comando que no está en su historial (o no tiene un archivo de historial)

Puede leer más sobre "dominar" el archivo de historial aquí: http://www.thegeekstuff.com/2008/08/15-examples-to-master-linux-command-line-history/

Este es un posible duplicado de /programming/1030182/how-do-i-change-bash-history-completion-to-complete-whats-already-on-the-line

Realidad
fuente
Las otras respuestas responden más correctamente mi pregunta, pero gracias por el puntero a SO (ver también meta.stackexchange.com/q/4708/172266 ).
gerrit