Atualmente, não há uma maneira direta de redefinir a ligação de uma chave ao padrão; a inicialização das ligações padrão (in key_bindings_init()) é feita uma vez quando o servidor tmux é iniciado pela primeira vez (in server_start()) e não há mecanismo para redefinir uma única chave.
Para o seu cenário desejado onde deseja que o ato de terceirização de seu arquivo de configuração para restabelecer uma ligação que anteriormente foi substituído por uma ligação que já foi excluído do seu arquivo de configuração personalizado padrão, o método que desenvolveram é razoável (embora infelizmente detalhado): unbind-key -a, restabeleça todas as ligações "padrão" e estabeleça suas ligações personalizadas (algumas das quais podem substituir uma ligação "padrão").
As ligações atuais de um servidor podem ser extraídas com o list-keyscomando * ; isso pode ajudar a gerar / manter o .tmux.reset.confarquivo proposto , mas você precisa de uma maneira de extrair as ligações padrão , não as ligações atuais .
* Existem algumas situações em que a saída de list-keysnão é diretamente utilizável no momento: a ligação para ponto-e-vírgula precisa que seu ponto-e-vírgula escape com uma barra invertida para impedir que seja interpretado como um separador de comandos do tmux e quaisquer ligações que tivessem argumentos que usassem aspas duplas dentro de um único aspas (nenhuma das ligações padrão é assim) sairá como aspas duplas dentro de qoutes duplos .
Para obter as ligações padrão, você precisa de um servidor temporário com uma configuração mínima (ou seja, sem ligações personalizadas) para poder capturar sua list-keyssaída. Não há limite para o número de servidores tmux que você pode executar, mas cada um deve usar um nome de caminho de soquete diferente; as opções -Le -S tmux podem ser usadas para especificar um nome de soquete (no $TMPDIR/tmux-$UIDnome do caminho ou no soquete completo. Portanto, para conversar (ou iniciar) um novo servidor em um soquete chamado temp, você usaria o seguinte:
tmux -L temp …
Para garantir que ele não use o seu .tmux.conf, use -f-o para ler /dev/null(um arquivo especial que está sempre vazio):
tmux -f /dev/null -L temp …
Nota : isso não impede o processamento de /etc/tmux.conf, se esse arquivo existir; o caminho para esse "arquivo de configuração do sistema" é codificado e não há opção para ignorá-lo (com exceção do patch do código).
Normalmente, você precisa de um new-sessioncomando para realmente iniciar o servidor, mas não queremos nenhuma sessão, apenas um servidor inicializado para consulta. O start-servercomando faz exatamente isso: inicia um servidor sem criar nenhuma sessão.
tmux -f /dev/null -L temp start-server …
Agora, precisamos apenas adicionar nosso comando "query" ( list-keysneste caso):
tmux -f /dev/null -L temp start-server \; list-keys
Nota : o ponto-e-vírgula precisa ser escapado ou citado para impedir que o shell o trate como um separador de comandos do shell, pois queremos que ele seja um separador de comandos do tmux .
Como não há sessões a serem mantidas, o servidor será encerrado automaticamente após concluir a execução do list-keyscomando.
Portanto, você pode usar um comando como este para gerar a maior parte do arquivo .tmux.reset.confsem precisar se preocupar em remover temporariamente o .tmux.confarquivo (para ver apenas as ligações padrão) e sem precisar desligar os servidores existentes.
Se o run-shellcomando fosse síncrono, você poderia incorporar uma chamada como essa em seu arquivo de configuração (capturando em um arquivo temporário com o qual você processaria source-file) em vez de ter um arquivo estático (seu .tmux.reset.conf). Isso permitiria que você sempre use as ligações padrão da sua versão atual do tmux (as ligações padrão mudam ocasionalmente). Infelizmente, run-shellatualmente a conclusão do comando é assíncrona em relação aos comandos subseqüentes (os comandos que vêm depois de um run-shellcomando geralmente são executados antes que o processo gerado run-shelltenha a chance de terminar).