A menudo tengo que pegar algunas cosas en una nueva línea en vim. Lo que suelo hacer es:
o<Esc>p
Lo que inserta una nueva línea y me pone en modo de inserción, luego sale del modo de inserción y finalmente pega.
Tres pulsaciones de teclas. No muy eficiente ¿Alguna idea mejor?
Respuestas:
Poco después
:help p
dice:Lamentablemente, no es más corto que su solución actual a menos que lo haya combinado con algún mapa de teclado como se sugiere en una respuesta diferente. Por ejemplo, puede asignarlo a cualquier tecla (incluso
p
):fuente
: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. (Hurra por:help p
.):nmap p :pu<CR>
póngala en su archivo .vimrc y listo :)Opciones:
1) Use
yy
para tirar de la línea completa (incluido el carácter de final de línea).p
luego pegará la línea en una nueva línea después de la actual yP
( Shift- P) pegará sobre la línea actual.2) Haz un mapeo: entonces solo son una o dos claves:
3) La versión funcional de la asignación (realmente innecesaria, pero solo para completar):
fuente
Puede pegar un búfer en modo de inserción usando
<C-R>
seguido del nombre del búfer para pegar. El búfer predeterminado es"
, por lo que haríaDescubrí que lo uso con
<C-R>"
mucha frecuencia y lo<C-F>
vinculé a mi vimrc:fuente
Esto todavía usa tres pulsaciones de teclas, pero me resulta más fácil que Esc:
o<Alt-p>
Dado que está en modo de inserción después de presionar o, el modificador Alt le permitirá usar un comando como si no lo fuera.
fuente
Usando este complemento: https://github.com/tpope/vim-unimpaired
]p
pastas en la línea de abajo[p
pastas en la línea de arribaventajas:
fuente
tpope/vim-unimpaired
que esto funcione 😉.Personalmente, he mapeado Enter (CR) de esta manera:
... basado en este artículo de Vim Wikia.
De esta manera puedo hacer nuevas líneas directamente desde el modo normal, y combinando esto con querer pegar en una nueva línea a continuación, haría:
También puede omitir k en el nmap anterior, dependiendo de la funcionalidad que prefiera de Enter , por lo que sería
<CR>p
.También he aplicado jj a Esc , lo que también ayudaría en este caso. Esc está demasiado lejos de la fila de inicio por lo significativo 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.
fuente
Si está copiando una línea completa y luego pegando una línea completa, use
Y
para tirar de la línea o líneas, incluido el salto de línea, en primer lugar, yp
para pegar. También puede usarV
, que es el modo de línea visual , en contraste conv
el modo simple para el modo visual.fuente
Tengo mapeo
inoremap jj <ESC>
. Por lo tanto, es fácil insertar una nueva línea conojj
yOjj
y luegop
.así que
ojjp
pegue una nueva línea nueva. tiene un golpe más,o<esc>p
peroojjp
es fácil para mí.fuente
Encontré una solución elegante para esto. Si está colocando el registro de extracción en el portapapeles de su sistema operativo (que de todos modos es genial), con
de lo que puede hacer
o<Ctl-v>
.Además de tener menos trazos, esto mejora en ambos
o<Esc>p
y:pu
porque conserva la sangría: las otras dos opciones comienzan en el carácter cero en la nueva línea.La advertencia es que esto puede o no depender del sistema operativo. Todo lo que sé es que funciona en una versión reciente de OS X, pero el portapapeles es solo una de las muchas formas de obtener un tirón en el portapapeles del sistema operativo.
fuente
Si también desea finalizar en modo de inserción, puede pegar mientras está en modo de inserción usando
CTRL-R "
. https://stackoverflow.com/a/2861909/461834Todavía hay tres pulsaciones de teclas, pero no hay escape, y guarda una pulsación de tecla si desea finalizar la inserción de todos modos.
fuente
Utilizo la siguiente asignación en mi configuración de Neovim:
Una pequeña explicación:
m`
: establece una marca en la posición actual del cursor.o<Esc>p
: cree una nueva línea a continuación y pegue el texto en esta líneaO<Esc>P
: cree una nueva línea arriba y pegue el texto en esta línea``
: coloca el cursor en la posición originalConsulte
:h mark
para obtener más información sobre las marcas en Vim.fuente
Si desea permanecer en el modo de inserción, puede hacer
o ctrl+o p
o
- Insertar modo e ir a la nueva líneactrl+o
- ejecuta un solo comando como en modo normalp
- pegarSon tres pulsaciones de teclas, pero usted permanece en modo de inserción y también
o ctrl+o
es bastante rápido, así que personalmente lo trato como 2.5 pulsaciones de teclas.fuente
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 desea tomar, luego navegar hasta el último carácter al final de la línea antes del inicio del bloque de copia deseado. Luego, cuando desee pegarlo, coloque el cursor al final de la línea debajo de la cual desea pegar el texto y presione p. Si no he estropeado la explicación, esto debería proporcionar el efecto que estás buscando.
fuente