¿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
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.
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.
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
¡No hay nada más simple que esto! Desde el modo normal:
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
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>
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
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.
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 .
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).
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.
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 .
Y
esP
arrendamiento. :)Respuestas:
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
fuente
Y
ay$
. (De acuerdo conD
yC
; (pero no es compatible con Vi (a nadie le importa))) Eso incluso se propone en:help Y
.yj
oyk
, sobre todo porque no doble en un personaje. Además,yk
es una versión hacia atrás que2yy
no puede hacer, y puede poner el número de líneas para llegar hacia atrásy9j
oy2k
, etc. La única diferencia es que su cuenta debe sern-1
para un total den
líneas, pero su cabeza puede aprender eso de todas formas.Modo normal: ver otras respuestas.
El ex camino:
:t.
duplicará la línea,:t 7
lo copiará después de la línea 7,:,+t0
copiará 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 rango1,.
).Si necesita moverse en lugar de copiar, use en
:m
lugar de:t
.Esto puede ser realmente poderoso si lo combina con
:g
o: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 formularioclass xxx
justo después del cursor.Referencia:
:help range
,:help :t
,:help :g
,:help :m
y:help :v
fuente
:
en modo visual, se transforma a'<,'>
modo que preselecciona el rango de línea que abarca la selección visual. Entonces, en modo visual,:t0
copiará las líneas al principio.:t.
es la respuesta exacta a la preguntaYP
oYp
oyyp
.fuente
Y
Sin embargo, generalmente se reasigna ay$
(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$
yyP
¡No hay nada más simple que esto! Desde el modo normal:
luego vaya a la línea en la que desea pegar y
fuente
yy
tirará de la línea actual sin eliminarla
dd
borrará la línea actual
p
será
put
una línea tomada por cualquiera de los métodos anterioresfuente
Hacer esto:
Primero, yycopiar la línea actual y luego ppegar.
fuente
Si quieres otra forma:
"ayy
: Esto almacenará la línea en el búfera
."ap
: Esto pondrá el contenido del búfera
en el cursor.Hay muchas variaciones en esto.
"a5yy
: Esto almacenará las 5 líneas en el búfera
.Consulte " Archivos de ayuda de Vim para más diversión.
fuente
yyp - recuérdalo con "yippee!"
Múltiples líneas con un número en el medio:
y7yp
fuente
:.,.+7 copy .+7
: Pyyp - pegar después
yyP - pegar antes
fuente
Me gusta: Shift+ v(para seleccionar la línea completa de inmediato y permitirle seleccionar otras líneas si lo desea), y, p
fuente
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>
fuente
Otra opción sería ir con:
le da la ventaja de preservar la posición del cursor.
fuente
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
fuente
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.
fuente
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
fuente
Sé que llego tarde a la fiesta, pero lo que sea; Tengo esto en mi .vimrc:
el
:copy
comando 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 .fuente
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
fuente
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
.vimrc
archivo.nmap <S-C-d> <Esc>Yp
O, para el modo Insertar:
imap <S-C-d> <Esc>Ypa
fuente
i
al final para volver a ingresarlo se rompeundo
, por lo que la solución para duplicar líneas en el modo de inserción no es tan trivial como parece.imap <S-C-d> <Esc>Ypi
modo de inserción ynmap <S-C-d> <Esc>Yp
en modo normalMe gusta usar este mapeo:
porque hace que sea consistente usarlo junto con el
YP
comando nativo .fuente