He estado experimentando con diferentes configuraciones de combinación de teclas tmux y he notado lo siguiente:
Si vuelvo a cargar mi configuración de tmux (desde tmux), las combinaciones de teclas que cargué una vez permanecerán cargadas. La única manera (que sé) de limpiar esto es cerrar todas las sesiones de tmux y reiniciar. Por lo tanto, parece que tmux recuerda todas las asociaciones de teclas cargadas previamente y solo las eliminará en un nuevo comienzo o desvinculándolas explícitamente.
Para recrear esto:
- abrir una terminal (A)
- iniciar tmux
- compruebe si la combinación de teclas muestra un reloj (presione
PREFIX C-t
) - presione
PREFIX ?
para ver la combinación de teclas en la lista - editar
~/.tmux.conf
- agregar una combinación de teclas (
bind C-t display "Keybinding C-t"
) - recargar tmux config (
PREFIX : source-file ~/.tmux.conf
) - compruebe si la combinación de teclas funciona (presione
PREFIX C-t
) - presione
PREFIX ?
para ver la nueva combinación de teclas en la lista - editar de
~/.tmux.conf
nuevo - eliminar la combinación de teclas (eliminar
bind C-t display "Keybinding C-t"
) - recargar tmux config (
PREFIX : source-file ~/.tmux.conf
) - compruebe si la combinación de teclas funciona (presione
PREFIX C-t
), todavía muestra "Keybinding Ct" - presione
PREFIX ?
para ver que la nueva combinación de teclas todavía está en la lista - salir de tmux
- ingrese tmux
- compruebe si la combinación de teclas original funciona de nuevo (presione
PREFIX C-t
), ahora debería mostrar un reloj nuevamente - presione
PREFIX ?
para ver que la nueva combinación de teclas se ha eliminado de la lista
Mi pregunta: ¿hay alguna manera de indicarle a tmux que "olvide" todas las configuraciones cargadas y luego las cargue .tmux.conf
?
fuente
unbind-key -a
elimina todas las combinaciones de teclas. Marcaré su respuesta como correcta, pero por el bien de otros espectadores también agregaré el "hack" que he aplicado para solucionar un problemaunbind-key -a
.La solución correcta (por Peter
Entonces @peterph dio la respuesta correcta, que es lo
unbind-key -a
que hace lo siguiente: (man tmux)Una solución viable
El problema (para mí) es que "todos" en realidad significa todo. Incluyendo las combinaciones de teclas con las que viene tmux . Si ejecuta el
unbind-key -a
comando tmux instantáneamente ya no tiene ninguna combinación de teclas, por lo que ni siquiera puede ingresar al modo de comando o hacer algo básicamente.Mi solución (bastante fea) para esto es la siguiente:
.tmux.reset.conf
que elimina todas las combinaciones de teclas y luego vuelve a unir todas las que tmux tiene por defecto.tmux.conf
Mi
.tmux.conf
:Mi
.tmux.reset.conf
:Parecía que esto podría haber funcionado con las tablas de claves tmux (por lo que puedo decir), pero no se pueden agregar nuevas tablas de claves.
fuente
.tmux.reset.conf
ejecutandotmux list-keys
en una sesión "limpia".tmux -f /dev/null -L temp start-server \; list-keys
generará efectivamente los valores predeterminados (aunque debe agregar una barra diagonal inversa antes del punto y coma en su enlace).Actualmente no existe una forma directa de restablecer el enlace de una clave a su valor predeterminado; la inicialización de los enlaces predeterminados (in
key_bindings_init()
) se realiza una vez cuando el servidor tmux se inicia por primera vez (inserver_start()
), y no existe un mecanismo para restablecer una sola clave.Para su escenario deseado en el que desea el acto de la compra de componentes del archivo de configuración para restablecer una unión que fue anulada previamente por un enlace que desde entonces ha sido borrado de su archivo de configuración personalizado predeterminado, el método que ideó es razonable (aunque por desgracia detallado):
unbind-key -a
, luego restablezca todos los enlaces "predeterminados", luego establezca sus enlaces personalizados (algunos de los cuales podrían anular un enlace "predeterminado").Los enlaces actuales de un servidor se pueden extraer con el
list-keys
comando * ; esto puede ayudar a generar / mantener su.tmux.reset.conf
archivo propuesto , pero necesita una forma de extraer los enlaces predeterminados , no los enlaces actuales .* Hay algunas situaciones en las que la salida de
list-keys
actualmente no se puede usar directamente: el enlace para punto y coma necesita que su punto y coma se escape con una barra diagonal inversa para evitar que se interprete como un separador de comando tmux , y cualquier enlace que tenga argumentos que usen comillas dobles dentro de comillas simples las comillas (ninguno de los enlaces predeterminados son así) aparecerán como comillas dobles dentro de dobles qoutes.Para obtener los enlaces predeterminados, necesita un servidor temporal con una configuración mínima (es decir, sin enlaces personalizados) para poder capturar su
list-keys
salida. No hay límite para la cantidad de servidores tmux que puede ejecutar, pero cada uno debe usar un nombre de ruta de socket diferente; las opciones-L
y-S
tmux se pueden usar para especificar un nombre de socket (en$TMPDIR/tmux-$UID
o nombre de ruta de socket completo. Por lo tanto, para hablar (o iniciar) un nuevo servidor en un socket llamadotemp
, usaría esto:Para asegurarte de que no usa tu
.tmux.conf
, usas-f
para decirle que lea/dev/null
(un archivo especial que siempre está vacío):Nota : esto no impide el procesamiento de
/etc/tmux.conf
, si existe dicho archivo; la ruta a este "archivo de configuración del sistema" está codificada y no hay opción para omitirla (salvo parchear el código).Normalmente, necesita un
new-session
comando para iniciar realmente el servidor, pero no queremos ninguna sesión, solo un servidor inicializado para consultar. Elstart-server
comando hace exactamente eso: inicia un servidor sin crear ninguna sesión.Ahora, solo necesitamos agregar nuestro comando "query" (
list-keys
en este caso):Nota : el punto y coma debe ser escapado o citado para evitar que el shell lo trate como un separador de comandos de shell, ya que queremos que sea un separador de comandos tmux .
Como no hay sesiones que mantener, el servidor se cerrará automáticamente cuando termine de ejecutar el
list-keys
comando.Por lo tanto, puede usar un comando como este para generar la mayor parte de su contenido
.tmux.reset.conf
sin tener que preocuparse por eliminar temporalmente su.tmux.conf
archivo (para permitirle ver solo los enlaces predeterminados) y sin tener que cerrar ningún servidor existente.Si el
run-shell
comando fuera síncrono, podría incrustar una llamada como esta en su archivo de configuración (capturar en un archivo temporal con el que luego procesaríasource-file
) en lugar de tener un archivo estático (su.tmux.reset.conf
). Eso le permitiría usar siempre los enlaces predeterminados de su versión actual de tmux (los enlaces predeterminados cambian ocasionalmente). Por desgracia, la finalización delrun-shell
comando es actualmente asíncrona con respecto a los comandos posteriores (los comandos que vienen después de unrun-shell
comando generalmente se ejecutarán antes de que el proceso generadorun-shell
haya tenido la oportunidad de finalizar).fuente
Aquí hay un resumen de todas las otras respuestas en un script bash que se generará automáticamente a
.tmux.reset.conf
partir de las asociaciones de teclas predeterminadas:La
sed
línea de comando incorporada se encarga de escapar de varias partes de la salidalist-keys
. Esto puede necesitar algunos ajustes para los detalles de su sistema.En su
.tmux.conf
archivo, simplemente desvincule todas las claves y obtenga este archivo antes de definir sus propias asociaciones de teclas:fuente
Consulte también las otras respuestas aquí, ya que hacen un buen trabajo al explicar la situación. Tengo aquí mi tmux 1.8 compatible tmux.reset.conf, que tuve que hacer varias modificaciones después de copiar la
tmux -f /dev/null -L temp start-server \; list-keys
salida. En particular, varias cosas tuvieron que ser citadas.fuente
Le pregunté río arriba que parecen no estar dispuestos a arreglarlo (a menos que alguien envíe un RP).
Aquí está mi escape manual
tmux list-keys
, obtenido a través de una nueva instancia de servidor con(gracias a respuestas anteriores)
Lo anterior está en github para que pueda hacer:
NOTA: De alguna manera, la respuesta de Richard Cook todavía produjo problemas de escape.
fuente
Aquí hay una versión modificada de la respuesta de Richard Cook para solucionar problemas de escape en tmux 2.1
Agregue las siguientes líneas al comienzo de
.tmux.conf
fuente