Puede determinar la secuencia de caracteres emitida por una tecla presionando Ctrl- ven la línea de comando, luego presionando la tecla que le interesa. En mi sistema F12, obtengo ^[[24~
. El ^[
representa Esc. Diferentes tipos de terminales o emuladores de terminales pueden emitir diferentes códigos para la misma clave.
En un indicador de Bash, puede ingresar un comando como este para habilitar la macro clave y poder probarla.
bind '"\e[24~":"foobar"'
Ahora, cuando presione F12, obtendrá "foobar" en la línea de comando listo para editarlo más. Si desea que una pulsación de tecla ingrese un comando inmediatamente, puede agregar una nueva línea:
bind '"\e[24~":"pwd\n"'
Ahora, cuando presione F12, verá el directorio actual sin tener que presionarEnter . ¿Qué pasa si ya ha escrito algo en la línea y usa esto que se ejecuta automáticamente? Podría ensuciarse. Sin embargo, puede borrar la línea como parte de su macro:
bind '"\e[24~":"\C-k \C-upwd\n"'
El espacio asegura que el Ctrl - utenga algo que borrar para evitar que suene la campana.
Una vez que haya conseguido que la macro funcione como desea, puede hacerla persistente agregándola a su ~/.inputrc
archivo. No es necesario el bind
comando o el conjunto externo de comillas simples:
"\e[24~":"\C-k \C-upwd\n"
Editar:
También puede crear una combinación de teclas que ejecutará algo sin alterar la línea de comando actual.
bind -x '"\eW":"who"'
Luego, mientras escribe un comando que requiere un nombre de usuario, por ejemplo, y necesita saber los nombres del usuario que inició sesión, puede presionar Alt- Shift- Wy la salida dewho
se mostrará y se volverá a emitir el mensaje. con su comando parcial intacto y el cursor en la misma posición en la línea.
Desafortunadamente, esto no funciona correctamente para claves como las F12que generan más de dos caracteres. En algunos casos, esto se puede solucionar.
El comando ( who
en este caso) podría ser cualquier ejecutable: un programa, script o función.
bind '"\C-q": menu-complete'
por ejemplo (o en su~/.inputrc
:"\C-q": menu-complete
). También puede ser necesariostty -ixon
en su~/.bashrc
a desactivar el control de flujo y hacer ^ ^ Q y S disponible.^[
representaesc
y luego pareces sustituirlo\e
en tu ejemplo. ¿Podría explicar por qué, por favor?^[
es la representación de salida. El\e
es una manera de entrar en él (^[
no funciona para eso).Puede definir vinculaciones de teclas bash en
~/.inputrc
(archivo de configuración para la biblioteca GNU Readline). La sintaxis es<keyym o nombre de la clave>: macro
por ejemplo:
creará una macro que inserta "> salida" cuando presiona ControlO
creará una macro que inserta "echo foobar" cuando presiona F1... No sé cuál es el significado de la clave F11.
Editar:
.inputrc
comprende la\n
secuencia de escape para el salto de línea, por lo que puede utilizarLo que efectivamente 'presionará enter' después de que se emita el comando.
fuente
Alt
, use\e
, por ejemplo"\eo": "> output"
..inputrc
consulte hackaday.com/2018/01/19/linux-fu-custom-bash-command-completionEsta solución es específica para entornos X11 y no tiene nada que ver con bash, pero agrega lo siguiente a su .Xmodmaps
enviará la cadena "foobar" a la terminal al presionar F12.
fuente
Quería unirme
Ctrl+B
a un comando. Inspirado por una respuesta anterior, traté de usarbind
pero no pude averiguar qué serie de garabatos crípticos (\e[24~
?) Se traducen enCtrl+B
.En una Mac, vaya a Configuración de la aplicación Terminal, Perfiles -> Teclado ->
+
luego presione el atajo de teclado que está buscando y aparecerá. Para míCtrl+B
resultó en el\002
que me comprometí con éxito a mandarbind '"\002":"echo command"'
Además, si desea que el comando se ejecute de inmediato (no solo se inserte en el símbolo del sistema), puede agregar Enter al final de su comando, así:
bind '"\002":"echo command\015"'
fuente