web-dev-qa-db-fra.com

Comment copier et coller entre différents volets tmux exécutant des instances vim

Exemple: copiez dans un volet tmux (via vim), puis basculez vers un autre volet (exécutant une autre instance de vim) et collez à l'aide de la commande vim paste. Je sais que cela peut être fait via tmux (en utilisant le préfixe +]) mais ce serait vraiment pratique si je peux copier et coller en utilisant les liaisons vim car je ne fais que basculer entre les différents volets exécutant vim.

Des idées?

66
gylaz

Désolé, j'essaie de vous convaincre d'utiliser les fonctionnalités intégrées de vim.


Pour faire le copy/paste facile, vous pouvez ouvrir des fichiers dans une autre onglet:

:tabe /path/to/another/file

Utilisation gt ou gT pour changer de tabulation.


Ou divisez la fenêtre pour modifier un autre fichier:

:sp /path/to/another/file

Utilisation Ctrl-ww pour changer de Windows.
Pour diviser la fenêtre verticalement, veuillez utiliser :vsp file


Mise à jour:

C'est mon .tmux.conf fichier:

# vim
setw -g mode-keys vi
bind [ copy-mode
bind -t vi-copy v begin-selection
bind -t vi-copy y copy-selection
bind -t vi-copy V rectangle-toggle
bind ] paste-buffer

# buffer
bind Space choose-buffer

Je les utilise uniquement lorsque j'ai besoin de copier la sortie du terminal.

47
kev

J'ai utilisé cette reliure pratique depuis plusieurs années :)

" copy to buffer
vmap <C-c> :w! ~/.vimbuffer<CR>
nmap <C-c> :.w! ~/.vimbuffer<CR>
" paste from buffer
map <C-p> :r ~/.vimbuffer<CR>
20
chenkaie

Bien que je convienne qu'il est préférable de n'utiliser qu'une seule instance de vim, vous pouvez le faire avec tmux seul. Il a un mode copie intégré. Mon tmux.conf est configuré comme:

  setw -g mode-keys vi
  unbind [
  unbind p
  bind C-y copy-mode
  bind p paste-buffer
  bind -t vi-copy v begin-selection
  bind -t vi-copy y copy-selection
  bind -t vi-copy Escape cancel

Vous pouvez donc utiliser prefix-<C-y> pour activer le mode copie, /search term comme exemple pour aller où vous voulez, v pour sélectionner visuellement, y pour accéder à tmux. Accédez ensuite à une autre session vim et passez en mode insertion. Utilisation prefix-p pour coller le contenu du tampon de collage tmux. Il existe également des moyens de copier le tampon de collage de tmux dans le presse-papiers de votre système.

12
Conner

Je suis actuellement coincé avec un ordinateur portable exécutant Windows au travail, mais je fais tout mon développement sur un serveur exécutant Linux, donc je finis par travailler dans une session tmux sur PuTTY toute la journée.

Je voulais copier du texte entre des instances de vim fonctionnant dans différentes fenêtres dans ma session tmux. J'ai essayé d'utiliser le * inscrivez-vous pour copier dans le presse-papiers du système, mais comme je suis connecté via PuTTY, je n'ai pas de session X, donc il n'y a est pas de presse-papiers du système, même si je lance gVim au lieu de vim. (J'aurais peut-être pu utiliser x-forwarding ou quelque chose pour résoudre ce problème, mais je ne voulais pas installer un x-server sur Windows.)

Je pensais qu'il devrait y avoir un moyen d'utiliser le tampon copier/coller tmux de vim à la place du clavier système, et bien sûr, quelqu'un a écrit n plugin pour cela .

L'installation de fakeclip ajoute un nouveau registre, &, qui correspond au tampon de collage de tmux. Étant donné que toutes mes instances vim sont dans la même session tmux, cela rend très simple de tirer/mettre du texte entre elles.

La documentation du plugin indique que fakeclip devrait également fonctionner avec l'écran gnu, mais je n'ai pas personnellement testé cela.


tl; dr

Installez le plugin fakeclip , puis vous pouvez utiliser "&y to yank dans le tampon de tmux, et "&p à put à partir du tampon de tmux.

12
DaoWen

Vous pouvez copier le contenu dans le presse-papiers à l'aide de liaisons Vim, puis basculer vers le volet et le coller. Les raccourcis clavier suivants peuvent être utiles.

noremap ty "+y
noremap tY "+Y  // copy a whole line to the clipboard
noremap tp "+p  // put the text from clipboard after the cursor 
noremap tP "+P  // put the text from clipboard before the cursor 

Le "+ register est utilisé pour accéder au clipborad du système dans Vim.

Quelques conseils utiles:
1. Vous pouvez appuyer sur v ou V ou ctrl-v pour passer en mode visuel, puis sélectionnez le contenu que vous souhaitez extraire et appuyez sur ty pour le copier dans votre presse-papiers.
2. ty peut être combiné avec d'autres mouvements. Par exemple, tyaw peut être utilisé pour copier un mot sous le curseur dans le presse-papiers. tyib copiez le contenu entre parenthèses. tyi" copier le texte entre guillemets doubles, etc ...

Voir aussi Comment faire coller Vim à partir (et copier dans) le presse-papiers du système? pour plus d'explications.

3
knight42

solution sur Fedora24

vous devez utiliser vimx au lieu de vim

mettez votre .bashrc ou .zshrc

alias vi='vimx'
alias vim='vimx'

puis vous pouvez facilement copier entre les panneaux vims/tmux


$ vim --version | grep clipboard
-clipboard       +insert_expand   +path_extra      -toolbar
+eval            +mouse_dec       +statusline      -xterm_clipboard

$ vimx --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +toolbar
+eval            +mouse_dec       +statusline      +xterm_clipboard

vimx fait partie de vim-Enhanced-2: 7.4.1868-1.fc24.x86_64 que vous avez probablement installé

2
DmitrySemenov

Cela fonctionne dans neovim.

Exécutez :checkhealth, vous trouverez quelque chose comme ceci:

## Clipboard (optional)
  - OK: Clipboard tool found: tmux

Sinon, vous devrez peut-être mettre à niveau le tmux vers la dernière version 2.9.

Ajoutez ensuite le code suivant dans '~/config/nvim/init.vim'

set clipboard+=unnamedplus
1
Anthony Zhan