66 votes

mode de copie tmux - sélection du bloc de texte

J'utilise tmux avec des touches vi, et le copier/coller fonctionne bien tant que l'on sélectionne une ligne de texte, ou si l'on n'a qu'une seule fenêtre. Lorsque je veux sélectionner un bloc de texte (plusieurs lignes, mais pas sur toute la largeur), je rencontre des problèmes. Si j'ai plusieurs fenêtres vim ouvertes, le texte sera sélectionné dans chacune d'entre elles, et ce dont j'ai besoin, c'est de sélectionner le texte dans une seule fenêtre. C'est-à-dire, comme une sélection visuelle dans vim.

Est-ce possible ?

78voto

Amir H. Sadoughi Points 706

Assurez-vous de consulter le bas de cet article pour connaître les liens nécessaires qui doivent être ajoutés à votre fichier .tmux.conf.

Je suppose que votre clé de préfixe est C-a :

  • C-a signifie : appuyer Ctrl + A
  • C-a [ signifie : presse Ctrl + A puis appuyez sur [

Pour faire une sélection du rectangle de texte de (1,1) à (2,2) dans tmux :

  • Passez en mode copie : C-a [
  • Déplacer le milieu d'une ligne
  • Appuyer sur C-v
  • Espace presse
  • Déplacer la sélection avec jkhl
  • Une fois que vous êtes satisfait de votre sélection, appuyez sur Enter (ou y si vous avez dans votre fichier conf).
  • Vous pouvez coller la dernière copie de buffer par : C-a ]

Remarquez qu'en appuyant sur space est nécessaire pour la sélection du rectangle.

Pour sélectionner des 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 bindings dans mon fichier .tmux.conf :

Avant le version 2.4 (20 avril 2017) :

setw -g mode-keys vi
bind-key -t vi-copy 'v' begin-selection     # Begin selection in copy mode.
bind-key -t vi-copy 'C-v' rectangle-toggle  # Begin selection in copy mode.
bind-key -t vi-copy 'y' copy-selection      # Yank selection in copy mode.

Après version 2.4 :

setw -g mode-keys vi
bind-key -T copy-mode-vi 'v' send -X begin-selection     # Begin selection in copy mode.
bind-key -T copy-mode-vi 'C-v' send -X rectangle-toggle  # Begin selection in copy mode.
bind-key -T copy-mode-vi 'y' send -X copy-selection      # Yank selection in copy mode.

Il est important de supprimer la liaison par défaut entre le rectangle et le basculeur :

unbind-key -t vi-copy v  # Prior to version 2.4
unbind-key -T copy-mode-vi v

Sinon, la nouvelle liaison "C-v" ne fonctionne pas.

Note : pour avoir un seul .tmux.conf qui fonctionne pour toutes les versions, voir cette question .

21voto

Soundarya Points 61

Vous pouvez sélectionner un bloc visuel comme dans vi -- tapez v avant de commencer la sélection. Dans la page de manuel, cette fonction est appelée "Rectangle toggle".

12voto

here Points 228

Comme le souligne Lars, v fait en fait ce que vous demandez en basculant entre le mode rectangle et le mode sélection pleine ligne. space y enter permettent respectivement de démarrer une nouvelle sélection et de la copier. Entrez dans le 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 troublé car v dans vim comme space dans tmux , pour commencer la sélection.

Délivrance :list-keys -t vi-copy dans tmux affichera la table complète des commandes en mode copie.

bind-key -t vi-copy    C-b page-up                                                      
bind-key -t vi-copy    C-c cancel
bind-key -t vi-copy    C-e scroll-down
bind-key -t vi-copy    C-f page-down
bind-key -t vi-copy    C-h cursor-left
bind-key -t vi-copy  Enter copy-selection
bind-key -t vi-copy    C-y scroll-up
bind-key -t vi-copy Escape clear-selection
bind-key -t vi-copy  Space begin-selection
bind-key -t vi-copy      $ end-of-line
bind-key -t vi-copy      , jump-reverse
bind-key -t vi-copy      / search-forward
bind-key -t vi-copy      0 start-of-line
bind-key -t vi-copy      1 start-number-prefix
bind-key -t vi-copy      2 start-number-prefix
bind-key -t vi-copy      3 start-number-prefix
bind-key -t vi-copy      4 start-number-prefix
bind-key -t vi-copy      5 start-number-prefix
bind-key -t vi-copy      6 start-number-prefix
bind-key -t vi-copy      7 start-number-prefix
bind-key -t vi-copy      8 start-number-prefix
bind-key -t vi-copy      9 start-number-prefix
bind-key -t vi-copy      : goto-line
bind-key -t vi-copy      ; jump-again
bind-key -t vi-copy      ? search-backward
bind-key -t vi-copy      B previous-space
bind-key -t vi-copy      D copy-end-of-line
bind-key -t vi-copy      E next-space-end
bind-key -t vi-copy      F jump-backward
bind-key -t vi-copy      G history-bottom
bind-key -t vi-copy      H top-line
bind-key -t vi-copy      J scroll-down
bind-key -t vi-copy      K scroll-up
bind-key -t vi-copy      L bottom-line
bind-key -t vi-copy      M middle-line
bind-key -t vi-copy      N search-reverse
bind-key -t vi-copy      T jump-to-backward
bind-key -t vi-copy      W next-space
bind-key -t vi-copy      ^ back-to-indentation
bind-key -t vi-copy      b previous-word
bind-key -t vi-copy      e next-word-end
bind-key -t vi-copy      f jump-forward
bind-key -t vi-copy      g history-top
bind-key -t vi-copy      h cursor-left
bind-key -t vi-copy      j cursor-down
bind-key -t vi-copy      k cursor-up
bind-key -t vi-copy      l cursor-right
bind-key -t vi-copy      n search-again
bind-key -t vi-copy      q cancel
bind-key -t vi-copy      t jump-to-forward
bind-key -t vi-copy      v rectangle-toggle
bind-key -t vi-copy      w next-word
bind-key -t vi-copy BSpace cursor-left
bind-key -t vi-copy  NPage page-down
bind-key -t vi-copy  PPage page-up
bind-key -t vi-copy     Up cursor-up
bind-key -t vi-copy   Down cursor-down
bind-key -t vi-copy   Left cursor-left
bind-key -t vi-copy  Right cursor-right
bind-key -t vi-copy   C-Up scroll-up
bind-key -t vi-copy C-Down scroll-down

8voto

andrejr Points 171

Étant donné qu'aucune des autres réponses n'apporte une solution optimale au problème, je ne suis pas contre la nécromancie.

Il existe un moyen de faire fonctionner la sélection des blocs de la même manière que dans Vim, sans avoir à appuyer sur l'espace. Il suffit d'un simple Ctrl-V, ancré dans votre mémoire musculaire.
Il faut éditer votre .tmux.conf (mais l'utilisation du mode vi 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 de Vim et les raccourcis :

# set vi-mode
set-window-option -g mode-keys vi
# keybindings
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle \; send -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
# comment the preceding line and uncomment the following to yank to X clipboard
# bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"

Entrez dans le mode de sélection et naviguez jusqu'à l'endroit où vous souhaitez commencer la sélection. Maintenant v lance une sélection régulière (caractère par caractère, ligne par ligne), <C-v> démarre la sélection des blocs et V (shift-v) lance la sélection de la ligne. Quel que soit le type de sélection, y envoie un message au tampon de collage de tmux (ou au presse-papier de X ; voir les commentaires du code ci-dessus).

Identique à Vim.

4voto

Kameron Spruill Points 449

Voici une solution pour les utilisateurs de Mac OS

  1. prefix + [ pour passer en mode copie
  2. naviguer au début ou à la fin de la sélection de texte à l'aide des touches fléchées
  3. appuyer sur la touche espace pour démarrer la sélection, parfois control + space
  4. se déplacer à l'opposé du texte à copier à l'aide des touches fléchées
  5. pulse return pour copier le texte sélectionné dans tmux presse-papiers, parfois control + w ou esc + w ou alt + w
  6. dans le même tmux session, coller avec prefix + ] à coller dans vim coller avec prefix + ] en vim mode d'insertion

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X