ligar o prefixo tmux à chave cmd do OS X (ou qualquer outra ligação)


21

Estou acostumado ao iTerm2 (ou Terminal.app neste caso) no OS X. Mas quero mudar para usar o tmux (ou tela, mas o problema é semelhante aos dois aplicativos).

Então, minha ideia é ter uma única guia do iTerm com uma sessão do tmux aberta com várias guias. Para fazer a transição, tenho um recurso básico que preciso configurar no tmux: alterne a guia 'n' usando cmd + n (como Firefox, Chrome, iTerm2, etc)

No entanto, não consigo encontrar uma maneira de mapear a tecla cmd no teclado mac. Primeiro tentei implementar o cmd como uma chave de prefixo, sem sucesso. Eu tentei definir

set-option -g prefix M-a (hoping for Meta-a)

set-option -g prefix ^a (hoping for ^ to work)

mas nada funciona. Isso é possível? Eu realmente não preciso vincular o prefixo ao cmd, mas quero poder alterar as guias do tmux com cmd + n.

Obrigado


karabiner-elements possui uma ligação específica para tmux pqrs.org/osx/karabiner/complex_modifications/#modifier-keys
Fabrizio Bertoglio

Respostas:


8

Você deseja chamar uma sequência de pressionamentos de tecla (primeiro Ctrl-b, depois n variando de 0 a 9).

Sua melhor aposta é usar um utilitário de atalho de teclado, como Butler ou Keyboard Maestro, para fazer isso por você.


Usando o mordomo :

Selecione + »Item inteligente» Teclas , configure a tecla de atalho Cmd-1 . Pressione e Ctrl-B, em seguida, 1para pressionar as teclas . Configure-o para ser válido apenas no Terminal (ou iTerm). Ele avisará que outros aplicativos podem não gostar, mas você já sabe disso.


Usando o Keyboard Maestro :

Crie um novo grupo à esquerda que esteja disponível apenas no Terminal (ou iTerm).

Adicione um novo item, acionado pelo Hot Key Trigger ( Cmd-1) e adicione dois pressionamentos de tecla às suas ações: Ctrl-Be 1.


Você também pode dar uma olhada neste tópico - mas não usa Commande não funcionou para mim usando o Terminal.


Na documentação do tmux :

Ligue a tecla chave ao comando. As chaves podem ser especificadas com o prefixo 'C-' ou 'ˆ' para as teclas ctrl ou 'M-' para as teclas alt (meta). O sinalizador -r indica que esta tecla pode se repetir, consulte a opção de tempo de repetição.

Eles não suportam uma terceira chave modificadora.


omg que corte incrível! também funciona! usou o Keyboard Maestro porque Butler parece um exagero. Obrigado!
21711 rubenfonseca

Keyboard Maestro funciona maravilhosamente para este
Sam Selikoff

19

No iTerm2, você pode mapear atalhos para códigos hexadecimais que são enviados para o terminal. Vá para Preferências do iTerm2 -> Teclas. Em Teclas de atalho global, clique no + e adicione o seu atalho desejado, como o cmd + 1, que será capturado. Em seguida, selecione "Enviar código hexadecimal". Na caixa exibida, digite os códigos hexadecimais que você deseja enviar para o tmux separados por espaços. Ctrl-B é 0x02, portanto, para "Ctrl-B 1", digite "0x02 0x31". Veja aqui mais códigos hexadecimais: http://www.nthelp.com/ascii.htm

Mapeei o Cmd com h, j, k, l para mover-se entre os painéis do tmux e Cmd com% e "para criar as divisões. Provavelmente farei algo semelhante para mover entre as divisões do vim com uma tecla de controle.


Esta é definitivamente a melhor resposta para quem usa o iTerm2. Obrigado!
newUserNameHere

1
Por alguma razão, isso não está trabalhando em minha compilação 3.0.2 iTerm2
jasonszhao

Se isso não estiver funcionando, pode ser porque o iTerm2 vincula a tecla cmd à opção switch-tab por padrão. Seu modificador pode estar em conflito. Eu tive que alterar a tecla da guia swith para opção para que isso funcione no CMD + n
Surfrdan

2

Atalhos especiais podem ser feitos com o Terminal.app. Acabei de descobrir outro dia, mas isso pode ter sido possível antes do leão.

Vá em Preferências> Configurações e clique na guia "Teclado". Agora você precisa adicionar um novo atalho de teclado clicando no ícone de adição abaixo da caixa. Agora você deseja definir uma combinação de teclas que "Envia string para shell".

Exemplo: Digamos que eu queira definir M-LeftArrow para que seja mapeado prefix-p(janela anterior).

Key: Left Arrow 
Modifier: Option 
Action: send string to shell

Agora, basta digitar na prefix-pcaixa de entrada onde prefixestá o que você definiu para o tmux (eu uso o cntrl-a para que a caixa seja exibida \001p). Observe que, se você cometer um erro, os caracteres excluídos serão inseridos em vez de realmente excluir caracteres; portanto, pressione o botão "Excluir um caractere" para retroceder, caso você estrague.

Caracteres especiais que criei para facilitar a vida:

M-Left  > Previous Window
M-Right > Next Window
M-Up    > Enter scrolling mode
M-Down  > Next Pane

Você também pode modificar cntrl-qualquer coisa e mudar qualquer coisa, mas lembre-se de que elas podem interferir no seu $ EDITOR ou em outros programas; portanto, tenha cuidado com as funções especiais que podem se tornar inúteis.

Além disso, observe que não consegui descobrir como duplicar essa funcionalidade no iTerm2.


1

Você também pode considerar a integração nativa (mas muito experimental) oferecida pelo iTerm2 com o tmux: http://code.google.com/p/iterm2/wiki/TmuxIntegration

Dessa forma, quando você pressionar Cmd-D para dividir a tela, o iTerm2 dividirá a guia para você. Isso é ótimo, porque a divisão é nativa, então você pode arrastar a borda no meio para reajustar as larguras ou selecionar um painel clicando em. O mesmo vale para novas abas / janelas (mas os atalhos são ligeiramente diferentes - caso contrário, você não teria como adicionar abas que não sejam do tmux).

E, como o tmux, se você desconectar e reconectar, tudo será salvo para você.

Porém, existem duas advertências: * esse é um recurso muito experimental e muito esquisito para mim. * você terá que construir o tmux você mesmo (usando o arquivo em algum lugar no link acima).

-Chris


Sei que já faz dois anos, mas alguma ideia se isso ainda está funcionando? Eu segui as instruções no seu link, mas cmd+Ddivide os painéis do iTerm2, não os do tmux.
Sam Selikoff

1
@SamSelikoff Você precisa começar tmux -CC.
Jasonszhao

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.