J'utilise tmux avec les touches vi, et copier / coller fonctionne bien tant que vous sélectionnez une ligne de texte ou si vous n'avez qu'une seule fenêtre. Lorsque je veux sélectionner un bloc de texte (plusieurs lignes, mais pas toute la largeur), je rencontre des problèmes. Si plusieurs fenêtres vim sont ouvertes, le texte sélectionné sera sélectionné dans toutes les fenêtres. Ce dont j'ai besoin, c'est de sélectionner le texte uniquement dans une fenêtre. C’est-à-dire comme une sélection visuelle dans vim.
Est-ce possible?
Réponses:
Assurez-vous de vérifier le bas de ce post pour les liaisons nécessaires qui doivent aller dans votre fichier .tmux.conf.
Je suppose que votre clé de préfixe est Ca:
Pour faire une sélection rectangle de texte de (1,1) à (2,2) dans tmux:
Notez que vous devez appuyer sur spacepour sélectionner un rectangle.
Pour sélectionner les lignes comme vous le feriez normalement, passez en mode copie et appuyez sur v, sélectionnez avec les touches jkhl et appuyez sur y.
J'ai ces liaisons dans mon fichier .tmux.conf:
Avant la version 2.4 (20 avril 2017) :
Après la version 2.4 :
Il est important de dissocier la liaison rectangle-bascule par défaut:
Sinon, la nouvelle liaison 'Cv' ne fonctionne pas.
Remarque: pour en avoir un
.tmux.conf
qui fonctionne sur plusieurs versions, consultez cette question .la source
send
andsend-keys
. Je vois dans superuser.com/questions/196060/selecting-text-in-tmux-copy-modesend-key
est utilisé. Les guillemets sont-ils également importants?Vous pouvez sélectionner un bloc visuel comme dans vi - type
v
avant de commencer la sélection. Dans la page de manuel, cela s'appelle "Basculement du rectangle".la source
Comme le souligne Lars,
v
fait ce que vous demandez en basculant entre le mode rectangle et le mode de sélection de ligne complète.space
etenter
sont utilisés respectivement pour commencer une nouvelle sélection et la copier. Entrez en mode copie en utilisant votre préfixe suivi de[
et collez votre sélection copiée dans n’importe quelle fenêtre tmux en utilisant]
Cela m’a également dérouté car
v
, dans vim, fonctionne commespace
dans tmux, pour commencer la sélection.Émission
:list-keys -t vi-copy
en tmux affichera la table complète des commandes en mode copie.la source
Comme aucune des autres réponses n'apporte une solution optimale au problème, je ne suis pas au-dessus de la nécromancie.
Il existe un moyen de faire en sorte que la sélection de blocs fonctionne de la même manière que dans Vim, sans avoir à appuyer sur la touche espace. Juste un simple Ctrl-V, enraciné dans votre mémoire musculaire.
Il faut éditer votre fichier .tmux.conf (mais vi-mode le fait déjà) et je ne suis pas sûr que cela fonctionne pour tmux <2.4.
Ajoutez ceci à votre fichier .tmux.conf pour répliquer la sélection Vim et les liaisons yank:
Passez en mode sélection et naviguez jusqu’à l’endroit où vous souhaitez commencer la sélection.
v
Commence maintenant la sélection normale (caractère par caractère, ligne par ligne),<C-v>
commence la sélection de bloc etV
(shift-v) commence la sélection de ligne. Indépendamment du type de sélection,y
tire sur tmux coller le tampon (ou le presse-papier X; voir les commentaires de code ci-dessus).Identique à Vim.
la source
EDIT: Après avoir vérifié le code source, j'ai complètement réécrit ma réponse.
Au départ, je pensais que cela n’était pas possible parce que je ne pouvais pas le faire fonctionner, mais les autres réponses sont exactes
v
, mais il n’est pas évident de savoir comment utiliser cela, surtout si vous êtes habitué à vim.En outre, il ne travaillerait pour moi parce que je l' avais
v
lié àbegin-selection
- je pense que je dois avoir aveuglément copié cette idée d'ailleurs à imiter la façon de vim pour commencer un caractère choix judicieux, ne sachant pas que cela causerait des problèmes plus loin sur la route bloquer les sélections.Une fois que j'ai enlevé cette liaison (en commentant la ligne dans mon
.tmux.conf
et en redémarrant tmux), cela a commencé à fonctionner, mais c'est toujours assez déroutant car ce n'est pas du tout la même chose que vim.Avec les liaisons par défaut, cela devrait fonctionner comme suit:
setw -g mode-keys vi
dans votre.tmux.conf
.C-a [
pour démarrer le mode copiev
Space
pour commencer la sélectionv
nouveau pour basculer la sélection en mode de sélection de caractères ou inversement.Vous n'êtes pas obligé de taper le
v
avant d'appuyerSpace
. Vous pouvez commencer par sélectionner les caractères,Space
puis appuyer surv
pour passer au mode de sélection rectangulaire.C'est assez différent de vim en ce que dans tmux, vous devez taper deux caractères:
Space
etv
passer en mode de sélection rectangulaire. Dans vim, il suffit de taperCtrl-V
.Également dans vim,
v
commence une sélection de caractère, pas de bloc.Malheureusement, il ne semble pas y avoir de mode de sélection ligne par ligne dans tmux (
Shift-v
dans vim).EDIT: Il semble que Tmux version 2.0 offre un mode de sélection ligne par ligne
Shift-v
(je ne l’ai pas encore essayé!)la source
Shift-v
dans la version 2.0 de mars 2015), certainement après ma réponse et longtemps après votre réponse initiale. Peut-être que vous et moi parlons de deux choses différentes lorsque nous parlons de sélection par ligne. Veuillez comparer avec les 3 modes de sélection dans VIM (avecv
,Shift-v
etCtrl-v
).v
sélection est basée sur le caractère. Je suis sur la version 1.9a et n'ai pas la sélection par ligne vim-like. Ainsi, avec la version 2.0, les trois modes exacts de vim sont également possibles dans tmux, non?