Pantalla Bash vs.Gnu: Reemplace Ctrl-A con Ctrl-Shift-A

44

Soy un nuevo usuario de GNU Screen. He estado usando Bash durante mucho tiempo y quiero probar GNU Screen.

Como sabes, GNU Screen usa 'Ca' (Control-A) como el carácter de comando. El problema es que esto interfiere con la función de Edición de línea en Bash (y GNU Readline), porque Control-A en Bash se moverá al comienzo de la línea ".

Sé que puedo configurar el Carácter de comando en otra secuencia de teclas , como "^ Q" o "` `" (Retroceso), pero tengo problemas para encontrar otra secuencia de teclas que aún no esté en uso (^ Q es utilizado por el terminal , retroceso se utiliza al escribir scripts de shell). Parece que el carácter de comando solo puede tener uno o dos caracteres de longitud. ¿Puedo configurar el carácter de control de pantalla GNU para que sea algo así como "Control-Shift-A"?

(Todavía no puedo usar más de un hipervínculo, por lo que no puedo vincular a la documentación de Bash)

Stefan Lasiewski
fuente
55
En aras de no desorientarse cuando se usa screenen otros sistemas, es mejor que te quedes con las combinaciones de teclas predeterminadas, o al menos las aprendas primero. ^A aenviará, por defecto, el ^Acombo de teclas habitual . Es un poco incómodo si usa mucho ese combo; Por lo general, uso la HOMEclave debido a esto. Pero eso tampoco siempre funciona.
intuido
No hay amor aquí por Ctrl-espacio. Funciona genial.
Comodín el

Respuestas:

18

El problema con Control- Shift- Aes que la mayoría de los programas de emulación de terminal no envían un código diferente para él desde el enviado Control- A, por lo que no habría manera de pantalla para ver la diferencia.

Es posible que pueda usar Cq si stty -ixondeshabilita el "control de flujo de software" en el tty. Usualmente hago esto para poder usar Cs para buscar en la línea de comando.

Puede considerar C- ^, ya que parece estar generalmente sin consolidar. Es Control- Shift- 6en diseños de teclado de EE. UU., Pero puede ser difícil escribir en otros diseños.

La mayoría de la gente nunca usa el carácter de control tty C- \ para enviar SIGQUIT. Para usarlo, deshabilite la funcionalidad tty con with stty quit undefy únala como su clave de prefijo. Sin embargo, esto es un poco arriesgado, ya que si presiona C- \ en un tty donde la tecla para salir no se ha deshabilitado con stty , puede matar el proceso en primer plano en lugar de activar la pantalla .

Me cambié a tmux hace un tiempo. Su valor predeterminado es Cb porque se desarrolló bajo la pantalla y no interfirió con el valor predeterminado de la pantalla . He descubierto que Cb funciona bastante bien para mí (generalmente uso las teclas de flecha para el movimiento de un solo carácter en la línea de comando de la shell, aunque uso Mb y Mf para moverme por palabras).

Por cierto, el autor de tmux usa Ca en sus sesiones primarias y siempre escribe Ca dos veces (ya sea en una sesión de tmux o no). Si está dispuesto a adoptar este hábito, parece un compromiso decente ya que el segundo Ca debería ser un no-op en la mayoría de los contextos de edición tipo Emacs. No funcionaría, así lo haría si a menudo usa programas / contextos fuera de la pantalla donde el segundo Ca no sería un no-op.

De manera predeterminada, Ca Ca está vinculado al otro comando (cambiar a la pantalla activa más reciente) en la pantalla . Para que Ca Ca envíe un Ca real y haga que Ca o cambie de ventana, ingrese lo siguiente en su .screenrc:

escape ^A^A
bind o other
Chris Johnsen
fuente
2
Esto suena bien, luego me di cuenta de que en la pantalla GNU, escribir Ca dos veces cambiará a la ventana mostrada anteriormente. Tal vez pueda asignar "Ca Ca" a otra cosa, aunque no estoy realmente seguro de cómo hacerlo (Parece que necesito especificar 'escape xy' o 'meta' para esto) Ver gnu.org/software/screen/ manual / screen.html # Other-Window
Stefan Lasiewski
1
@Stefan Lasiewski: Vaya, olvidé que Ca Ca no envía Ca ​​por defecto. Vea la adición al final de la respuesta para ver un poco de configuración que hace que Ca Ca envíe Ca y Ca o cambie a la ventana anterior.
Chris Johnsen
¡Funciona genial! Ca Ca enviará un Ca real al shell subyacente y Ca o 'cambiará a la ventana' otro '. Para enviar 'Ca' a Bash, presione 'Ca' dos veces. Esto debería ser un no-op fuera de la pantalla, y no debería causar problemas.
Stefan Lasiewski
41

No hay necesidad de la solución.
Para ir al comienzo de la línea mientras usa la pantalla en bash, use

Control- A(liberar y luego)A


En general, si hay un carácter de control de pantalla en conflicto con un acceso directo de bash, el primer acceso directo de bash Controlse reemplazará con Control-A

Del mismo modo para otros atajos de edición de línea.

skyshock21
fuente
gracias, no lo hice ahora, aunque es así de fácil. de hecho no hay necesidad de reconfigurar nada. Me gusta tu respuesta mejor.
Harald
+1 ty: esta es, con diferencia, la mejor opción. Lo curioso es que, al probar esto, golpeé Ca Ca por accidente y encontré otro gran combo.
kfmfe04
3

Uso C- \ para pantalla y no puedo recomendarlo lo suficiente. Puede golpear cualquier otra definición clave en caso de accidente, pero generalmente no C- \. Eso es lo que me gusta de eso.

MikeHoss
fuente
3

Yo uso esto .screenrc

escape ^bb

Ejemplo: para separarlo, escriba ctrl-b d

guettli
fuente
0

Yo uso ctrl-_ (que también puede ser producido por ctrl + 7 y generalmente ctrl + /) con screen / tmux.

graywh
fuente
0

Uso ctrl-z la mayor parte del tiempo, pero también uso ctrl-x para algunos. No uso tanto la interrupción 'stop', pero cuando es necesario, puedo escribir ^ zz. Esto también me permite iniciar sesiones de pantalla secundarias en servidores remotos que usan el ctrl-a predeterminado. Y si comienzo una tercera sesión (en un tercer servidor), entonces puedo usar ctrl-x. Ctrl-x es la función de bloqueo de pantalla, que en muchos entornos no es tan habitual (ya que la pantalla a menudo se ejecuta dentro de un emulador de terminal).

Arcege
fuente