¿Cómo duplicar una línea completa en Vim en Eclipse?


1624

¿Cómo duplico una línea completa en Vim de manera similar a Ctrl+ Den IntelliJ IDEA / Resharper o Ctrl+ Alt+ / en Eclipse ?


49
¿La gente ya no ejecuta vimtutor? Esto es probablemente dentro de los primeros cinco minutos de aprender a usar Vim.
dash-tom-bang

131
¿Te gustaría duplicar esta línea? Yes Parrendamiento. :)
Stavr00

3
FWIW He realizado vimtutor una docena de veces en los últimos 2 meses y este concepto no está cubierto. Indica cómo hacer "dd" y "v - navegar - y" seguido de "p". No indica cómo copiar una sola línea sin eliminarla como se solicita aquí.
danielson317

Respuestas:


2768

yyo Ypara copiar la línea (nemotécnica: Y ANK )
o
dda d ELETE de la línea (copias Vim lo que ha eliminado en un portapapeles como "registro", como un corte de operación)

entonces

ppara p astar el texto copiado o eliminado después de la línea actual
o
Ppara p aste el texto copiado o eliminado antes de la línea actual


129129
Un excelente punto. Sin embargo, por alguna razón, encuentro que golpear dos veces es más rápido para mí que SHIFT-y
Mark Biek,

25
@camflan Creo que la Y debería ser "copiar desde el cursor hasta el final"
Dzung Nguyen

42
y 2yy se pueden usar para copiar 2 líneas (y para cualquier otra n)
Amir Ali Akbari

55
@nXqd: Sí, un gran porcentaje de usuarios se asigna Ya y$. (De acuerdo con Dy C; (pero no es compatible con Vi (a nadie le importa))) Eso incluso se propone en :help Y.
Aaron Thoma

11
Para copiar dos líneas, es incluso más rápido para ir solo yjo yk, sobre todo porque no doble en un personaje. Además, ykes una versión hacia atrás que 2yyno puede hacer, y puede poner el número de líneas para llegar hacia atrás y9jo y2k, etc. La única diferencia es que su cuenta debe ser n-1para un total de nlíneas, pero su cabeza puede aprender eso de todas formas.
zelk

406

Modo normal: ver otras respuestas.

El ex camino:

  • :t. duplicará la línea,
  • :t 7 lo copiará después de la línea 7,
  • :,+t0copiará la línea actual y la siguiente al comienzo del archivo ( ,+es un sinónimo del rango .,.+1),
  • :1,t$copiará líneas desde el principio hasta la posición del cursor hasta el final ( 1,es sinónimo del rango 1,.).

Si necesita moverse en lugar de copiar, use en :mlugar de :t.

Esto puede ser realmente poderoso si lo combina con :go :v:

  • :v/foo/m$ moverá todas las líneas que no coincidan con el patrón "foo" al final del archivo.
  • :+,$g/^\s*class\s\+\i\+/t.copiará todas las líneas posteriores del formulario class xxxjusto después del cursor.

Referencia: :help range, :help :t, :help :g, :help :my:help :v


1
Cuando presiona :en modo visual, se transforma a '<,'>modo que preselecciona el rango de línea que abarca la selección visual. Entonces, en modo visual, :t0copiará las líneas al principio.
Benoit

1
Para el registro: cuando escribe dos puntos (:) ingresa al modo de línea de comandos donde puede ingresar comandos Ex. vimdoc.sourceforge.net/htmldoc/cmdline.html Los comandos Ex pueden ser realmente potentes y concisos. Las soluciones yyp son comandos de "Modo normal". Si desea copiar / mover / eliminar una línea lejana o un rango de líneas, un comando Ex puede ser mucho más rápido.
Niels Bom

77
No se ha votado negativamente debido a un problema con la respuesta como tal (aunque no funcionaría para mi situación, no tengo idea del número de línea que quiero duplicar) sino porque REALMENTE no debería ser la respuesta superior / aceptada para esto pregunta comúnmente buscada.
mjaggard

99
@mjaggard: las respuestas aceptadas siempre están en la parte superior, independientemente de su puntaje. Sí, agregué esa respuesta como complemento, y parece que se adapta bien al OP.
Benoit

77
:t.es la respuesta exacta a la pregunta
Burak Erdem

294

YPo Ypo yyp.


YSin embargo, generalmente se reasigna a y$(tirar (copiar) hasta el final de la línea (desde la posición actual del cursor, no al principio de la línea)). Con esta línea en .vimrc::nnoremap Y y$
Aaron Thoma

1
No te olvides de pobre viejoyyP
icc97

253

copiar y pegar en vim

¡No hay nada más simple que esto! Desde el modo normal:

yy

luego vaya a la línea en la que desea pegar y

p

34
¿Qué usaste para hacer el gif?
Zoltán

44
@ Zoltán puedes usar LiceCap, que es de tamaño pequeño
onmyway133


44

Hacer esto:

Primero, yycopiar la línea actual y luego ppegar.


20
No escribas el espacio.
Niels Bom

1
Sí, si el cursor está al final de la línea y escribe el espacio como se muestra, duplicará la línea que tiró 2 líneas debajo de la línea que tiró.

44

Si quieres otra forma:

"ayy: Esto almacenará la línea en el búfer a.

"ap: Esto pondrá el contenido del búfer aen el cursor.

Hay muchas variaciones en esto.

"a5yy: Esto almacenará las 5 líneas en el búfer a.

Consulte " Archivos de ayuda de Vim para más diversión.


Gracias, usé esto como un enlace: map <Leader> d "ayy" ap
frbl

39

yyp - recuérdalo con "yippee!"

Múltiples líneas con un número en el medio:

y7yp


17
7yy es equivalente a y7y y probablemente sea más fácil de recordar cómo hacerlo.
graywh

10
y7yp (o 7yyp) rara vez es útil; el cursor permanece en la primera línea copiada para que p pegue las líneas copiadas entre la primera y la segunda línea de la fuente. Para duplicar un bloque de líneas, use 7yyP
Nefrubyr

@Nefrubyr o :.,.+7 copy .+7: P
DarkWiiPlayer

23

yyp - pegar después

yyP - pegar antes


66
Como la línea se está duplicando, el resultado final del contenido es el mismo.
Acumenus

44
@ABB Sin embargo, hay una diferencia en miniatura aquí: en qué línea caerá el cursor.
Mikk

12

Me gusta: Shift+ v(para seleccionar la línea completa de inmediato y permitirle seleccionar otras líneas si lo desea), y, p


11

También puede probar <Cx> <Cl>, que repetirá la última línea desde el modo de inserción y le traerá una ventana de finalización con todas las líneas. Funciona casi como <Cp>


Esto es muy útil, pero para evitar tener que presionar muchas teclas, lo he asignado a solo CTRL-L, este es mi mapa: inoremap ^ L ^ X ^ L
Jorge Gajon

11

Otra opción sería ir con:

nmap <C-d> mzyyp`z

le da la ventaja de preservar la posición del cursor.


10

Para alguien que no conoce vi, algunas respuestas anteriores pueden confundirlo con frases como "pegar ... después / antes de la línea actual ".
En realidad es "pegar ... después / antes del cursor ".

yyo Ypara copiar la línea
o
ddpara eliminar la línea

entonces

ppara pegar el texto copiado o eliminado después del cursor
o
Ppara pegar el texto copiado o eliminado antes del cursor


Para obtener más enlaces de teclas, puede visitar este sitio: vi Lista completa de enlaces de teclas


3

1 gotcha: cuando usas "p" para poner la línea, la pone después de la línea en la que está el cursor, así que si quieres agregar la línea después de la línea que estás tirando, no muevas el cursor hacia abajo una línea antes de poner la nueva línea.


44
o use P mayúscula - ponga antes
Ghoti

3

El valor predeterminado es yyp, pero he estado usando este nuevo enlace durante un año más o menos y me encanta:

" set Y to duplicate lines, works in visual mode as well. nnoremap Y yyp vnoremap Y y`>pgv


3

Sé que llego tarde a la fiesta, pero lo que sea; Tengo esto en mi .vimrc:

nnoremap <C-d> :copy .<CR>
vnoremap <C-d> :copy '><CR>

el :copycomando simplemente copia la línea seleccionada o el rango (siempre líneas enteras) debajo del número de línea dado como argumento.

En modo normal, lo que hace es copy . copiar esta línea justo debajo de esta línea .

Y en modo visual se convierte en una '<,'> copy '> copia desde el inicio de la selección hasta el final de la selección hasta la línea debajo del final de la selección .


1
↑↑ mejor respuesta aquí!

2

Para aquellos que comienzan a aprender vi, aquí hay una buena introducción a vi al enumerar los comandos vi lado a lado con el movimiento típico del cursor del editor de la GUI de Windows y las teclas de acceso directo. Enumera todos los comandos básicos, incluidos yy(copiar línea) y p(pegar después) o P(pegar antes).

vi (Vim) para usuarios de Windows


1

Si desea duplicar una línea y pegarla inmediatamente debajo del me gusta actual, al igual que en Sublime Ctrl+ Shift+ D, puede agregar esto a su .vimrcarchivo.

nmap <S-C-d> <Esc>Yp

O, para el modo Insertar:

imap <S-C-d> <Esc>Ypa


Sin embargo, esto deja el modo de inserción, y solo agregar ial final para volver a ingresarlo se rompe undo, por lo que la solución para duplicar líneas en el modo de inserción no es tan trivial como parece.
DarkWiiPlayer

Esto funciona perfectamente bien para mí: imap <S-C-d> <Esc>Ypi modo de inserción y nmap <S-C-d> <Esc>Ypen modo normal
jedi

0

Me gusta usar este mapeo:

:nnoremap yp Yp

porque hace que sea consistente usarlo junto con el YPcomando nativo .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.