iPython como historial de comandos para Shell


24

Para aquellos de ustedes que no hacen programación python en ubuntu, ipython es un shell de python con esteroides, pero tiene esta característica sorprendente que no solo se completa automáticamente en función de nombres conocidos (es decir, de la misma manera que bash lo hace al presionar tab), pero si comienza a escribir un comando y presiona hacia arriba, no se desplazará por todo el historial (como bash) sino solo a través de los comandos recientes que comenzaron con la misma cadena de letras.

Entonces, si hiciste algún comando largo como scp -r -P 8000 -l user server.com:~/dir/to/copy ./seguido de varios otros comandos. Si comenzaste a escribir scpy presionaste, bash mostraría el comando mostrado antes en lugar de solo desplazarte por todo el historial.

¿Hay una extensión como esta para bash? ¿O hay algún shell que ofrezca este tipo de características?

Respuestas:


26

Bash también tiene esa característica, pero no está habilitada de manera predeterminada. Puede vincularlo al cursor arriba / abajo pegándolo en ~/.inputrc:

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

Prefiero vincularlo a Ctrl+ arriba / abajo en su lugar:

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

editar: para preservar ctrl+lefty ctrl+rightavanzar y retroceder en palabras completas, incluya también estas líneas en el ~/.inputrcarchivo

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

Con este consejo, ahora no puedo usar Ctrl + izquierda / derecha en la terminal para saltar a la palabra siguiente / anterior, lo que me arruina todo el propósito. Tal vez hay una solución?
zetah

@zetah Edité en la respuesta mi solución para el movimiento de palabras
wim

1
Para conservar todos los valores predeterminados, también puede agregar $include /etc/inputrc, preferiblemente en la primera línea.
Tulio Casagrande

9

Intenta presionar Ctrl+ Ry escribe algunas letras. Funciona en el orden inverso también.


6

Y no olvide los fantásticos atajos de expansión de la historia en bash. 1

Estoy publicando algunos extractos de la página de manual, en caso de que no los haya tatuado en su brazo (o los haya memorizado).

   Event Designators  
       An event designator is a reference to a command line entry in the  his
       tory list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command line minus n.
       !!     Refer to the previous command.  This is a synonym for `!-1'.
       !string
              Refer to the most recent command starting with string.
       !?string[?]
              Refer  to the most recent command containing string.  The trail‐
              ing ? may be omitted if string is followed immediately by a new‐
              line.
       ^string1^string2^
              Quick  substitution.  Repeat the last command, replacing string1
              with string2.  Equivalent to ``!!:s/string1/string2/'' (see Mod‐
              ifiers below).
       !#     The entire command line typed so far.

Con frecuencia uso la capacidad de referirme a la última 'palabra' del comando anterior. P.ej,

mkdir /foo/shmoo/adir.horribilus.foo
cp file1 file2 file3 file4 !$ 
ls -l !$

En ambos casos aquí, los !$partidos /foo/shmoo/adir.horribilus.foo.


1 ... que fueron tomados de csh. Para mitigar el alcance del robo de funciones de bash, la página de manual de bash dice

   The shell supports a history expansion feature that is similar  to  the
   history  expansion in csh.  

Entonces, es "similar". Algo de esto puede entrar csho tcsh. O cualquier descendiente de csh que no esté utilizando debido al hecho de que no es tan maravilloso como bash.


0

Hay una alternativa similar a lo que @ ak2 mencionó anteriormente , pero no tiene que crear un nuevo archivo .inputrc.

En cambio, si tiene permisos de sudo, puede habilitarlo en el archivo / etc / inputrc. En este archivo hay varias configuraciones de teclado, incluida la función de búsqueda del historial (al menos para 18.04). El extracto de / etc / inputrc es:

# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward

Simplemente descomente las dos líneas inferiores usando un editor de archivos sudo (por ejemplo, $ sudo vim), y una nueva sesión de terminal tendrá la función de búsqueda de historial (para todos los usuarios).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.