Qual é a sequência de prefixo / escape menos conflitante para screen ou tmux?

96

Tela acompanha Ctrl+ A. O tmux, por outro lado - conforme desenvolvido na tela - usa Ctrl+ B. As duas teclas, no entanto, também são usadas em editores, shells, etc. Assim, a escolha de uma prejudica a experiência e a funcionalidade do usuário dessas ferramentas quando usadas no tmux ou na tela.

Qual prefixo menos conflita com as combinações de teclas de outros programas e shells?

Scott
fonte
6
"qual deles conflita menos com outros programas?" não tem nada a ver com opinião.
Iconoclast
Após a alteração ~/.tmux.conf, não se esqueça de reiniciar o servidor tmux para que as alterações entrem em vigor ( superuser.com/q/188491/105108 ).
ks1322
Alternativa ao uso de um prefixo: Alguns terminais agora oferecem integração tmux via "tmux -CC" (ou seja, iTerm2 para macOS). Dessa forma, as janelas do tmux aparecem como abas no terminal. Você pode usar as combinações de teclas para gerenciar guias que não conflitam com nenhum programa do terminal, ou seja, usando a tecla cmd (também conhecida como super chave, tecla Windows).
cjay 30/01

Respostas:

48

Eu acho que ^\(aka ^|) é o melhor se estiver em uma posição conveniente no layout do teclado. Seus usos em outros programas são bastante raros:

  • enviando SIGQUITpara um processo
  • abortar por ou enquanto loops em uma concha quando ^Cé interceptado
  • toggle-input-method no emacs

Não conheço outros usos. Cuidado para não matar acidentalmente um processo fora tmuxou screendepois de se acostumar. Isso aconteceu comigo apenas uma vez em alguns anos.

~/.tmux.conf

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

~/.screenrc

escape ^|^|
cjay
fonte
Eu tentei isso, mas o tmux reclama do uso de C-`. Can I escape the `character de alguma forma?
Jason
2
Apenas para deixar alguém saber, você deve escrever em 'C-\'vez de `C- \` na configuração do tmux.
Gns-ank
2
Não se esqueça de 'tmux source-file /path/to/tmux.conf' quando terminar de experimentar as novas configurações
user72923
12
mas então eu adquirir o hábito do comando, e quando eu esquecer que sou na tela, eu começo acidentalmente enviando SIGQUITs ...
Kache
3
"se estiver em uma posição conveniente no layout do teclado", por padrão, não está. Você está sugerindo que existe algum remapeamento popular em uso, o que torna C- \ conveniente?
Story17
53

Para as pessoas que desejam usar o backtick como escape no tmux, adicione:

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

Esse último é importante, caso contrário você não pode digitar um backtick para outros fins :-)

Ned Ruggeri
fonte
Crase parece ser uma boa ideia até que você colar em algum SQL ...
Synchro
3
O @Synchro no tmux 1.8 não é mais um problema, graças à opção assumir o tempo de colar que está ativada por padrão (definida como 1ms). Veja aqui: sourceforge.net/p/tmux/tmux-code/ci/…
sickill
Encontrei essa pergunta procurando alternativas ao backtick, pois ele começou a causar problemas depois que me acostumei a usar backticks em vez de usar $()conchas. Também se torna uma dor quando você começa a escrever muito Markdown. Eu o uso há vários anos, mas infelizmente vou ter que mudar agora.
Kirelagin
4
No .tmux.conf eu também tenho bind-key C-a set-option -g prefix C-a. Sempre que preciso usar backticks, clico em `-Ctrl-aque define meu prefixo C-a. E eu tenho bind-key C-b set-option -g prefix `para que eu possa bater C-a-C-bpara voltar
Boris
E se você estiver escrevendo remarcações? Como você escapa do prefixo?
OJFord 12/07/2015
21

Ctrl + A também é conhecido por causar problemas com o Emacs, incluindo o Bash no modo Emacs. Parece que isso não é um problema para você.

Ctrl + O é a outra opção que eu já vi. Aparentemente, esse é o padrão no RatPoison (este é um gerenciador de janelas X que não precisa de um mouse). Eu usei Ctrl + O ao usar telas aninhadas: Ctrl + O para a externa e Ctrl + A para as internas. Funcionou bem, mas meio que assustou meus colegas. :-)

Eu estava pensando e se você usa o vi em vez do Emacs, existem algumas alternativas. Ctrl + G não é muito usado, por exemplo.

staticsan
fonte
8
Para usuários do Emacs, Ctrl + O parece ser a melhor opção: no emacs é apenas "abrir uma nova linha no cursor" e no bash "repetir uma sequência de comandos".
Flow
2
+1 se você estiver bem com as operações ctrl com a mão direita, isso parece um bom backup. Eu sou um canhoto me ;-)
DaveParillo
9
Acho Ctrl + O quebra vim
Mu Qiao
14
Eu concordo com @MuQiao. Ctrl-o é usado no Vim para pular para uma posição mais antiga do cursor (equivalente ao botão voltar em muitos IDEs), um recurso que eu uso com muita frequência ao navegar no código no Vim. Ctrl-b é sinônimo de PageUp no Vim. Eu não uso Ctrl-b no Vim. Portanto, para usuários do Vim como eu, o Ctrl-b ainda é uma escolha melhor que o Ctrl-o. Eu uso Cj como minha chave de prefixo, pois Cj é sinônimo de j ou <Down> no Vim e ninguém usa Cj para mover uma linha para baixo no Vim. Eu tenho isso no meu ~ / .tmux.conf:set -g prefix2 C-j; bind-key C-j send-prefix -2
Susam Pal
C-jentra em conflito com CtrlP. Movendo para cima e para baixo na lista tampão usa C-ke C-jrespectivamente
blockloop
14

Eu tenho CAPS-LOCKglobalmente mapeado para ESC. Então, eu uso M-Space(ou seja, CAPS-LOCK+ Space) no meu prefixo.

Nathan Speed
fonte
Estou tentando fazer isso, mas se eu mantiver CAPS-LOCK(pensando no meu próximo comando ou algo assim) tmux - ou iTerm, não sei o que está causando isso - recebe o ESCcomando repetidamente, fazendo M-Spacecom que não funcione. Existe uma maneira de desativar esse problema de chave repetida? Por exemplo, funciona quando pressiono rapidamente CAPS-LOCK + Space, mas não se pressiono CAPS-LOCKpor um segundo e depois pressiono Space, não registra o M-Spaceacorde ...
Bruno Ely
12

Eu uso um sistema complexo para tela. Meu escape padrão está definido como \ 140 \ 140, que é backtick. O Ctrl-A complica o Emacs e a edição de linha de comando para mim no Zsh, e não gosto do Ctrl-O (operações com as duas mãos para a maioria das ações na tela).

Volto a ligar a tela 1 para que novas sessões sejam criadas da esquerda para a direita no teclado começando em 1. Isso me permite reservar a tela 0 para o que considero janelas persistentes ou de referência. É muito rápido gesto com uma mão para (backtick) 1, (backtick) 2, (backtick) 3 para alternar entre janelas.

O problema com o uso de backtick em um ambiente unix é ao tentar cortar e colar o código de script shell / perl. Por esse motivo, liguei a tecla F11 / F12 para alternar entre meu caractere de escape.

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

Isso trocará o escape para Ctrl-O para quando eu estiver executando operações de recortar e colar. Descobri que dar um tique duplo é simples e é uma boa opção para a maioria das operações de tela.

Revisitando esta resposta com uma solução mais nova que permite alternar o modo pressionando F12 e usando uma legenda para indicar o 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
fonte
Solução criativa. Estou impressionado.
Staticsan
bind-key -n F11 define -g prefixo `bind-key -n F12 define -g prefixo Co Atualizações para tmux no caso de outros quererem adaptar isso.
Milkypostman
1
Existe uma maneira de definir algum tipo de tempo limite mínimo para o prefixo + outra combinação de teclas no tmux, portanto, ao colar código, ele não aciona nenhum comando, mas ao digitar backtick + tecla do teclado, ocorre porque a pausa entre o backtick e a outra tecla foi mais longa ?
sickill 5/05/12
11

Eu uso Ctrl-Qem tmuxe tem funcionado bem até agora. Devo mencionar, no entanto, que ele entra em conflito com o controle de fluxo do shell. Por padrão, Ctrl-Qé usado para reativar a saída após a parada Ctrl-S. Tendo sido surpreendido por uma concha presa algumas vezes após bater acidentalmente Ctrl-S, aprendi a não pressionar Ctrl-S.

(Também é possível desativar completamente o controle de fluxo stty -ixonou vincular chaves diferentes a stty starte stty stop.)

# tmux.conf
unbind C-b
set -g prefix C-q
simonair
fonte
Adotei esse vínculo e acho muito conveniente. Obrigado!
Aymericbeaumet
Meu favorito também, já que sempre desabilito o fluxo de controle do terminal.
Jack O'Connor
2
Usado no emacs para quote-inserted. O uso da amostra (no emacs): se eu quiser procurar o caráter próxima guia -<Ctrl-s>+<Ctrl-q>+<TAB>
nhed
6

Eu gosto de reservar ^Spaceoperações muito especiais / comuns porque acho que é o prefixo mais fácil de digitar, mas agora estou tentando mapear como prefixno tmux .

Ele deixa seus dedos livres para pular instantaneamente para o comando que você deseja digitar. De uma chance.

terraço
fonte
3
Isso não durou muito - estou de volta a ^ j. ^ O espaço é muito semelhante aos comandos que eu uso para invocar aplicativos no nível OSX (Spotlight, QuickSilver, DTerm).
terrace
Eu também uso Cj. Isto é o que eu uso no meu ~ / .tmux.conf:set -g prefix2 C-j; bind-key C-j send-prefix -2
Susam Pal
1
Eu também uso o C-Space, ele não é usado em quase nenhum outro lugar.
precisa saber é
1
O espaço C é perfeito para mim, pois estou em um Chromebook: D
Eric Nguyen
6

Uma sugestão tardia: ctrl-s. ctrl-stem várias vantagens:

  1. Na linha de casa.
  2. Ainda perto de ctrl-a(na verdade, para a maioria dos tipógrafos, ele usa os mesmos dois dedos para os quais eles usavam ctrl-a), então a memória muscular de alternar ctrl-apara ctrl-sé trivial - para mim, tornou-se uma segunda natureza cerca de uma hora após a primeira tentativa.
  3. Libera ctrl-apara operações "de volta ao início da linha" ou "número de incremento" no estilo emacs. Ou seja, para executar a tela dentro de um painel tmux sem precisar se preocupar com caracteres de prefixo de escape para controlar a instância da tela incorporada. (Costumo fazer isso usando um tmux local com painéis contendo sessões ssh para servidores remotos, nos quais executo a tela)
  4. Não substitui nem adiciona requisitos de escape a nenhuma outra funcionalidade de terminal comumente usada. nada que a grande maioria das pessoas usa hoje está no ctrl-s!

Obviamente, a razão pela qual nada está no ctrl-s é que, no terminal, ele é tradicionalmente usado para controle de fluxo, que remonta aos dias anteriores às ferramentas de paginação como moree lesseram comuns. Tenho certeza de que algum programa de terminal da GUI em algum lugar ainda tem essa funcionalidade de controle de fluxo ativada por padrão, mas na verdade não encontrei nenhum; os programas do gui terminal que eu tentei parecem ignorá-lo completamente por padrão, o que torna essa combinação conveniente de teclas disponível para usos mais produtivos.

Portanto, se você não está realmente usando o screen / tmux de dentro (por exemplo) de um terminal Linux bruto, mas de um terminal baseado em GUI, recomendo ctrl-stentar; tornou o zip no tmux e a tela muito mais convenientes para mim.

Trevor Powell
fonte
4
Ctrl-s é a busca para a frente, para quando eu ir para longe com Ctrl-r :)
Jack O'Connor
Ctrl-S é comum para interromper a saída do console (também conhecida como "congelando"). Isso me mordeu quando tentei remapear.
Dave
5

Uma chave sem conflito pode ser C-z, pois geralmente é usada para enviar o programa para o segundo plano para continuar outra coisa no shell que o iniciou. Não faço isso quando tenho o tmux.

Josuah Demangeon
fonte
O único problema que tive com o uso do Cz é que a maioria das outras pessoas está usando o Cb, então minha memória muscular está desligada ao programar em pares na máquina de outra pessoa fg.
Steve Jorgensen
O melhor de Cz é que, supondo que você não queira usar o Ca, está muito perto da tecla Ctrl esquerda, que é a única tecla de controle na maioria dos teclados de notebooks atualmente. Também feche o Caps Lock se você o tiver mapeado para Ctrl. Mapeio meu Caps Lock para Esc, pois geralmente estou usando um teclado Kinesis Freestyle Solo que possui a tecla Esc em um local estranho.
Steve Jorgensen
4

Ouvi dizer que o `(backtick) está sendo usado e você só precisa digitá-lo duas vezes para um backtick real. Pode ser melhor para os usuários vi que estão acostumados com a ação (a menos que você faça a coisa com o Caps Lock).

bluehavana
fonte
Como você pode definir o backtick para o tmux?
Alexandre Nizoux
Algo como: desvincular Cb; set -g prefix ' '; bind '' send-prefix; veja a resposta de Darren Hall acima.
bluehavana
Estou com backtick por cerca de um ano e nunca voltarei ao prefixo de duas teclas / combo. De uma chance.
sickill
4

Eu recomendo C-j, o que não interfere muito no vi ou no emacs. Basicamente, concordo com um comentário de Susam Pal, que parece digno de aparecer como resposta, já que todos os outros parecem ter conflitos significativos da minha perspectiva.

Eu uso Cj como minha chave de prefixo, pois Cj é sinônimo de j ou no Vim e ninguém usa Cj para mover uma linha para baixo no Vim. Eu tenho isso no meu ~ / .tmux.conf:

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

nealmcb
fonte
1
Com base em sua recomendação, uso Cj há um tempo e o único conflito que encontrei foi com o plug-in CtrlP vim. Cj e Ck são usados ​​para mover para cima e para baixo nas opções, respectivamente.
blockloop 26/05
3

Para o layout do teclado do Programmer Dvorak, é bastante interessante usar uma tecla de menos (traço) como prefixo, ou seja, ctrl+ -.
A tecla de menos está na posição de chave de aspas simples no layout qwerty. Também tenho a função caps lock key como uma tecla ctrl. A seguir está um tmux conf, para configurá-lo como um prefixo:

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

Você pode se perguntar, por que o sublinhado é usado em vez de menos? Consulte Tmux: como faço para ligar a C— (controle-menos)?
Para qwerty, você pode aplicar Como vincular a chave de prefixo tmux a C- '? solução, a fim de manter o mesmo atalho.

Eu diria que esse é um prefixo perfeito se você usar o Vim / Neovim. Porque prefixos, como ctrl+ aou ctrl+ b, sombreiam (sobrepõem) a funcionalidade do Vim, de qualquer maneira.

Vladimir Bauer
fonte
2

Pessoalmente, bestá muito longe de Ctrlmim. Quando uso o tmux, sempre altero a ligação de Cb para Ca. O principal conflito com o Ca é selecionar tudo, mas não achei que fosse um problema com os programas com os quais uso o tmux.

DaveParillo
fonte
na verdade, eu uso o padrão (na tela, nunca tentei o tmux) e ainda não encontrei a necessidade de alterá-lo.
quack quixote
2

Como usuário do GNU emacs, zsh e MS Windows, uso o Control-T. (por exemplo, em .screenrc :)

escape "^ T ^ T"

Sim, o Control-T tem algo a ele associado, como o menu suspenso no aptitude do Ubuntu ou transpõe caracteres no Emacs.

Eu desconsiderei Co porque requer duas mãos para mim.

piyo
fonte
2

Eu acho que a melhor solução é ^ C. O Emacs usa ^ C como uma chave de prefixo, e acho que quando preciso digitar ^ C em um shell, quase sempre digito dois de qualquer maneira. :-)

unbind-key C-b
set -g prefix C-c
bind-key C-c send-prefix
user114905
fonte
1

Você pode usar o backtick. Algumas versões mais antigas do tmux não suportam backtick, portanto, você pode fazer o seguinte para solucionar o problema (que adicionaria C-`, C- @ e C-space como sua meta ao mesmo tempo):

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

Normalmente refiro meu CapsLock para Ctrl, por isso faz ainda mais sentido com o backtick.

Alex
fonte
Eu também uso isso. O C-Space é bastante fácil de digitar.
kzh
O backtick é muito bom. No entanto, não é um terminal amigável como se vê. Você definitivamente não pode dar errado com o xterm no linux, mas terminais como o putty e o iTerm2 (macos) têm problemas emulando-o corretamente. Felizmente, no iTerm2, você pode contorná-lo na configuração. Como não uso muito o windows / putty, o ctrl-space parece ser uma solução viável. :)
Alex
1

A maioria das respostas aqui usa Ctrl como parte de uma combinação de teclas.
Quando usei Ctrl, meu dedo mindinho começou a doer porque eu sempre tive que espalhá-lo até Ctrl.
Eu uso o Alt-jque digito com o polegar esquerdo e o indicador direito, e é muito conveniente. Também não encontrei nenhuma colisão com nenhum outro programa até agora.

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

Para a tela GNU, mapeando o backtick para escapar, o seguinte em ~ / .screenrc funciona para mim.

escape ``
user1056720
fonte
0

Gosto da sugestão de vincular ctrl- \ como prefixo , mas, para que isso funcione no Linux Mint 12, tive que escapar do lugar da vinculação na parte inferior. Caso contrário, não seria necessário. Veja meu .tmux.conf aqui: Usando o tmux com o emacs e o vim

justingordon
fonte
Não consulte as respostas como "acima" e "abaixo", pois a ordem pode mudar. Vincule a resposta. Obrigado pela resposta :)
Fluxo
0

Eu acho que os usuários de Mac acharão §mais conveniente que o backtick.

No teclado não Mac , o backtick está posicionado aproximadamente na mesma tecla que §nos teclados Mac. Portanto, para ter a mesma conveniência das pessoas que sugerem o uso do backtick, use o sinal de parágrafo em um teclado Mac.

O uso do backtick nos teclados Mac é complicado, pois fica muito próximo às teclas de deslocamento esquerda (⇧), controle (⌃) e (⌥) teclas alt. Nos MacBooks, mesmo perto da fntecla esquerda .

nanitous
fonte
Definir teclado do Mac ;-)
Arjan
Ok, você tem um ponto aqui, eu quis dizer um layout de teclado Apple Mac dos EUA, embora independentemente de um teclado estendido completo ou de um macbook.
nanitous