web-dev-qa-db-fra.com

Correction de Vim + Tmux yank / coller sur un registre sans nom

Lors de l'utilisation de vim dans une session tmux, je ne peux ni copier ni coller dans le registre sans nom. Accéder à un registre nommé fonctionne bien, mais un nom anonyme ne fonctionne jamais.

L'erreur est:

E353: Nothing in register *

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

65
Jason

Dans le message d’erreur (Nothing in register *), il apparaît que lorsque vous effectuez une? p, votre instance de Vim utilise le registre * au lieu du registre non nommé*. Ceci est probablement dû au fait que votre (option clipboard) inclut la valeur unnamed. Lorsqu'il est configuré de cette manière, Vim utilisera le registre * au lieu du registre non nommé pour les opérations yank, delete, change et put (par exemple, à moins que vous ne spécifiiez un autre registre avec un préfixe "; par exemple, "ap à placer à partir du registre a.

* Le registre non nommé est en réalité nommé " (guillemet double). Il est seulement "non nommé" dans le sens où il n'est pas nécessaire de le nommer pour l'utiliser (c'est la valeur par défaut). C'est à dire. vous n'êtes pas obligé de dire ""p pour mettre dans le registre non nommé, mais simplement p.

La valeur par défaut de clipboard ne contient pas unnamed, elle provient donc probablement d'une partie de votre configuration (ou d'un plugin). La commande :verbose set clipboard? vous montrera le script qui définit la valeur actuelle. Si cela est fait dans votre fichier de configuration, vous voudrez peut-être ne pas le faire lorsque vous exécuterez sous tmux. Par exemple:

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

Alternativement, il peut exister un moyen de laisser des instances de Vim-inside -tmux accéder à la sélection/au Presse-papiers de l’IUG (utilisez donc le registre * et/ou unnamed dans clipboard). Si vous utilisez Mac OS X, vous voudrez peut-être consulter mon encapsuleur de solution de contournement qui réactive l'accès au Presse-papiers pour les processus exécutés dans une session tmux. Si vous utilisez un autre système d'exploitation ou une autre interface graphique, vous devrez alors savoir comment Vim communiquera normalement avec l'interface graphique et pourquoi cela ne fonctionne pas (par exemple, une valeur d'affichage incorrecte sous X11, probablement en raison d'une connexion à une ancienne session en cours d'exécution). Shell ayant une valeur obsolète).

98
Chris Johnsen

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

  1. Installer Homebrew
  2. Installez l'espace de nommage Reattach-to-User-Namespace: brew install reattach-to-user-namespace
  3. dans .vimrc: set clipboard=unnamed
  4. Dites à tmux d'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

49
akofink

Le plug-in fakeclip rend le registre du presse-papiers se comporter comme prévu dans de nombreux terminaux et prend en charge tmux/screen. Est-ce que vous l'utilisez? Cela peut résoudre votre problème.

De plus, cette astuce pourrait vous intéresser… Elle ne s'applique pas à votre question, mais est liée. En fonction du type de système/terminal sur lequel vous utilisez tmux, vous aurez peut-être besoin de quelques modifications dans votre .tmux.conf. Par exemple, voici un extrait de mon .tmux.conf sous 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"
4
darcyparker

Pour ajouter quelques notes tirées de mon expérience sous OSX à la réponse acceptée:

  • Assurez-vous de faire set clipboard=unnamed et non set clipboard=unnamedplus
  • Je devais tuer mon serveur tmux ($ killall tmux ou $ tmux kill-session -a). Le rechargement des fichiers de configuration tmux a montré que default-command était défini mais n’a pas donné l’accès à vim au presse-papiers du système.
0
nbwoodward

Réponse tardive, mais il se peut également que votre .tmux.conf contienne la ligne suivante:

set -g set-clipboard off

combiné avec un .vimrc contenant

set clipboard=unnamed

cela conduira vim à utiliser un presse-papier qui n’est pas là.

0
Beat Richartz