Eu tenho experimentado diferentes configurações de ligação de teclas do tmux e notei o seguinte:
Se eu recarregar minha configuração do tmux (de dentro do tmux), as combinações de teclas que eu carreguei permanecerão carregadas. A única maneira (eu sei) de limpar isso é sair de todas as sessões do tmux e reiniciar. Portanto, parece que o tmux se lembra de todas as combinações de teclas carregadas anteriormente e as remove apenas em um novo começo ou desabotoando-as explicitamente.
Para recriar isso:
- abrir um terminal (A)
- iniciar tmux
- verifique se a combinação de teclas mostra um relógio (pressione
PREFIX C-t
) - pressione
PREFIX ?
para ver a combinação de teclas na lista - editar
~/.tmux.conf
- adicione uma combinação de teclas (
bind C-t display "Keybinding C-t"
) - recarregar a configuração do tmux (
PREFIX : source-file ~/.tmux.conf
) - verifique se a combinação de teclas funciona (pressione
PREFIX C-t
) - pressione
PREFIX ?
para ver a nova combinação de teclas na lista - edite
~/.tmux.conf
novamente - remova a combinação de teclas (remova
bind C-t display "Keybinding C-t"
) - recarregar a configuração do tmux (
PREFIX : source-file ~/.tmux.conf
) - verificar se a combinação de teclas funciona (pressione
PREFIX C-t
), ainda exibe "Keybinding Ct" - pressione
PREFIX ?
para ver que a nova combinação de teclas ainda está na lista - exit tmux
- digite tmux
- verificar se a combinação de teclas original funciona novamente (pressione
PREFIX C-t
), agora deve exibir um relógio novamente - pressione
PREFIX ?
para ver se a nova combinação de teclas foi removida da lista
Minha pergunta: existe uma maneira de instruir o tmux para "esquecer" todas as configurações carregadas e depois carregar .tmux.conf
?
fonte
unbind-key -a
remove todos os atalhos de teclado. Marcarei sua resposta como correta, mas, para o bem de outros espectadores, também adicionarei o "hack" que apliquei para corrigir um problemaunbind-key -a
.A solução correta (de Peter
Então, @peterph deu a resposta correta, que é
unbind-key -a
a seguinte: (man tmux)Uma solução viável
O problema (para mim) é que "tudo" na verdade significa tudo. Incluindo os atalhos de teclado, o tmux vem com . Se você executar o
unbind-key -a
comando tmux instantaneamente, não terá mais nenhuma combinação de teclas, portanto você não poderá nem entrar no modo de comando ou fazer qualquer coisa basicamente.Minha (bastante feia) correção para isso é a seguinte:
.tmux.reset.conf
que remova todas as combinações de teclas e depois religue todas as que o tmux possui por padrão.tmux.conf
Meu
.tmux.conf
:Meu
.tmux.reset.conf
:Parecia que isso poderia ter funcionado com as tabelas-chave do tmux (até onde eu sei), mas você não pode adicionar novas tabelas-chave.
fonte
.tmux.reset.conf
executandotmux list-keys
em uma sessão "limpa".tmux -f /dev/null -L temp start-server \; list-keys
efetivamente gerará os padrões (embora você precise adicionar uma barra invertida antes do ponto e vírgula em sua ligação).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 (inserver_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-keys
comando * ; isso pode ajudar a gerar / manter o.tmux.reset.conf
arquivo 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-keys
nã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-keys
saí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-L
e-S
tmux podem ser usadas para especificar um nome de soquete (no$TMPDIR/tmux-$UID
nome do caminho ou no soquete completo. Portanto, para conversar (ou iniciar) um novo servidor em um soquete chamadotemp
, você usaria o seguinte: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):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-session
comando para realmente iniciar o servidor, mas não queremos nenhuma sessão, apenas um servidor inicializado para consulta. Ostart-server
comando faz exatamente isso: inicia um servidor sem criar nenhuma sessão.Agora, precisamos apenas adicionar nosso comando "query" (
list-keys
neste caso):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-keys
comando.Portanto, você pode usar um comando como este para gerar a maior parte do arquivo
.tmux.reset.conf
sem precisar se preocupar em remover temporariamente o.tmux.conf
arquivo (para ver apenas as ligações padrão) e sem precisar desligar os servidores existentes.Se o
run-shell
comando 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ê processariasource-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-shell
atualmente a conclusão do comando é assíncrona em relação aos comandos subseqüentes (os comandos que vêm depois de umrun-shell
comando geralmente são executados antes que o processo geradorun-shell
tenha a chance de terminar).fonte
Aqui está um rollup de todas as outras respostas em um script bash que será gerado automaticamente a
.tmux.reset.conf
partir das ligações de teclas padrão:A
sed
linha de comando incorporada cuida de escapar de várias partes da saídalist-keys
. Isso pode precisar de alguns ajustes para as especificidades do seu sistema.No seu
.tmux.conf
arquivo, basta desvincular todas as chaves e originar esse arquivo antes de definir suas próprias associações de teclas:fonte
Consulte também as outras respostas aqui, pois elas explicam bem a situação. Eu tenho aqui o meu tmux 1.8 compatível com o tmux.reset.conf, que eu tive que fazer várias modificações depois de copiar a
tmux -f /dev/null -L temp start-server \; list-keys
saída. Em particular, várias coisas tiveram que ser citadas.fonte
Eu perguntei a montante que eles parecem dispostos a corrigi-lo (a menos que alguém envie um PR).
Aqui está o meu escape manual
tmux list-keys
, obtido através de uma nova instância do servidor com(graças a respostas anteriores)
A descrição acima está no github para que você possa fazer:
NOTA: De alguma forma, a resposta de Richard Cook ainda produzia problemas de escape.
fonte
Aqui está uma versão aprimorada da resposta de Richard Cook para corrigir problemas de escape no tmux 2.1
Adicione as seguintes linhas ao início de
.tmux.conf
fonte