J'ai deux fichiers ouverts dans vim, chacun dans un volet tmux. Je voudrais copier disons 10 lignes d'un fichier à un autre.
Comment puis-je accomplir cela sans utiliser le Copy
-> Paste
de la souris?
Vous devrez utiliser des raccourcis tmux. En supposant que votre raccourci de commande tmux est la valeur par défaut: Ctrl+b, puis:
Ctrl+b, [ Passez en mode copie (?).
Déplacer vers le début/la fin du texte pour le mettre en surbrillance.
Ctrlspace
Commencez à surligner du texte (sur Arch Linux). Quand j'ai compilé tmux à partir de la source sur OSX et d'autres Linux, juste Space seul fonctionne généralement. Le texte sélectionné modifie les couleurs, vous saurez donc si la commande a fonctionné.
Déplacer à l'extrémité opposée du texte à copier.
Alt+w Copie le texte sélectionné dans le presse-papiers tmux. (Sur Mac, utilisez Esc+w.)
Déplacez le curseur sur le volet tmux opposé ou sur une fenêtre tmux complètement différente. Placez le curseur à l'endroit où vous souhaitez coller le texte que vous venez de copier.
Ctrl+b, ] Collez le texte copié du presse-papiers tmux.
tmux est assez bon pour mapper les commandes aux raccourcis clavier personnalisés.
Voir Ctrl+b,? pour la liste complète des raccourcis clavier définis.
Malheureusement, je ne peux pas encore ajouter de commentaire à la réponse d'Alex Leach, je vais donc inclure un addenda ici pour les utilisateurs de Mac OS X:
Si vous utilisez vim et tmux sur macOS (testé sur macOS 10.12.2, tmux 2.3):
(Supposons que la combinaison de touches de préfixe de tmux soit prefix. Le préfixe est ctrl + b par défaut.)
Je me connecte à mon serveur CentOS sur une machine Windows en utilisant le client terminal ZOC ssh. Voici ce qui fonctionne pour moi:
<prefix>
+ [
<Space>
<Enter>
<prefix>
+ ]
Si vous avez vim
ouvert, il vaut mieux utiliser le copier-coller vim pour copier du texte.
Le copier-coller de Tmux fonctionnera, mais il y a plusieurs inconvénients.
Tout d'abord, lors de la copie de plusieurs lignes de texte, vous devrez sélectionner plusieurs lignes. Le copier-coller Tmux ne comprend généralement pas que vim
a des numéros de ligne ou qu'il y a des marquages dans la gouttière vim (tels que des nombres relatifs/nombres absolus). En conséquence, il les copiera également.
Deuxièmement, j'ai constaté que si le texte a une mise en forme spécifique à une langue et que vous essayez directement de copier-coller en utilisant tmux vers vim, cela gâchera la mise en forme. Cela peut être évité en utilisant set paste!
. Cependant, cela nécessite beaucoup plus de travail.
"+y
pour copier et "+p
collerVim
fournit nativement une méthode pour copier-coller entre le tampon vim et le presse-papiers du système, en utilisant "+y
ou "*y
. Puis coller à l'aide de "+p
ou "*p
. Cela évitera de copier les nombres relatifs dans la gouttière ou d'autres marques aléatoires qui ne sont pas pertinentes pour vim
Vous pouvez utiliser le presse-papiers du système avec "* y et" * p au lieu des y et p normaux.
Quelques options pour l'utilisation de vim car la séquence de raccourcis tmux est un peu longue et j'ai du mal à m'en souvenir
Comme indiqué dans les réponses ci-dessus, vous pouvez utiliser "+y
et "*y
pour copier puis "+p
et "*p
respectivement à coller. Si vous souhaitez que vim utilise le presse-papiers par défaut, vous pouvez simplement utiliser y/p
directement alors.
set clipboard=unamed "sets the default copy register to be *
set clipboard=unamedplus "sets the default copy register to be +
source pour la commande du presse-papiers: https://vi.stackexchange.com/questions/84/how-can-i-copy-text-to-the-system-clipboard-from-vim
J'ai moi-même eu le problème et j'ai téléchargé mes fichiers .vimrc et .tmux.conf ici: tvp-repl
Vous pouvez configurer tmux pour
Tout ce dont vous avez besoin pour configurer vim à copier dans le presse-papiers [mode visuel Ctrl+c]:
set clipboard=unnamedplus
vnoremap <C-c> "+y
Ensuite, utilisez la commande tmux pour exécuter la copie depuis vim et coller le tampon dans un autre volet [Ctrl+b Entrer]:
bind-key Enter run "tmux send-keys -t 0 C-c" \;
run "tmux select-pane -t 1" \;
run "tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer" \;
run "tmux send-keys -t 1 Enter" \;
run "tmux select-pane -t 0"
Remarque: a) Ce script nécessite xclip pour s'interfacer avec le presse-papiers. b) L'hypothèse est que vim est dans le volet 0; le volet cible est le volet 1.