vim couper-coller ne fonctionne pas dans Stretch / Debian 9

33

Mis à niveau ici quelques serveurs VM vers Debian 9.

Maintenant, lors de l'utilisation ssh, nous ne pouvons pas copier et coller entre les terminaux distants.

Le curseur semble faire les mouvements et marquer le texte, bien que d'une manière plus amusante / différente que d'habitude, mais rien n'est copié dans le presse-papiers lors de l'exécution de la commande-C / commande-V ou du copier-coller dans le menu respectif .

Nous avons également essayé de faire les mouvements de la souris avec Shift et d'autres combinaisons de clavier, sans résultats positifs.

Cela se produit sous OS / X, à savoir Sierra et El Capitan, et sous Windows, en utilisant également les terminaux mobaXterm.

La situation est due à la conscience de Vim d'avoir une souris.

Suite à d'autres questions dans Stack Overflow, j'ai créé /etc/vim/vimrc.localavec set mouse="r"et set mouse="v; cela n'a pas bien fonctionné.

Enfin mis en place set mouse=""dans le même fichier, avec un succès modéré.

Cependant, cela ne fonctionne pas non plus bien à 100% du temps. Que peut-on faire d'autre?

Rui F Ribeiro
la source
Pourquoi voudriez-vous désactiver la prise en charge de la souris? Sous Windows, je peux très bien copier et coller dans une session de mastic; quel émulateur de terminal utilisez-vous sur Mac?
Alexej Magura
3
Le Terminal normal + le binaire ssh qui vient par défaut; 2 autres collègues de travail se plaignent ... Ce sont des serveurs virtuels sans tête, tous, uniquement en mode texte. Ne pas avoir le copier-coller fonctionner correctement est un gros problème pour nous.
Rui F Ribeiro
Je recommanderais d'utiliser quelque chose comme iTerm2 , je pense que c'est le seul émulateur de terminal que j'ai utilisé en dehors du terme rétro que vous pouvez obtenir dans l'Apple Store, mais je ne me souviens pas si celui-ci supportait le copier-coller sur ssh. Cependant, vous devriez toujours pouvoir copier les sélections d'écran. Cependant, je me souviens à peine d'avoir eu des problèmes lors de la tentative de copie de merde du terminal vers le système, j'ai écrit un tas de fonctions dans mon .zshrc pour aider à le faciliter, mais je ne sais pas si c'est vraiment ce que vous cherchez pour.
Alexej Magura
2
Peut-être que quelqu'un peut déposer une requête pour annuler ce changement (dans Debian?) Pour revenir en mouse=mode.
steffen

Réponses:

37

La solution consiste en fait à définir l'option mouse=asur mouse=r.

Le problème lors de la définition de cela dans la /usr/share/vim/vim80/defaults.vimréponse acceptée, est qu'il sera remplacé à chaque mise à jour. J'ai cherché longtemps et je me suis retrouvé sur celui-ci: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864074

La solution consiste en premier lieu à utiliser des fichiers .vmrc locaux et à les y paramétrer. Vous pouvez donc créer un .vimrc ( ~/.vimrc) local pour chaque utilisateur et y définir vos options. Ou créez-en un /etc/skelafin qu'il soit automatiquement créé pour chaque nouvel utilisateur que vous créez.

Mais lorsque vous utilisez des fichiers .vmrc locaux, vous devez y définir toutes les options, car s'il y a un local .vimrc, le defaults.vimne se charge pas du tout! Et s'il n'y a pas de local, .vimrctous vos paramètres sont écrasés defaults.vim.

Je voulais une configuration globale pour tous les utilisateurs, qui charge les options par défaut, puis ajoute ou écrase les valeurs par défaut avec mes paramètres personnels. Heureusement, il existe une option pour cela dans Debian: le /etc/vim/vimrc.localsera chargé après le /etc/vim/vimrc. Vous pouvez donc créer ce fichier et laisser les valeurs par défaut en cours de chargement, les empêcher d'être chargées à nouveau (à la fin), puis ajouter vos options personnelles:

Veuillez créer le fichier suivant: /etc/vim/vimrc.local

" This file loads the default vim options at the beginning and prevents
" that they are being loaded again later. All other options that will be set,
" are added, or overwrite the default settings. Add as many options as you
" whish at the end of this file.

" Load the defaults
source $VIMRUNTIME/defaults.vim

" Prevent the defaults from being loaded again later, if the user doesn't
" have a local vimrc (~/.vimrc)
let skip_defaults_vim = 1


" Set more options (overwrites settings from /usr/share/vim/vim80/defaults.vim)
" Add as many options as you whish

" Set the mouse mode to 'r'
if has('mouse')
  set mouse=r
endif

(Notez que $VIMRUNTIMEutilisé dans l'extrait ci-dessus a une valeur comme /usr/share/vim/vim80/defaults.vim.)

Si vous souhaitez également activer "l'ancien comportement copier / coller", ajoutez également les lignes suivantes à la fin de ce fichier:

" Toggle paste/nopaste automatically when copy/paste with right click in insert mode:
let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"

inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  return ""
endfunction
I-GaLaXy-I
la source
4
Ce devrait être la réponse acceptée. De plus, d'après votre rapport de bogue lié, je pense que nous pouvons nous en sortir source $VIMRUNTIME/defaults.vim.
Alasdair
1
Enfin réussi à déployer ce, superbe, excellent travail! +1
Rui F Ribeiro
2
Fonctionne toujours dans Debian 10, en utilisant uniquement la source /usr/share/vim/vim81/defaults.vim
Rui F Ribeiro
26

Une façon de couper vim de la conscience de la souris semble être de commenter la configuration de la souris.

Dans /usr/share/vim/vim80/defaults.vimJ'ai commenté la détection spécifique de la souris comme dans:

" In many terminal emulators the mouse works just fine.  By enabling it you
" can position the cursor, Visually select and scroll with the mouse.
"if has('mouse')
"  set mouse=r
"endif

(dans ces fichiers de configuration vim, "lance un commentaire).

Le changement nous a permis de copier et coller à nouveau sans aucun problème.

Je suis d'accord avec les commentaires, ce n'est pas la solution idéale, car il est en effet écrasé dans toute mise à jour à moins que le fichier de configuration soit protégé (ou détourné). À l'époque, et en raison des spécificités d'une version du package ou de la configuration des serveurs sur lesquels je travaillais, c'était la seule qui fonctionnait. En tant que tel, je laisse cette réponse ici, et elle ne devrait être utilisée qu'en dernier recours .

Rui F Ribeiro
la source
2
OMI, c'est une mauvaise réponse! Encourager les utilisateurs à modifier un fichier géré par la gestion des packages est susceptible de casser les choses de manière inattendue à l'avenir. @ La réponse I-GaLaXy-I est préférable.
Jeremy Davis
1
@JeremyDavis Je suis d'accord avec vous que ce n'est pas la meilleure solution. À l'époque, c'était le seul qui fonctionnait, pour une raison inconnue, et j'ai essayé plusieurs alternatives. Cependant, si plus d'une personne me dit maintenant que l'autre solution fonctionne, je l'accepte comme la bonne réponse. J'ai utilisé des détournements à l'époque, et le fichier de configuration n'était pas écrasé, mais ce n'est pas non plus une solution idéale.
Rui F Ribeiro
11

La documentation Vim pour l' mouseoption indique

La gestion xterm des boutons de la souris peut toujours être utilisée en maintenant la touche Maj enfoncée.

Stefan
la source
Merci pour ça. J'utilise Vim depuis des années et je n'étais pas au courant de cette fonctionnalité. J'ai modifié votre question pour incorporer davantage de fonctionnalités de mise en forme disponibles. Bienvenue sur Unix et Linux !
Anthony G - justice pour Monica
1
Le problème est que j'utilise Terminal sous Mac et mes opérateurs putty / mobaXterm sous Windows ... pas xterm
Rui F Ribeiro
3

Vous pouvez désactiver cela sans modifier les fichiers système en créant /etc/vimrc.localet en insérant les éléments suivants:

set mouse=
Geoffrey
la source
En version bêta, cela n'a pas fonctionné de manière cohérente, vérifiez-le à nouveau, merci.
Rui F Ribeiro
2
Cela ne fonctionne pas.
LtWorf
Voir la réponse de I-GaLaXy-I ci-dessus. Vous devez importer explicitement defaults.vim et empêcher son importation.
richard
Cela fonctionne très bien pour moi aussi, bien que je l'ai combiné avec la réponse de @ I-GaLaXy-I (c'est-à-dire édité / créé /etc/vim/vimrc.local)
Jeremy Davis
a bien fonctionné pour moi dans un conteneur debian 9 ... il suffit de le mettre dans ~ / .vimrc
Scott Stensland
1

Beaucoup de gens ont suggéré :set mouse=amais j'ai trouvé que seul le :set mouse=rcopier-coller est activé dans Vim sur Debian 9. Bonne chance!

David Yeager
la source