184 votes

Comment coller dans une nouvelle ligne avec vim?

Je dois souvent coller des éléments sur une nouvelle ligne dans vim. Ce que je fais habituellement c'est:

 o<Esc>p
 

Ce qui insère une nouvelle ligne et me met en mode insertion, puis quitte le mode insertion et enfin colle.

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

89voto

Bombe Points 34185

Peu de temps après :help p il est écrit:

 :[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, elle n’est pas plus courte que votre solution actuelle, à moins que vous ne la combiniez avec une carte de clavier comme suggéré dans une réponse différente. Par exemple, vous pouvez le mapper sur n’importe quelle clé (même p ):

 :nmap p :pu<CR>
 

66voto

DrAl Points 29528

Options:

1) Utilisez yy pour supprimer toute la ligne (y compris le caractère de fin de ligne). p va ensuite coller la ligne sur une nouvelle ligne après la ligne actuelle et P ( Maj - P ) va coller au-dessus de la ligne actuelle.

2) Faire un mapping: alors c'est seulement une ou deux clés:

 :nmap ,p o<ESC>p
:nmap <F4> o<ESC>p
 

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

 :nmap <F4> :call append(line('.'), @")<CR>

" This one may be a little better (strip the ending new-line before pasting)
:nmap <F4> :call append(line('.'), substitute(@", '\n$', '', ''))<CR>

:help let-register
:help :call
:help append()
:help line()
:help nmap
 

33voto

soulmerge Points 37314

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

 o<C-R>"
 

Je trouve que j'utilise <C-R>" très souvent et que lié à <C-F> dans mon vimrc:

 inoremap <C-F> <C-R>"
 

10voto

miyalys Points 128

Personnellement, j'ai nmapped Entrer comme ceci:

nmap <CR> o<Esc>k

Basée sur cette page à partir de Vim Wiki: http://vim.wikia.com/wiki/Insert_newline_without_entering_insert_mode

De cette façon, je fais des retours à la ligne directement à partir du mode normal, et en combinant cela avec vouloir coller à un retour à la ligne ci-dessous je fais:

<CR>jp

Vous pouvez également écrire à j dans le nmap, selon les fonctionnalités que vous préférez à partir d' Entrer.

J'ai aussi imapped jj pour l'Esc, ce qui devrait également aider dans ce cas. Esc est trop loin de la ligne de départ pour la façon dont il est significatif dans vim.

Pas plus courte que les autres solutions, mais je pense qu'il se sent un peu moins maladroit que certains des autres solutions mentionnées, et il a d'autres avantages.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X