Quelle est la séquence de préfixe / d'échappement la moins conflictuelle pour screen ou tmux?


96

L'écran va avec Ctrl+ A. tmux d’autre part - tel qu’il a été développé dans screen - utilise Ctrl+ B. Cependant, les deux frappes de touches sont également utilisées dans les éditeurs, les shells, etc. Ainsi, le choix de l'une ou l'autre dégrade l'expérience utilisateur et la fonctionnalité de ces outils lorsqu'ils sont utilisés dans tmux ou screen.

Quel préfixe est le moins en conflit avec les combinaisons de touches d'autres programmes et de shells?


6
"lequel est le moins en conflit avec d'autres programmes?" n'a rien à voir avec l'opinion.
iconoclast

Après la modification, ~/.tmux.confn'oubliez pas de redémarrer le serveur tmux pour que les modifications prennent effet ( superuser.com/q/188491/105108 ).
ks1322

Alternative à l'utilisation d'un préfixe: Certains terminaux offrent maintenant l'intégration tmux via "tmux -CC" (c'est-à-dire iTerm2 pour macOS). De cette façon, les fenêtres tmux apparaissent sous forme d'onglets dans le terminal. Vous pouvez ensuite utiliser des liaisons de touches pour gérer les onglets qui ne sont pas en conflit avec un programme terminal, par exemple en utilisant la clé cmd (ou super clé, clé Windows).
cjay

Réponses:


48

Je pense ^\(aka ^|) est le meilleur si c'est dans une position commode sur votre disposition du clavier. Ses utilisations dans d'autres programmes sont assez rares:

  • envoi SIGQUITà un processus
  • abandonner pour ou alors que des boucles dans un shell quand ^Cest intercepté
  • toggle-input-method à emacs

Je ne connais aucune autre utilisation. Veillez à ne pas tuer accidentellement un processus en dehors de tmuxou screenaprès vous y être habitué. Cela ne m'est arrivé qu'une fois dans quelques années.

~/.tmux.conf

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

~/.screenrc

escape ^|^|

J'ai essayé cela mais tmux se plaint de l'utilisation de C-`. Can I escape the `character en quelque sorte?
Jason

2
Pour que quelqu'un d'autre sache, vous devriez écrire à la 'C-\'place de «C- \» dans la configuration de tmux.
Gns-Ank

2
N'oubliez pas de 'tmux source-file /path/to/tmux.conf' lorsque vous avez fini d'essayer les nouveaux paramètres
user72923

12
mais alors je prends l'habitude de cette commande, et quand j'oublie que je suis à l'écran, je commence à envoyer accidentellement des SIGQUIT ...
Kache

3
"si c'est dans une position commode sur votre disposition de clavier" par défaut ce n'est pas, insinuez-vous qu'il existe un remappage populaire que vous utilisez qui rend C- \ commode?
Storypixel

53

Pour ceux qui veulent utiliser backtick comme évasion dans tmux, vous voudrez ajouter:

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

Ce dernier point est important, sinon vous ne pouvez pas taper de backtick à d’autres fins :-)


Backtick semble être une bonne idée jusqu'à ce que vous colliez un peu de SQL ...
Synchro

3
@ Synchro sur tmux 1.8, ce n’est plus un problème grâce à l’option assum-paste-time qui est activée par défaut (définie sur 1ms). Voir ici: sourceforge.net/p/tmux/tmux-code/ci/…
sickill

J'ai trouvé cette question à la recherche d'alternatives au backtick, car cela commençait à poser des problèmes après que je m'étais habitué à utiliser des backticks plutôt que $()dans des coquillages. En outre, cela devient une douleur une fois que vous commencez à écrire beaucoup de Markdown. Je l'utilise depuis plusieurs années, mais malheureusement, je vais devoir le changer maintenant.
kirelagin

4
Dans .tmux.conf j'ai aussi bind-key C-a set-option -g prefix C-a. Chaque fois que je dois utiliser des backticks, je tape `-Ctrl-ace qui définit mon préfixe C-a. Et j'ai bind-key C-b set-option -g prefix `donc je peux frapper C-a-C-bpour revenir
Boris

Et si vous écrivez markdown? Comment échappez-vous au préfixe?
OJFord

21

Ctrl + A est également connu pour causer des problèmes avec Emacs, y compris Bash en mode Emacs. Il semble que ce ne soit pas un problème pour vous.

Ctrl + O est l'autre option que j'ai vue. Apparemment, il s’agit de la valeur par défaut dans RatPoison (il s’agit d’un gestionnaire de fenêtres X qui n’a pas besoin de souris). J'ai utilisé Ctrl + O lorsque j'utilisais des écrans imbriqués: Ctrl + O pour les écrans extérieurs et Ctrl + A pour les écrans intérieurs. A bien fonctionné, mais un peu effrayé mes collègues. :-)

Je pensais juste et si vous utilisez vi plutôt que Emacs, il y a quelques alternatives. Ctrl + G n'est pas utilisé beaucoup, par exemple.


8
Pour les utilisateurs d'Emacs, Ctrl + O semble être le meilleur choix: dans Emacs, il ne fait qu '"ouvrir une nouvelle ligne au niveau du curseur" et, en bash, "répéter une séquence de commandes".
Flow

2
+1 si vous êtes d'accord avec les opérations ctrl-droit, cela ressemble à une bonne sauvegarde. Je suis moi-même un gauchiste ;-)
DaveParillo,

9
Je pense que Ctrl + O rompt vim
Mu Qiao

14
Je suis d'accord avec @MuQiao. Ctrl-o est utilisé dans Vim pour passer à une position de curseur plus ancienne (équivalent du bouton Précédent dans de nombreux IDE), une fonctionnalité que j'utilise très souvent lorsque je navigue dans du code dans Vim. Ctrl-b est synonyme de PageUp dans Vim. Je n'utilise pas du tout Ctrl-b sur Vim. Donc, pour les utilisateurs de Vim comme moi, Ctrl-b est toujours un meilleur choix que Ctrl-o. J'utilise Cj comme clé de préfixe, car Cj est synonyme de j ou <Down> dans Vim et personne n'utilise Cj pour déplacer une ligne vers le bas dans Vim. J'ai ceci dans mon ~ / .tmux.conf:set -g prefix2 C-j; bind-key C-j send-prefix -2
Susam Pal

C-jconflits avec CtrlP. Monter et descendre la liste des tampons utilise C-ket C-jrespectivement
blockloop

14

Je suis CAPS-LOCKglobalement mappé sur ESC. Ensuite, j'utilise M-Space(c'est-à-dire CAPS-LOCK+ Space) pour mon préfixe.


J'essaie de faire cela, mais si je tiens CAPS-LOCK(en pensant à ma prochaine commande ou quelque chose comme ça) tmux - ou iTerm, ne sachant pas ce qui le cause - reçoit la ESCcommande à plusieurs reprises, ce qui a M-Spacepour effet de ne pas fonctionner. Existe-t-il un moyen de désactiver ce problème clé récurrent? Par exemple, cela fonctionne lorsque j'appuie rapidement sur une touche CAPS-LOCK + Space, mais pas si je la maintient appuyée CAPS-LOCKpendant une seconde ou une seconde puis appuyez sur, Spaceelle n'enregistre pas l' M-Spaceaccord ...
Bruno Ely

12

J'utilise un système complexe pour l'écran. Mon échappement par défaut est défini sur \ 140 \ 140, ce qui est un backtick. La combinaison de touches Ctrl-A me complique à la fois dans Emshs et la modification de la ligne de commande dans Zsh, et je n'aime pas Ctrl-O (opérations à deux mains pour la plupart des actions à l'écran).

Je relie l'écran à l'écran 1 pour que les nouvelles sessions soient créées de gauche à droite sur le clavier à partir de 1. Cela me permet de réserver l'écran 0 pour ce que je considère comme des fenêtres persistantes ou de référence. C'est très rapide, d'un geste de la main, à (mal de dos) 1, (mal de dos) 2, (mal de dos) 3 de permuter entre les fenêtres.

Le problème de l'utilisation de backtick dans un environnement unix est lié à la tentative de couper-coller du code de script shell / perl. Pour cette raison, je lie les touches F11 / F12 pour basculer entre mes caractères d'échappement.

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

Cela échangera l'échappement vers Ctrl-O lorsque je ferai des opérations de copier / coller. J’ai trouvé qu’un double tick était simple et représentait un bon compromis pour la plupart des opérations d’écran.

Revisiter cette réponse avec une solution plus récente qui permet de basculer le mode en appuyant sur F12 et en utilisant une légende pour indiquer le mode.

## 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"

Solution créative. Je suis impressionné.
staticsan

bind-key -n F11 set -g préfixe `bind-key -n F12 set -g préfixe Co Mises à jour pour tmux au cas où d'autres voudraient l'adapter.
milkypostman

1
Existe-t-il un moyen de définir une sorte de délai d'expiration minimal pour le combo préfixe + autre-clé dans tmux; ainsi, lors du collage de code, aucune commande n'est déclenchée, mais lors de la saisie de la touche backtick + key à partir du clavier, la pause entre les touches backtick et l'autre était plus longue ?
malade

11

Je l' utilise Ctrl-Qdans tmuxet il a bien fonctionné jusqu'à présent. Je dois toutefois mentionner que cela entre en conflit avec le contrôle de flux de shell. Par défaut, Ctrl-Qest utilisé pour réactiver la sortie après l'avoir arrêtée avec Ctrl-S. Ayant été surpris par un obus coincé à plusieurs reprises après avoir frappé accidentellement Ctrl-S, j'ai appris à ne pas appuyer Ctrl-S.

(On peut aussi désactiver complètement le contrôle de flux avec stty -ixon, ou lier différentes clés à stty startet stty stop.)

# tmux.conf
unbind C-b
set -g prefix C-q

J'ai adopté ce lien et je le trouve très pratique. Merci!
aymericbeaumet

Mon préféré aussi, car je désactive toujours le système de contrôle de flux terminal.
Jack O'Connor

2
Utilisé dans emacs pour quote-inserted. Exemple d'utilisation (dans emacs): si je souhaite rechercher le caractère de tabulation suivant -<Ctrl-s>+<Ctrl-q>+<TAB>
nhed

6

J'aime réserver ^Spacepour des opérations très spéciales / communes parce que je trouve que c'est le préfixe le plus facile à taper, mais pour le moment, j'essaye de le mapper en tant que prefixdans le tmux .

Vos doigts sont libres pour passer instantanément à la commande à saisir. Essaie.


3
Cela n'a pas duré longtemps - je suis de retour à ^ j. ^ Space est trop similaire aux commandes que j'utilise pour appeler des applications de niveau OSX (Spotlight, QuickSilver, DTerm).
terrasse

J'utilise aussi Cj. C’est ce que j’utilise dans mon ~ / .tmux.conf:set -g prefix2 C-j; bind-key C-j send-prefix -2
Susam Pal

1
J'utilise aussi C-Space, il n'est pas utilisé presque nulle part ailleurs.
mahdix

1
C-space est parfait pour moi, car je suis sur un Chromebook: D
Eric Nguyen

6

Une suggestion tardive: ctrl-s. ctrl-sprésente de nombreux avantages:

  1. Au premier rang.
  2. Toujours proche de ctrl-a(en fait, pour la plupart des dactylographes, il utilisera les deux mêmes doigts pour lesquels il était utilisé ctrl-a), donc le commutateur de mémoire musculaire de ctrl-aà ctrl-sest trivial - pour moi, il est devenu une seconde nature environ une heure après l'avoir essayé pour la première fois.
  3. Libère ctrl-apour les opérations "retour au début de ligne" ou "nombre d'incrément" de style vac. Ou bien, pour faire fonctionner l'écran dans un volet tmux sans avoir à vous soucier d'échapper aux caractères de préfixe pour contrôler l'instance d'écran intégrée. (Je le fais souvent en utilisant un tmux local avec des panneaux contenant des sessions ssh sur des serveurs distants, dans lesquels je lance screen)
  4. Ne remplace pas et n'ajoute pas de conditions d'échappement à toute autre fonctionnalité de terminal couramment utilisée. rien que la grande majorité des gens utilisent aujourd'hui est sur ctrl-s!

Bien sûr, la raison pour laquelle rien n'est sur ctrl-s est que dans le terminal, il est traditionnellement utilisé pour le contrôle de flux, datant des jours avant des outils de recherche de personnes comme moreet lessétaient communs. Je suis sûr que certains programmes de terminal d'interface graphique ont toujours cette fonctionnalité de contrôle de flux activée par défaut, mais je n'en ai pas encore rencontré un; Les programmes terminaux que j'ai essayés semblent tous l'ignorer complètement par défaut, ce qui rend cette combinaison de touches pratique disponible pour des utilisations plus productives.

Donc, si vous n'utilisez pas screen / tmux depuis (par exemple) un terminal Linux brut, mais plutôt depuis un terminal basé sur une interface graphique, je vous recommande d' ctrl-sessayer. Cela m'a permis de compresser beaucoup plus facilement dans tmux et écran.


4
Ctrl-s est une recherche avancée, car quand je vais trop loin avec Ctrl-r :)
Jack O'Connor

Ctrl-S est commun pour arrêter la sortie de la console (aka "la geler"). Cela m'a mordu quand j'ai essayé de le remapper.
Dave

5

Une clé sans conflit peut être C-z, car elle est généralement utilisée pour envoyer le programme en arrière-plan afin de continuer une autre opération sur le shell qui l'a démarrée. Je ne fais pas ça quand j'ai tmux.


Le seul problème que j'ai rencontré avec Cz est que la plupart des gens utilisent Cb, donc ma mémoire musculaire est éteinte lorsque je programme en binôme sur la machine de quelqu'un d'autre fg.
Steve Jorgensen

La grande pensée à propos de Cz est que, si vous ne voulez pas utiliser Ca, elle est très proche de la touche Ctrl gauche, qui est la seule touche de contrôle de la plupart des claviers d’ordinateurs portables de nos jours. Également proche du verrouillage majuscule si vous avez mappé celui-ci sur Ctrl. Je mappe mes majuscules sur Esc, car j'utilise souvent un clavier Kinesis Freestyle Solo dont la touche Échap est mal placée.
Steve Jorgensen

4

J'ai entendu parler de `(backtick) utilisé et ensuite il vous suffit de le taper deux fois pour un backtick réel. Cela pourrait être mieux pour les utilisateurs de vi qui sont habitués à l'action (sauf si vous faites le verrouillage majuscule).


Comment pouvez-vous définir backtick pour tmux?
Alexandre Nizoux

Quelque chose comme: Unbind Cb; set -g prefix ' '; bind '' send-prefix; voir la réponse de Darren Hall ci-dessus.
bluehavana

Je suis avec backtick depuis environ un an et je ne reviendrai jamais au préfixe combo / clé. Essaie.
sickill

4

Je recommande C-j, qui n'interfère pas beaucoup avec vi ou emacs. Pour l’essentiel, je souscris à un commentaire de Susam Pal, qui semble digne d’être présenté comme une réponse, car les autres semblent tous avoir des conflits importants de mon point de vue.

J'utilise Cj comme clé de préfixe, car Cj est synonyme de j ou dans Vim et personne n'utilise Cj pour déplacer une ligne vers le bas dans Vim. J'ai ceci dans mon ~ / .tmux.conf:

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


1
Sur la base de votre recommandation, j'utilise Cj depuis un moment et le seul conflit que j'ai découvert concerne le plug-in CtrlP vim. Cj et Ck sont utilisés pour faire défiler les options, respectivement.
blockloop

3

Pour la mise en page du clavier Dvorak programmeur, il est très soigné d'utiliser une touche moins (tiret) comme préfixe, à savoir ctrl+ -.
La clé moins est en position de guillemet simple dans la mise en page qwerty. De plus, j'ai la touche majuscule qui fonctionne comme une touche Ctrl. Voici une conf de tmux, pour la définir comme préfixe:

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

Vous vous demandez peut-être pourquoi le trait de soulignement est utilisé à la place de moins? Reportez-vous à Tux: comment puis-je me lier à C— (contrôle moins)?
Pour qwerty, vous pouvez appliquer. Comment lier la clé de préfixe tmux à C- '? solution, afin de conserver le même raccourci.

Je dirais que c'est un préfixe parfait si vous utilisez Vim / Neovim. Parce que les préfixes, tels que ctrl+ aou ctrl+ b, masquent (superposent) les fonctionnalités de Vim, dans les deux sens.


2

Personnellement, bc'est trop loin Ctrlpour moi. Quand j'utilise tmux, je change toujours la liaison de Cb en Ca. Le principal conflit avec Ca est tout sélectionner, mais je n'ai pas trouvé que c'était un problème avec les programmes que j'utilise avec tmux.


en effet, j’utilise la valeur par défaut (à l’écran, je n’ai jamais essayé tmux) et je n’ai pas encore trouvé la nécessité de le changer.
Quack Quackote

2

En tant qu’utilisateur GNU emacs, zsh et MS Windows, j’utilise Control-T. (par exemple en .screenrc :)

échapper "^ T ^ T"

Oui, Control-T est lié à quelque chose, comme le menu déroulant d'aptitude d'Ubuntu ou le caractère de transposition d'Emacs.

J'ai négligé Co parce qu'il me faut deux mains.


2

Je pense que la meilleure solution est ^ C. Emacs utilise ^ C comme préfixe, et je trouve que quand je dois taper ^ C dans un shell, j'en saisis presque toujours deux de toute façon. :-)

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


1

Vous pouvez utiliser un backtick. Certaines versions plus anciennes de tmux ne supportent pas backtick, vous pouvez donc procéder comme suit (cela ajouterait C-`, C- @ et C-space en même temps que votre méta):

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

Je remappe normalement mon CapsLock en Ctrl, ce qui est donc encore plus logique avec le backtick.


Je l'utilise aussi bien. C-Space est assez facile à taper.
kzh

Le backtick est très bon. Cependant, ce n'est pas très pratique comme terminal. Vous ne pouvez certainement pas vous tromper avec xterm sur linux, mais des terminaux comme putty et iTerm2 (macos) ont des problèmes pour l’émuler correctement. Heureusement, dans iTerm2, vous pouvez contourner le problème dans la configuration. Je n'utilise pas beaucoup Windows / Mastic, donc ctrl-space semble être une solution de contournement réalisable. :)
Alex

1

La plupart des réponses ici utilisent Ctrl dans une combinaison de touches.
Quand j'ai utilisé Ctrl, mon petit doigt a commencé à me faire mal parce que je devais toujours le diffuser en Ctrl.
J'utilise Alt-jce que je tape avec mon pouce gauche et mon index droit et c'est très pratique. Je n'ai également trouvé aucune collision avec aucun autre programme jusqu'à présent.

unbind C-b
set-option -g prefix M-j

1

Pour l’écran GNU, en mappant le backtick sur échapper, ce qui suit dans ~ / .screenrc fonctionne pour moi.

escape ``


0

Je pense que les utilisateurs de Mac trouveront le §plus pratique que le backtick.

Sur les claviers autres que Mac , le backtick est positionné sur la même touche que les §claviers Mac. Donc, pour profiter du même confort que ceux qui suggèrent d’utiliser le backtick, utilisez le signe de paragraphe sur un clavier Mac.

Utiliser le backtick sur les claviers Mac est délicat, car il est situé très près du décalage gauche (), du contrôle (⌃) et des touches (). Sur MacBook, même près de la fntouche gauche .


Définir le clavier Mac ;-)
Arjan

D'accord, vous avez raison, je voulais dire une disposition de clavier Apple Mac US, bien qu'il s'agisse d'un clavier complet étendu ou d'un clavier MacBook.
nanitous
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.