66 votes

Fix Vim + Tmux copier/coller sur le registre sans nom

Lors de l'utilisation de vim à l'intérieur d'une session tmux je ne peux pas copier ou coller le registre sans nom. Aller à un nommé registre fonctionne très bien, mais sans nom ne fonctionne jamais.

L'erreur est:

E353: Nothing in register *

Sans tmux, vim fonctionne très bien avec mon paramètres actuels. Comment puis-je résoudre ce problème afin que je puisse utiliser y puis p sans erreurs et sans en spécifier le registre?

104voto

Chris Johnsen Points 50064

À partir du message d'erreur (Nothing in register *), il apparaît que lorsque vous avez une plaine? p, votre instance de Vim est l'aide de l' * s'inscrire à la place du registre sans nom*. C'est probablement parce que votre clipboard option comprend la valeur unnamed. Lorsqu'il est configuré de cette façon, Vim va utiliser l' * registre, au lieu de le registre sans nom pour copier, de supprimer, de modifier et de mettre opérations par défaut (c'est à dire, sauf si vous spécifiez un autre registre avec un " préfixe, par exemple, "ap de de la a s'inscrire).

*Le registre sans nom est en fait le nom " (double quote). C'est seulement un "sans nom" dans le sens que vous n'avez pas de nom pour l'utiliser (c'est la valeur par défaut). I. e. vous n'avez pas à dire ""p à placer dans le registre sans nom, juste p.

La valeur par défaut de clipboard ne contient pas d' unnamed, de sorte qu'il est probablement en provenance d'un peu de votre configuration (ou un plugin). La commande :verbose set clipboard? va vous montrer le script qui fixe la valeur courante. Si cela est fait dans votre fichier de configuration, vous pouvez ne pas le faire lorsque vous sont en cours d'exécution en vertu de tmux. E. g:

if $TMUX == ''
    set clipboard+=unnamed
endif

Sinon, il peut être possible de laisser les instances de Vim-à l'intérieur-tmux pour accéder à l'interface de sélection/presse-papiers (donc travailler avec l' * vous inscrire et/ou unnamed en clipboard). Si vous utilisez Mac OS X, vous pouvez regarder ma solution wrapper qui re-permet l'accès au presse-papiers pour les processus en cours d'exécution à l'intérieur d'un tmux session. Si vous utilisez un autre système d'exploitation ou du GUI, alors vous aurez besoin de savoir comment Vim feriez normalement parler à la GUI, et pourquoi il ne fonctionne pas (par exemple, mauvais AFFICHAGE de la valeur sous X11, peut-être due à joindre à une session ancienne qui exécute un shell qui a un out-of-date de valeur).

49voto

akofink Points 375

Voici ce qui fonctionne pour moi dans vim/tmux/osx:

  1. Installer Homebrew
  2. Installer rattacher à l'utilisateur de l'espace de noms: brew install reattach-to-user-namespace
  3. dans .vimrc: set clipboard=unnamed
  4. Dire tmux pour utiliser le presse-papiers du système: Dans .tmux.conf: set-option -g default-command "reattach-to-user-namespace -l bash"

Source: https://coderwall.com/p/j9wnfw

4voto

darcyparker Points 870

Le fakeclip plugin rend le presse-papiers registre se comporter comme prévu dans de nombreux terminaux et a un support pour tmux/écran. L'utilisez-vous? Il peut résoudre votre problème.

Ainsi, vous pouvez être intéressé par cette astuce... Il ne s'applique pas à votre question, mais connexes. En fonction du type de système de terminaux/vous êtes en cours d'exécution dans tmux, vous devrez faire quelques ajustements dans votre .tmux.conf. Pour exemple, voici un extrait de mon .tmux.conf sur OS X (avec quelques instructions dans les commentaires):

# To use pbcopy and pbpaste on OS X, get this wrapper and install
#    git clone https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git
#    cd tmux-MacOSX-pasteboard/
#    make reattach-to-user-namespace
#    mv reattach-to-user-namespace /usr/local/bin
# After installing, the default command can be reset to use the 'reattach-to-user-namespace' 
# wrapper that was compiled/installed as descripted above.
set -g default-command "reattach-to-user-namespace -l /bin/bash"
# #Next, create Ctrl-c and Ctrl-v mappings
bind C-c run "tmux save-buffer - | reattach-to-user-namespace pbcopy"
bind C-v run "tmux set-buffer $(reattach-to-user-namespace pbpaste); tmux paste-buffer"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X