2010-06-21 14 views
10

Recientemente hice el cambio vencido increíblemente largo de tcsh a bash. Lo único que echo de menos es de Tcsh ESC + p característica: Comienza a escribir un comando y después haga clic en ESC + p (que en realidad encontramos el equivalente ctrl- [p fácil de escribir) y salta a el comando más reciente en su historia que comienza con lo que ha tipeado hasta ahora.Bash equivalente a ESC-p de Tcsh para saltar a la orden comenzando con lo que tipeó hasta ahora

Quizás la mejor respuesta es simplemente acostumbrarse a Ctrl +r de fiesta pero hasta ahora no me gusta tanto. A menudo comienzo a escribir un comando y luego se me ocurre que lo he emitido antes. Con la característica de Tcsh Podría entonces hacer ESC + p + Enter volver a emitir la misma. Es tan rápido que normalmente nunca uso la flecha hacia arriba para nada más de 2 comandos atrás.

Un ejemplo de donde lo encontré especialmente agradable: comandos largos a menudo comienzan con un punto, porque son de la forma

./myprogram.pl -lots -of -args -and -switches 

En Tcsh Me emitir una orden así, entonces tal vez ls , menos, cola, lo que sea, y luego volver a emitir el comando largo, 4 teclas: punto, escape, p, intro.

¿Cómo puedo hacer eso en Bash? O, para hacerlo más concreto, ¿cuál es el menor número de teclas presionadas para decir "repite el último comando que comenzó con un punto"? ¿Puede igualar o superar el 4 de tcsh?

+0

Necesitaba lo contrario para que pueda hacer que el entorno tcsh en el que estoy atascado en el trabajo sea funcional. Ahora sé: \ ep. Y puedo usar bindkey para volver a configurar la flecha hacia arriba como si estuviera acostumbrado. Gracias :). – Chinasaur

+0

Pruebe la solución aquí: http://superuser.com/questions/351543/bashs-equivalent-of-tcshs-escp trabajado para mí. –

+0

Tengo acceso a 'esc-p' en bash, aunque tienes que pensar en usarlo primero o tienes que escribir los datos de nuevo ... –

Respuesta

9

añadir esto a su archivo ~/.inputrc:

"\e[5~": history-search-backward 
"\e[6~": history-search-forward 

Esto hará que PageUp acto como el de Tcsh Esc + p y PageDown irá hacia adelante a través de la lista.

En su lugar, puede enlazar \ep. Si usa PageUp/PageDown, puede que necesite ver qué secuencia de caracteres produce su teclado/terminal. Sólo tiene que pulsar Ctrl + V continuación PageUp y verá ^[[5~ si es la misma que \e[5~.

2

Bueno, puede hacerlo

!. 

que es de tres caracteres (incluyendo la tecla Intro). Por supuesto, en el caso general, puede reemplazar el punto con el prefijo de identificación único de su elección.

+1

¡Oh, guau, bien, gracias! Pero en realidad no me gusta tanto como la versión de tcsh porque (a) requiere la previsión para comenzar con el bang en lugar de solo escribir el comienzo del comando (o ctrl-a! Por supuesto), y (b) ejecuta de inmediato. Me gustaría saltar a ese comando, pero tengo la oportunidad de editarlo o asegurarme de que sea el que yo quería. ¡Sin embargo, sí has ​​encontrado la versión concreta de la pregunta! (Tenga en cuenta que esto es 3 caracteres, no 2, ya que incluía el Enter final) – dreeves

+0

@dreeves - Sí, tiene razón - esto no soluciona el problema de previsión, solo su reformulación concreta. Parece que tienes una buena respuesta de Dennis Williamson para eso. He agregado la entrada para que coincida con su descripción. –

8

Yo estaba en el mismo barco que usted, necesitando cambiar a bash desde tcsh.

Acabo de crear un nuevo ~/.inputrc archivo de la siguiente manera y todo funciona muy bien!

 
$ cat ~/.inputrc 
"\ep": history-search-backward 
"\en": history-search-forward 
+1

Esto está cerca, pero no del todo, porque tcsh mueve el cursor al final de la línea, pero bash/readline lo deja en su lugar. – George

1

Personalmente prefiero ctrl-r - es una búsqueda interactiva a través de la historia - compruébalo, tal vez te guste. Las pulsaciones subsiguientes de ctrl-rr saltan a la siguiente coincidencia.

+0

Estoy ciertamente dispuesto a ser persuadido sobre ese punto. ¿Cuántas teclas se necesitan para mi ejemplo "repetir el último comando que comenzó con un punto", usando ctrl-r? (Estoy pensando que dado que toneladas de comandos desde entonces * contienen * puntos que esto es una especie de no arranque para ctrl-r, pero tal vez haya un truco que no sé). – dreeves

Cuestiones relacionadas