2016-12-12 1 views
2

J'aime la simplicité de composer des commandes qui ont une signification sémantique. Comme, par exemple cib se lit comme une phrase change in brackets - merveilleux.Pourquoi vim utilise-t-il des registres pour presque toutes les commandes?

Mais pourquoi vim doit-il copier l'ancien contenu dans mon presse-papier? Il n'y a nulle part dans cette commande que j'ai suggéré de le copier et le problème est beaucoup plus profond.

dwdiw etc tous copient également dans mon presse-papier/registre. Pourquoi? Il semble que cela abandonne la valeur sémantique de ces commandes et je dirais que c'est un comportement inattendu. Est-ce que j'utilise ces commandes incorrectement ou existe-t-il un moyen de désactiver complètement cette fonction? À l'heure actuelle, je l'ai fait quelques remappages comme ceci:

nnoremap dd "_dd

nnoremap cc "_cc

mais je voudrais pas le faire pour chaque combinaison possible de copie non explicite.

Répondre

6

Par défaut, la plupart des commandes dont vous parlez utilisent le registre sans nom, ". Il semble que vous ayez à faire au remplacement du presse-papier pour toutes ces choses, ce qui peut être un symptôme de réglage clipboard à unnamed ou unnamed_plus.

Pour revenir à la norme, vous pouvez probablement faire set clipboard=, si la sortie de set clipboard? est l'une de ces deux options.

     *'clipboard'* *'cb'* 
'clipboard' 'cb' string (default "autoselect,exclude:cons\|linux" 
          for X-windows, "" otherwise) 
      global 
      {not in Vi} 
      {only in GUI versions or when the |+xterm_clipboard| 
      feature is included} 
    This option is a list of comma separated names. 
    These names are recognized: 

         *clipboard-unnamed* 
    unnamed  When included, Vim will use the clipboard register '*' 
      for all yank, delete, change and put operations which 
      would normally go to the unnamed register. When a 
      register is explicitly specified, it will always be 
      used regardless of whether "unnamed" is in 'clipboard' 
      or not. The clipboard register can always be 
      explicitly accessed using the "* notation. Also see 
      |gui-clipboard|. 

         *clipboard-unnamedplus* 
    unnamedplus A variant of the "unnamed" flag which uses the 
      clipboard register '+' (|quoteplus|) instead of 
      register '*' for all yank, delete, change and put 
      operations which would normally go to the unnamed 
      register. When "unnamed" is also included to the 
      option, yank operations (but not delete, change or 
      put) will additionally copy the text into register 
      '*'. 
      Only available with the |+X11| feature. 
      Availability can be checked with: 
       if has('unnamedplus') 
+1

C'était exactement mon problème, merci! –

1

Je vais vous donner une opinion dissidente, et suggérer que vous utilisez probablement Vim de façon non-idiomatique. Ce comportement n'est en aucun cas inattendu. Utilisez-vous cib pour préparer le collage, de sorte que cib le vissera? Ne faites vibp à la place.

dwdiw etc tous copient également dans mon presse-papier/registre. Pourquoi? Il semble que cela abandonne la valeur sémantique de ces commandes et je dirais que c'est un comportement inattendu.

d puis p est l'idiome Vim normal pour couper-coller (à savoir texte de déplacement). C'est une opération que je fais tous les jours, plusieurs fois par jour, et ce serait vraiment ennuyeux si d n'a pas aussi tiré. Vous semblez penser d est l'équivalent de Del sur d'autres éditeurs de texte; c'est plutôt l'équivalent de ctrl-x (coupé). Pour annuler ceci, vous feriez "_d comme vous l'avez dit; Je trouve que j'en ai rarement besoin.

À titre d'exemple avancé, la sémantique par défaut c et le mode visuel p rendent trivial l'échange de deux objets; par exemple:

J'ai bu toute leur nourriture et mangé tout leur whisky.

Aller à « burent », diw (supprimer le mot et tirer sur ce dernier), allez dans « mangé », viwp (choisir un mot et coller dessus, extraire le contenu précédent), ctrl-o de revenir à l'endroit où "bu" était et P (coller avant le curseur):

Je mangeais toute leur nourriture et buvais tout leur whisky.

(J'ai aussi un plug-in qui définit comme un objet texte « paramètre de fonction », donc j'utiliser le même langage dans le codage si je mélange, ou refactoring, l'ordre des paramètres).

La seule Ce que je veux éviter le plus souvent, c'est coller en mode visuel (pour pouvoir coller plusieurs fois le même contenu); pour cela, j'utilise

xnoremap <expr> P '"_d"'.v:register.'P' 

(à partir de here). Cela remappe seulement P en mode visuel (qui est par ailleurs identique à p en mode visuel). Ni p ni P en mode visuel extérieur yank, donc c'est un non-problème.