2009-08-28 23 views
93

A menudo tengo que pegar algunas cosas en una nueva línea en vim. Lo que suelo hacer es:¿Cómo pegar una nueva línea con vim?

o<Esc>p 

que inserta una nueva línea y me pone en el modo de inserción, que sale del modo de inserción, y finalmente pastas.

Tres teclas. No muy eficiente. Alguna mejor idea?

+3

3 pulsaciones de tecla no es eficiente? – gtd

+34

1 o 2 sería mejor :) ¿Por qué usar vim si no es para la máxima eficiencia? –

Respuesta

41

Poco después :help p Dice:

:[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). 

Por desgracia, no es más corta que la solución actual a menos que se lo combinó con un poco de mapa de teclado como se sugiere en una respuesta diferente. Por ejemplo, puede asignar a una tecla cualquiera (incluso p):

:nmap p :pu<CR> 
+1

Lo sé, y lo uso, pero no es lo que estoy pidiendo, porque a veces lo que está copiando simplemente no tiene ningún LF en él. Si hubiera un comando "pegar en una nueva línea", funcionaría independientemente del contenido que está a punto de pegar, por lo que no tendría que pensarlo. –

+1

Bien, ': pu [t]' colocará el texto en una nueva línea después de la línea actual, ': pu [t]!' Colocará el texto en una nueva línea antes de la línea actual. Editaré mi respuesta en consecuencia. (Hooray para ': help p'.) – Bombe

+1

No es realmente mejor que mi solución actual, pero creo que es la mejor respuesta a mi pregunta. –

2

Si va a copiar una línea entera a continuación, pegar una línea entera, utilice Y dar un tirón a la línea o líneas, incluyendo salto de línea, en el primer lugar, y p para pegar. También puede usar V, que es el modo visual línea, en contraste con el v simple para el modo visual.

+2

El problema es que a veces simplemente no quiere copiar una Toda la línea ... Me gustaría una solución que funcione si he copiado diez líneas o dos palabras. –

34

Opciones:

1) Use yy dar un tirón a la línea entera (incluyendo el carácter de fin de línea). p pegará la línea en una nueva línea después de la actual y P (Shift - P) pegará encima de la línea actual.

2) Hacer un mapeo: entonces es sólo una o dos teclas:

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

3) La versión en función de la asignación (realmente innecesario, sino simplemente para la corrección):

: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 
+0

Bueno, supongo que haré un mapeo. Solo esperaba que pudiera haber una solución estándar: -/ ¡Gracias por tu respuesta! –

+1

@AI: Usar el ', p' (',' se mapea como mi ) es la mejor solución en mi opinión. Incluso proporcionó una función fácil de usar. :) ¡Excelente! –

20

Puede pegar un búfer en el modo de inserción usando <C-R> seguido del nombre del búfer para pegar. El búfer predeterminado es ", por lo que haría

o<C-R>" 

encontré que yo uso <C-R>" muy a menudo y obligado a que <C-F> en mi vimrc:

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

Gracias, eso es un consejo útil. –

+0

esto es para mí la mejor solución – Santi

7

Personalmente he nmapped Intro (CR) así:

nmap <CR> o<Esc>k 

... basado en this Vim no registrado una rticle.

De esta manera puedo hacer saltos de línea directamente desde el modo normal, y combinando esto con ganas de pegar a una nueva línea de abajo que lo haría:

<CR>jp 

También podría saltar k en el nmap anteriormente, dependiendo de qué funcionalidad prefiera Ingrese, por lo que sería <CR>p.

También he imitado jj a Esc, que también podría ayudar en este caso. Esc está demasiado lejos de la fila de inicio como lo importante que es en vim.

No es más corto que las otras soluciones, pero creo que se siente menos torpe que algunas de ellas, y también tiene otros usos.

2

Tengo el mapeo inoremap jj <ESC>. Por lo tanto, es fácil insertar una nueva línea con ojj y Ojj y luego p.

so ojjp pegar nueva a nueva línea. tiene un trazo más que o<esc>p pero ojjp es fácil para mí.

0

Esta solución solo parece aplicarse cuando el bloque de texto copiado comienza en una nueva línea (en lugar de tomar un fragmento de texto en algún lugar dentro de una línea), pero siempre puede comenzar su copia en el último carácter que desee agarre, luego navegue hasta el último carácter al final de la línea antes del inicio de su bloque de copia deseado. Luego, cuando desee pegarlo, coloque el cursor al final de la línea en la que desea pegar el texto y presione p. Si no he confundido la explicación, esto debería proporcionar el efecto que estás buscando.

10

Esto todavía utiliza tres pulsaciones de teclas, pero me resulta más fácil que Esc:

o<Alt-p>

ya que estás en el modo de inserción después de golpear o, el modificador Alt le permitirá utilizar un comando como si no estabas

+0

Manera bastante útil cuando intentas el tirón sth que cortas dentro de la línea con "d $" en una nueva línea –

1

Encontré una solución elegante para esto. Si va a colocar el registro tirón en el portapapeles de su sistema operativo (que es genial de todos modos), con

set clipboard+=unnamed 

de lo que puede hacer o<Ctl-v>.

Además de tener menos golpes, esto mejora tanto en o<Esc>p como en :pu porque conserva la sangría: las otras opciones comienzan con el carácter cero en la nueva línea.

La advertencia es que esto puede o no ser dependiente del sistema operativo. Todo lo que sé es que funciona en la versión más reciente de OS X, pero el portapapeles es solo una de las muchas formas de arrancar el portapapeles del sistema operativo.

1

Si también desea terminar en el modo de inserción, es posible pegar mientras está en modo insertar usando CTRL-R ". https://stackoverflow.com/a/2861909/461834

Todavía tres teclas, pero no hay escapatoria, y guarda una pulsación de tecla si desea terminar insertando de todos modos.

+0

Agradable, gracias –

Cuestiones relacionadas