Comment coller une nouvelle ligne avec vim?

Je dois souvent coller des choses sur une nouvelle ligne dans vim. Ce que je fais habituellement est:

op 

Qui insère une nouvelle ligne et me place en mode insertion, quitte le mode insertion et enfin colle.

Trois frappes. Pas très efficace De meilleures idées?

Peu après :help p il dit:

 :[line]pu[t] [x] Put the text [from register x] after [line] (default current line). This always works |linewise|, thus this command can be used to put a yanked block as new lines. :[line]pu[t]! [x] Put the text [from register x] before [line] (default current line). 

Malheureusement, ce n’est pas plus court que votre solution actuelle, à moins que vous ne l’ayez combiné avec une carte de clavier comme suggéré dans une réponse différente. Par exemple, vous pouvez l’associer à n’importe quelle clé (même p ):

 :nmap p :pu 

Options:

1) Utilisez yy pour retirer toute la ligne (y compris le caractère de fin de ligne). p va alors coller la ligne sur une nouvelle ligne après celle en cours et P ( ShiftP ) va coller au-dessus de la ligne en cours.

2) Faire un mapping: alors ce ne sont que des clés:

 :nmap ,p op :nmap  op 

3) La version de fonction du mapping (inutile vraiment, mais juste pour être complet):

 :nmap  :call append(line('.'), @") " This one may be a little better (ssortingp the ending new-line before pasting) :nmap  :call append(line('.'), substitute(@", '\n$', '', '')) :help let-register :help :call :help append() :help line() :help nmap 

Vous pouvez coller un tampon en mode insertion en utilisant suivi du nom du tampon à coller. Le tampon par défaut est " , donc vous feriez

 o" 

J’ai constaté que j’utilisais très souvent " et que je liais cela à dans mon vimrc:

 inoremap  " 

Cela utilise toujours trois frappes, mais je trouve cela plus facile que Esc:

o

Puisque vous êtes en mode insertion après avoir appuyé sur o, le modificateur Alt vous permet d’utiliser une commande comme si vous ne l’aviez pas été.

Personnellement, j’ai choisi Enter (CR) comme ceci:

 nmap  ok 

… basé sur cet article de Vim Wikia.

De cette façon, je peux créer de nouvelles lignes directement à partir du mode normal, et en combinant cela avec le fait de vouloir coller dans une nouvelle ligne ci-dessous, je le ferais:

 jp 

Vous pouvez également sauter k dans le nmap ci-dessus, en fonction de la fonctionnalité que vous préférez à partir de Enter , ce serait donc simplement p .

J’ai également imité jj en Esc , ce qui serait également utile dans ce cas. Esc est trop loin de la rangée de départ pour son importance dans vim.

Pas plus court que les autres solutions, mais je pense qu’il est moins encombrant que certains d’entre eux et qu’il a d’autres usages.

Si vous copiez une ligne entière, puis que vous collez une ligne entière, utilisez Y pour saisir la ou les lignes, y compris le saut de ligne, et p pour coller. Vous pouvez également utiliser V , qui est le mode de ligne visuelle, contrairement au mode v pour le mode visuel.

J’ai un mapping inoremap jj . Il est donc facile d’insérer une nouvelle ligne avec ojj et Ojj , puis p .

Donc, ojjp coller une nouvelle ligne. il a un coup de plus alors op mais ojjp est facile pour moi.

J’ai trouvé une solution élégante à cela. Si vous mettez le registre yank dans le presse-papiers de votre OS (ce qui est génial quand même), avec

 set clipboard+=unnamed 

que vous pouvez faire o .

En plus d’être moins de coups, cela améliore à la fois op et :pu car il préserve l’indentation: les deux autres options vous lancent au caractère zéro sur la nouvelle ligne.

La mise en garde est que cela peut ou peut ne pas dépendre du système d’exploitation. Tout ce que je sais, c’est que cela fonctionne sur la version récente d’OS X, mais le presse-papiers n’est que l’une des nombreuses façons d’obtenir du contenu dans le presse-papiers du système d’exploitation.

Si vous souhaitez également terminer en mode insertion, il est possible de coller en mode insertion avec CTRL-R " . https://stackoverflow.com/a/2861909/461834

Encore trois frappes, mais pas d’échappée, et vous enregistrez une frappe si vous souhaitez terminer en insertion de toute façon.

Cette solution ne semble s’appliquer que lorsque le bloc de texte copié commence sur une nouvelle ligne (par opposition à un extrait de texte quelque part dans une ligne), mais vous pouvez toujours commencer votre copie sur le dernier caractère que vous voulez saisir, puis naviguer au dernier caractère à la fin de la ligne avant le début du bloc de copie souhaité. Ensuite, lorsque vous souhaitez le coller, placez le curseur à la fin de la ligne sous laquelle vous voulez coller votre texte et appuyez sur p. Si je n’ai pas foiré l’explication, cela devrait vous donner l’effet recherché.