¿Cuál es la secuencia de prefijo / escape menos conflictiva para screen o tmux?

96

La pantalla va con Ctrl+ A. tmux, por otro lado, tal como se desarrolló dentro de la pantalla, usa Ctrl+ B. Sin embargo, ambas pulsaciones de teclas también se usan en editores, shells, etc. Por lo tanto, elegir cualquiera de las dos degrada la experiencia del usuario y la funcionalidad de esas herramientas cuando se usan en tmux o screen.

¿Qué prefijo está en conflicto con las combinaciones de teclas de otros programas y shells?

Scott
fuente
66
"¿Cuál tiene menos conflictos con otros programas?" No tiene nada que ver con la opinión.
iconoclasta
Después de cambiar ~/.tmux.conf, no olvide reiniciar el servidor tmux para que los cambios surtan efecto ( superuser.com/q/188491/105108 ).
ks1322
Alternativa al uso de un prefijo: algunos terminales ahora ofrecen integración tmux a través de "tmux -CC" (es decir, iTerm2 para macOS). De esa manera, las ventanas tmux aparecen como pestañas en la terminal. Luego, podría usar las combinaciones de teclas para administrar pestañas que no entren en conflicto con ningún programa de terminal, es decir, usando la tecla cmd (también conocida como tecla súper, tecla de Windows).
cjay

Respuestas:

48

Creo que ^\(aka ^|) es el mejor si está en una posición conveniente en la distribución del teclado. Sus usos en otros programas son bastante raros:

  • enviando SIGQUITa un proceso
  • abortar por o mientras bucles en un shell cuando ^Ces interceptado
  • toggle-input-method en emacs

No conozco otros usos. Tenga cuidado de no matar accidentalmente un proceso fuera tmuxo screendespués de acostumbrarse. Sin embargo, me sucedió solo una vez en algunos años.

~/.tmux.conf

unbind-key C-b
set -g prefix 'C-\'
bind-key 'C-\' send-prefix

~/.screenrc

escape ^|^|
cjay
fuente
Intenté esto, pero tmux se queja del uso de C-`. Can I escape the `character de alguna manera?
Jason
2
Solo para que alguien más lo sepa, debe escribir en 'C-\'lugar de 'C- \' en la configuración de tmux.
gns-ank
2
No olvide 'tmux source-file /path/to/tmux.conf' cuando haya terminado de probar la nueva configuración
user72923
12
pero luego me acostumbro a ese comando, y cuando olvido que estoy en la pantalla, comienzo a enviar SIGQUITs accidentalmente ...
Kache
3
"si está en una posición conveniente en la distribución de su teclado" por defecto no lo está, ¿está implicando que hay una reasignación popular que está utilizando que hace que C- \ sea conveniente?
storypixel
53

Para las personas que desean utilizar el backtick como escape en tmux, querrán agregar:

unbind C-b
set -g prefix `
bind-key ` send-prefix

Ese último es importante, de lo contrario no puede escribir una tecla de retroceso para otros fines :-)

Ned Ruggeri
fuente
Backtick parece una buena idea hasta que pegue algo de SQL ...
Synchro
3
@Synchro en tmux 1.8 ya no es un problema gracias a la opción asumir-pegar-tiempo que está activada de forma predeterminada (configurada en 1 ms). Ver aquí: sourceforge.net/p/tmux/tmux-code/ci/…
sickill
Encontré esta pregunta buscando alternativas al backtick, ya que comenzó a causar problemas después de que me acostumbré a usar backticks en lugar de $()conchas. También se vuelve un dolor una vez que comienzas a escribir mucho Markdown. Lo he estado usando durante varios años, pero desafortunadamente tendré que cambiarlo ahora.
kirelagin 01 de
44
En .tmux.conf también tengo bind-key C-a set-option -g prefix C-a. Cada vez que necesito usar backticks, golpeo, lo `-Ctrl-aque establece mi prefijo C-a. Y tengo bind-key C-b set-option -g prefix `que poder golpear C-a-C-bpara volver
Boris
¿Qué pasa si estás escribiendo Markdown? ¿Cómo escapas del prefijo?
OJFord
21

También se sabe que Ctrl + A causa problemas con Emacs, incluido Bash en modo Emacs. Parece que esto no es un problema para ti.

Ctrl + O es la otra opción que he visto. Aparentemente, este es el valor predeterminado en RatPoison (este es un administrador de ventanas X que no necesita un mouse). He usado Ctrl + O cuando uso pantallas anidadas: Ctrl + O para el exterior y Ctrl + A para las interiores. Funcionó bien, pero asustó un poco a mis colegas. :-)

Estaba pensando y si usa vi en lugar de Emacs, hay algunas alternativas. Ctrl + G no se usa mucho, por ejemplo.

staticsan
fuente
8
Para los usuarios de Emacs, Ctrl + O parece ser la mejor opción: en emacs solo es "abrir una nueva línea en el cursor" y en bash "repetir una secuencia de comandos".
Flujo
2
+1 si está bien con las operaciones de Ctrl diestras, esto parece una buena copia de seguridad. Yo también soy zurdo ;-)
DaveParillo el
99
Creo que Ctrl + O rompe vim
Mu Qiao
14
Estoy de acuerdo con @MuQiao. Ctrl-o se usa en Vim para saltar a una posición más antigua del cursor (equivalente al botón de retroceso en muchos IDEs), una característica que uso muy a menudo mientras navego por el código en Vim. Ctrl-b es sinónimo de PageUp en Vim. No uso Ctrl-b en absoluto en Vim. Entonces, para los usuarios de Vim como yo, Ctrl-b sigue siendo una mejor opción que Ctrl-o. Yo uso Cj como mi clave de prefijo ya que Cj es sinónimo de j o <Down> en Vim y nadie usa Cj para mover una línea hacia abajo en Vim. Tengo esto en mi ~ / .tmux.conf:set -g prefix2 C-j; bind-key C-j send-prefix -2
Susam Pal
C-jentra en conflicto con CtrlP. Mover hacia arriba y hacia abajo la lista de búfer usa C-ky C-jrespectivamente
blockloop
14

Me CAPS-LOCKasignaron globalmente a ESC. Luego, uso M-Space(es decir, CAPS-LOCK+ Space) para mi prefijo.

Nathan Speed
fuente
Estoy tratando de hacer esto, pero si mantengo CAPS-LOCK(pensando en mi próximo comando o algo) tmux, o iTerm, no estoy seguro de qué está causando esto, recibe el ESCcomando repetidamente, lo M-Spaceque hace que no funcione. ¿Hay alguna forma de deshabilitar ese problema clave que se repite? Por ejemplo, funciona cuando presiono rápidamente CAPS-LOCK + Space, pero no si mantengo presionado CAPS-LOCKdurante un segundo más o menos y luego presiono Spaceno registra el M-Spaceacorde ...
Bruno Ely
12

Yo uso un sistema complejo para la pantalla. Mi escape predeterminado está configurado en \ 140 \ 140, que es una tecla de retroceso. Ctrl-A complica tanto la edición de Emacs como de la línea de comandos para mí dentro de Zsh, y no me gusta Ctrl-O (operaciones de 2 manos para la mayoría de las acciones de pantalla).

Vuelvo a vincular 's' a la pantalla 1 para que se creen nuevas sesiones de izquierda a derecha en el teclado a partir de 1. Esto me permite reservar la pantalla 0 para lo que considero ventanas persistentes o de referencia. Es muy rápido un gesto con una mano para (retroceso) 1, (retroceso) 2, (retroceso) 3 para cambiar entre ventanas.

El problema con el uso de backtick en un entorno Unix es cuando se intenta cortar y pegar el código de script shell / perl. Por esta razón, presiono la tecla F11 / F12 para cambiar entre mi personaje de escape.

bindkey -d -k F1        escape ^O^O # bound to F11
bindkey -d -k F2        escape \140\140 # bound to F12

Esto cambiará el escape a Ctrl-O para cuando esté haciendo operaciones de cortar y pegar. He descubierto que hacer doble clic es simple, y una buena compensación para la mayoría de las operaciones de pantalla.

Revisando esta respuesta con una solución más nueva que permite alternar el modo presionando F12 y usando un subtítulo para indicar el modo.

## command characters
escape \140\140                 # default is `

## sets caption and escape toggle
bindkey -d -k F2 process a     # bound to F12

## initial caption
caption always '%{= kW}%?%F%{+b KW}%:%{= kK}%? %= %?%F%{-b .c}>>>%{-}%? | %-w%{mW}%n* %t%? @%u%?%{-}%+w '

## registers to toggle bindkeys
register a "\140:eval 'bindkey -d -k F2 process b' 'process c' 'escape \\017\\017'^M"
register b "\017:eval 'bindkey -d -k F2 process a' 'process d' 'escape \\140\\140'^M"

## registers to change captions
register c "\140:caption string '%{= kW}%?%F%{+b mW}%:%{= kK}%? %= %?%F%{.c}ALT%{-}%? | %-w%{KW}%n* %t%? @%u%?%{-}%+w '^M"
register d "\017:caption string '%{= kW}%?%F%{+b KW}%:%{= kK}%? %= %?%F%{.c}>>>%{-}%? | %-w%{mW}%n* %t%? @%u%?%{-}%+w '^M"
Darren Hall
fuente
Solución creativa Estoy impresionado.
staticsan el
bind-key -n F11 set -g prefix `bind-key -n F12 set -g prefix Co Actualizaciones para tmux en caso de que otros quieran adaptar esto.
milkypostman
1
¿Hay alguna manera de establecer algún tipo de tiempo de espera mínimo para el combo prefijo + otra_clave en tmux, por lo que al pegar el código no se activa ningún comando, pero al escribir tecla de retroceso + tecla desde el teclado lo hace porque la pausa entre la tecla de retroceso y la otra tecla fue más larga ?
enfermedad
11

Yo uso Ctrl-Qen tmuxy ha funcionado bien hasta ahora. Sin embargo, debo mencionar que entra en conflicto con el control de flujo de shell. Por defecto, Ctrl-Qse utiliza para volver a habilitar la salida después de detenerla con Ctrl-S. Después de haber sido sorprendido por un caparazón atascado varias veces después de golpear accidentalmente Ctrl-S, he aprendido a no presionar Ctrl-S.

(También se podría desactivar el control de flujo por completo con stty -ixon, o vincular diferentes teclas a stty starty stty stop.)

# tmux.conf
unbind C-b
set -g prefix C-q
simonair
fuente
He adoptado este enlace y lo encuentro muy conveniente. ¡Gracias!
aymericbeaumet
Mi favorito también, ya que siempre desactivo el flujo de control del terminal.
Jack O'Connor
2
Utilizado en emacs para quote-inserted. Ejemplo de uso (en emacs): si quiero buscar el siguiente carácter de tabulación<Ctrl-s>+<Ctrl-q>+<TAB>
nhed
6

Me gusta reservar ^Spacepara operaciones muy especiales / comunes porque considero que es el prefijo más fácil de escribir, pero en este momento lo intento mapeado como prefixin tmux .

Deja tus dedos libres para saltar instantáneamente al comando que deseas escribir. Darle una oportunidad.

terraza
fuente
3
Eso no duró mucho. Regresé a ^ j. ^ El espacio es demasiado similar a los comandos que uso para invocar aplicaciones de nivel OSX (Spotlight, QuickSilver, DTerm).
terraza
Yo también uso Cj. Esto es lo que uso en mi ~ / .tmux.conf:set -g prefix2 C-j; bind-key C-j send-prefix -2
Susam Pal
1
También uso C-Space, no se usa en casi ningún otro lugar.
mahdix
1
C-space es perfecto para mí, ya que estoy en un Chromebook: D
Eric Nguyen
6

Una sugerencia tardía: ctrl-s. ctrl-stiene una serie de ventajas:

  1. En la fila de casa.
  2. Aún cerca ctrl-a(de hecho, para la mayoría de typers se utilizan los mismos dos dedos se utilizan para ctrl-a), por lo que el interruptor de la memoria muscular de la ctrl-aque ctrl-ses trivial - para mí, pasó a segundo plano dentro de aproximadamente una hora de probarlo primero.
  3. Libera ctrl-apara las operaciones de "regreso al comienzo de la línea" de estilo emacs o de "número de incremento" de estilo vim. O bueno, para ejecutar la pantalla dentro de un panel tmux sin tener que preocuparse por escapar de caracteres de prefijo para controlar la instancia de pantalla incrustada. (A menudo hago esto usando un tmux local con paneles que contienen sesiones ssh a servidores remotos, en los que ejecuto la pantalla)
  4. No anula ni agrega requisitos de escape a ninguna otra funcionalidad de terminal de uso común. ¡nada de lo que la gran mayoría de la gente usa hoy en día está en ctrl-s!

Por supuesto, la razón por la que no hay nada en ctrl-s es que en la terminal, tradicionalmente se usa para el control de flujo, que se remonta a los días anteriores a las herramientas de paginación como morey lesseran comunes. Estoy seguro de que algún programa de terminal GUI en algún lugar todavía tiene esa funcionalidad de control de flujo habilitada de manera predeterminada, pero en realidad no me he topado con uno; todos los programas de terminal gui que he probado parecen ignorarlo por completo, lo que hace que esa conveniente combinación de teclas esté disponible para usos más productivos.

Entonces, si no está utilizando screen / tmux desde dentro (por ejemplo) de un terminal Linux sin formato, sino desde un terminal basado en GUI, le recomiendo ctrl-sprobarlo; está hecho más rápido en tmux y la pantalla es mucho más conveniente para mí.

Trevor Powell
fuente
44
Ctrl-s es búsqueda hacia adelante, para cuando voy lejos con Ctrl-r :)
Jack O'Connor
Ctrl-S es común para detener la salida de la consola (también conocida como "congelarla"). Esto me mordió cuando intenté reasignarlo.
Dave
5

Puede ser una clave sin conflicto C-z, ya que generalmente se usa para enviar el programa a un segundo plano para continuar otra cosa en el shell que lo inició. No hago esto cuando tengo tmux.

Josuah Demangeon
fuente
El único problema que he tenido con el uso de Cz es que la mayoría de las otras personas están usando Cb, por lo que mi memoria muscular está apagada cuando programo pares en la máquina de otra persona. Termino teniendo que correr fgmucho después de escribir Cz erróneamente.
Steve Jorgensen
Lo mejor de Cz es que, suponiendo que no desee usar Ca, está muy cerca de la tecla Ctrl izquierda, que es la única tecla de control en la mayoría de los teclados de las computadoras portátiles en estos días. También cerca del bloqueo de mayúsculas si tiene eso asignado a Ctrl. Asigno mi Bloq Mayús a Esc, ya que a menudo uso un teclado Kinesis Freestyle Solo que tiene la tecla Esc en un lugar incómodo.
Steve Jorgensen
4

He oído hablar de `(backtick) y luego solo tienes que escribirlo dos veces para un backtick real. Podría ser mejor para los usuarios de vi que están acostumbrados a la acción (a menos que hagas el bloqueo de mayúsculas).

bluehavana
fuente
¿Cómo puedes definir backtick para tmux?
Alexandre Nizoux
Algo así como: desvincular Cb; set -g prefix ' '; bind '' enviar-prefijo; ver la respuesta de Darren Hall arriba.
bluehavana
Estoy con retroceso durante aproximadamente un año y nunca volveré al prefijo de dos teclas / combo. Darle una oportunidad.
sickill
4

Recomiendo C-j, que no interfiere mucho con vi o emacs. Esencialmente, estoy de acuerdo con un comentario de Susam Pal, que parece digno de aparecer como respuesta, ya que todos los demás parecen tener conflictos significativos desde mi punto de vista.

Yo uso Cj como mi clave de prefijo ya que Cj es sinónimo de j o en Vim y nadie usa Cj para mover una línea hacia abajo en Vim. Tengo esto en mi ~ / .tmux.conf:

set -g prefix2 C-j; bind-key C-j send-prefix -2

nealmcb
fuente
1
Según su recomendación, he estado usando Cj durante un tiempo y el único conflicto que he encontrado es con el complemento CtrlP vim. Cj y Ck se utilizan para mover hacia abajo y hacia arriba las opciones, respectivamente.
blockloop
3

Para el diseño del teclado del Programador Dvorak, es bastante bueno usar una tecla menos (guión) como prefijo, es decir, ctrl+ -.
La tecla menos está en la posición de la tecla de comillas simples en el diseño qwerty. También tengo la función de tecla de bloqueo de mayúsculas como una tecla Ctrl. El siguiente es un tmux conf, para configurarlo como prefijo:

unbind C-b
set -g prefix C-_
bind C-_ send-prefix
bind - last-window

Te preguntarás, ¿por qué se usa el guión bajo en lugar de menos? Consulte Tmux: ¿cómo me uno a C— (control-menos)?
Para qwerty, puede aplicar ¿Cómo enlazo la clave de prefijo tmux a C- '? solución, para retener el mismo atajo.

Yo diría que este es un prefijo perfecto si usa Vim / Neovim. Debido a que los prefijos, como ctrl+ ao ctrl+ b, sombrean (superponen) la funcionalidad de Vim, de cualquier manera.

Vladimir Bauer
fuente
2

Personalmente, bestá demasiado lejos Ctrlpara mí. Cuando uso tmux, siempre cambio el enlace de Cb a Ca. El principal conflicto con Ca es seleccionar todo, pero no he encontrado que esto sea un problema con los programas con los que uso tmux.

DaveParillo
fuente
de hecho, uso el valor predeterminado (en pantalla, nunca probé tmux) y todavía no he encontrado la necesidad de cambiarlo.
quack quijote
2

Como usuario de GNU emacs, zsh y MS Windows, uso Control-T. (p. ej. en .screenrc :)

escapar "^ T ^ T"

Sí, Control-T tiene algo vinculado, como el menú desplegable en la aptitud de Ubuntu o transponer caracteres en Emacs.

Hice caso omiso de Co porque requiere dos manos para mí.

piyo
fuente
2

Creo que la mejor solución es ^ C. Emacs usa ^ C como clave de prefijo, y encuentro que cuando necesito escribir ^ C en un shell casi siempre escribo dos de todos modos. :-)

unbind-key C-b
set -g prefix C-c
bind-key C-c send-prefix
usuario114905
fuente
1

Puedes usar backtick. Algunas versiones anteriores de tmux no admiten retroceso, por lo que puede hacer lo siguiente para solucionarlo (eso agregaría C-`, C- @ y C-space como meta al mismo tiempo):

# meta prefix - @ - backtick
unbind C-b
set -g prefix C-@
bind C-@ send-prefix
bind C-@ last-window

Normalmente reasigno mi CapsLock a Ctrl, por lo que tiene aún más sentido con la tecla de retroceso.

Alex
fuente
Yo también uso esto. C-Space es bastante fácil de escribir.
kzh
El backtick es bastante bueno. Sin embargo, no es terminal amigable como resulta. Definitivamente no puedes equivocarte con xterm en linux, pero terminales como putty e iTerm2 (macos) tienen problemas para emularlo correctamente. Afortunadamente, en iTerm2 puedes solucionarlo en la configuración. No uso mucho Windows / Putty, por lo que ctrl-space parece ser una solución viable. :)
Alex
1

La mayoría de las respuestas aquí usan Ctrl como parte de una combinación de teclas.
Cuando usé Ctrl, mi dedo meñique comenzó a doler porque siempre tenía que extenderlo a Ctrl.
Utilizo el Alt-jque escribo con el pulgar izquierdo y el índice derecho y es muy conveniente. Tampoco he encontrado colisiones con ningún otro programa hasta ahora.

unbind C-b
set-option -g prefix M-j
revs wullxz
fuente
1

Para la pantalla GNU, mapeando el backtick para escapar, lo siguiente en ~ / .screenrc funciona para mí.

escape ``
usuario1056720
fuente
0

Me gusta la sugerencia de enlazar ctrl- \ como prefijo , pero para que esto funcione en Linux Mint 12, tuve que escapar del lugar del enlace en la parte inferior. De lo contrario, no sería necesario. Vea mi .tmux.conf aquí: Uso de tmux con emacs y vim

justingordon
fuente
No se refiera a las respuestas como "arriba" y "abajo", ya que el orden podría cambiar. Enlace la respuesta en su lugar. Gracias por su respuesta :)
Fluya
0

Creo que los usuarios de Mac encontrarán el §más conveniente que el backtick.

En el teclado que no es Mac , la tecla de retroceso se coloca aproximadamente en la misma tecla que §en los teclados Mac. Por lo tanto, para experimentar la misma conveniencia que las personas que sugieren usar la tecla de retroceso, use el signo de párrafo en un teclado Mac.

Usar la tecla de retroceso en los teclados de Mac es complicado, ya que se encuentra muy cerca de la izquierda (⇧) shift, (⌃) control y (⌥) teclas alternativas. En MacBooks, incluso cerca de la fntecla izquierda .

nanito
fuente
Definir teclado Mac ;-)
Arjan
De acuerdo, tienes un punto aquí, me refería a un diseño de teclado Apple Mac US, aunque independientemente de un teclado completamente extendido o macbook.
nanitous