¿Cómo duplico una línea completa en Vim de manera similar a Ctrl+ Den IntelliJ IDEA / Resharper o Ctrl+ Alt+ ↑/ ↓en Eclipse ?
Y
es P
arrendamiento. :)
¿Cómo duplico una línea completa en Vim de manera similar a Ctrl+ Den IntelliJ IDEA / Resharper o Ctrl+ Alt+ ↑/ ↓en Eclipse ?
Y
es P
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
Y
a y$
. (De acuerdo con D
y C
; (pero no es compatible con Vi (a nadie le importa))) Eso incluso se propone en :help Y
.
yj
o yk
, sobre todo porque no doble en un personaje. Además, yk
es una versión hacia atrás que 2yy
no puede hacer, y puede poner el número de líneas para llegar hacia atrás y9j
o y2k
, etc. La única diferencia es que su cuenta debe ser n-1
para un total de n
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 rango 1,.
).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 formulario class xxx
justo después del cursor.Referencia: :help range
, :help :t
, :help :g
, :help :m
y:help :v
:
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 pregunta
YP
o Yp
o yyp
.
Y
Sin 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$
yyP
¡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
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 anteriores
Si quieres otra forma:
"ayy
: Esto almacenará la línea en el búfer a
.
"ap
: Esto pondrá el contenido del búfer a
en 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.
yyp - recuérdalo con "yippee!"
Múltiples líneas con un número en el medio:
y7yp
:.,.+7 copy .+7
: P
Me gusta: Shift+ v(para seleccionar la línea completa de inmediato y permitirle seleccionar otras líneas si lo desea), y, p
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 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
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 :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 .
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 .vimrc
archivo.
nmap <S-C-d> <Esc>Yp
O, para el modo Insertar:
imap <S-C-d> <Esc>Ypa
i
al 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.
imap <S-C-d> <Esc>Ypi
modo de inserción y nmap <S-C-d> <Esc>Yp
en modo normal