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?
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).
Voici ce qui fonctionne pour moi dans vim/tmux/osx:
brew install reattach-to-user-namespace
set clipboard=unnamed
set-option -g default-command "reattach-to-user-namespace -l bash"
Source: https://coderwall.com/p/j9wnfw
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"
Pour ajouter quelques notes tirées de mon expérience sous OSX à la réponse acceptée:
set clipboard=unnamed
et non set clipboard=unnamedplus
$ 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.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à.