Al menos una vez al día tengo la siguiente situación:
A: This line should also replace line X
...
X: This is line should be replaced
Creo que no realizo esa tarea de manera eficiente.
Lo que hago:
- Vaya a la línea A: AG
- Yank línea A: yy
- Ir a la línea X: XG
- Pegar línea A: P
- Mover a la línea anterior: j
- Eliminar línea anterior: dd
Esto tiene la desventaja adicional de que la línea X ahora está en el registro predeterminado, lo cual es molesto si encuentro otra línea que debería reemplazarse con A. Al mover y pegar desde un registro adicional ( "ayy " , aP ) hace que esta simple tarea sea uniforme menos eficiente.
Mis preguntas:
- ¿Perdí un comando Vim incorporado para reemplazar una línea arrancada antes?
- Si no es así, ¿cómo puedo vincular mi propio comando que deja (o restaura) la línea tirada en el registro predeterminado?
:move
y el agujero negro registro (_
) (o, de hecho, sólo registros)Respuestas:
Que haría yo :
aG
Y
xG
Vp
Usted no tiene que salir de modo normal, pero lo hace tirón de la línea. Sin embargo, puede usar
V"0p
lo que siempre pondrá la línea tirada en el paso 2.fuente
Y
es sinónimo deyy
Y
es un sinónimo deyy
, pero sugiero reasignarlo paray$
que coincida conD
yC
.Vp
: seleccione la línea, pegue lo que fue tiradofuente
VP
funciona igual de bien, lo cual es útil porque puede mantener presionada la tecla Mayús durante toda la secuencia.V"0p
, que se pega desde el último registro tirado.V"0p
hace? V entra en modo de línea de línea visual y p es para pegar. ¿Cuáles son "y 0 para las gracias?Para eliminar texto sin afectar los registros normales, puede utilizar el registro de agujero negro
"_
:fuente
d
ydd
usar siempre el agujero negro, yx
yxx
realizar lo que la mayoría de los editores llamarían un "corte" (borrar y guardar en el registro por defecto):noremap x d
noremap xx dd
noremap d "_d
noremap dd "_dd
Sobre la base de las respuestas que sugieren usar
Vp
oVP
pegar sobre una línea, para evitar cambiar el contenido del registro de yank, encuentro que el comando más ergonómico es simplemente:VPY
fuente
fuente
Usaría el modo de línea de comandos (Ex) y haría los siguientes dos comandos
Esto simplemente mueve la línea X justo debajo de A, luego borrando A mueve esa línea hacia arriba
Por ejemplo
fuente
Muévase al inicio de la primera línea.
y, $- copia la línea sin el salto de línea al final
Moverse al inicio de la línea objetivo.
V, p- reemplazar solo una línea de destino
c, c, Ctrlr, 0, Esc- sustituir a la línea de meta con el tirón inicial
Moverse al inicio de la siguiente línea objetivo.
. - repite el comando emitido en 4.2.
Notas:
4.1 es y, $porque si lo hace y, yo Ycopiará el salto de línea y Ctrlr, en 0realidad , agregará el salto de línea debajo de la línea objetivo.
4.2 reemplaza V p, que no funciona con la repetición porque técnicamente la última acción es eliminar, por .lo que solo eliminaría una línea.
Si alguien sabe cómo emitir 'reemplazar línea actual con registro' desde el modo EX (línea de comando), me gustaría saber de usted (y saber dónde encontró la documentación). Puede haber un comando EX repetible que sea más rápido que 4.2 y / o no tenga la advertencia de salto de línea.
fuente
Esto es lo que haría
fuente
Puedes usar esto con el modo visual.
A
GX
Gfuente
También puedes hacer:
Se pueden usar las mismas teclas para tirar / pegar más de una línea.
fuente
Puede utilizar estos comandos en el modo normal:
el
m
comando es param[ove]
, que mueve el número de línea A después del número de línea X, si desea copiar en lugar de mover la línea, utiliceco[py]
. eld
comando es parad[elete]
.Puede mover (copiar usando
co
) un rango de líneas usandofuente
A la luz del comentario reciente de cicld (¡gracias!), Veo que no entendí completamente el problema original. Mover la línea no es apropiado, pero copiar lo es (ya que la línea está tirada). Así que lo revisaría a:
Copie la primera línea (el
:t
comando es un alias para:copy
) después de la línea 20 (la colocará en la línea 21)Elimine la línea 20, colocando la línea eliminada en el registro 'agujero negro' (
_
) (es decir, sin afectar el búfer de yank actual)Como se mencionó en el comentario reciente, esto no afectará la posición actual del cursor.
fuente
fuente
Me resulta más fácil usar el comando Ex para esto; ex. para mover la línea 9 a la 46:
Esto moverá el cursor a la línea 46, moverá la línea 9 debajo de la actual, luego borrará la línea anterior (ya que la línea movida es la actual).
O usando marca (s), usando marca 'a':
fuente
:1m20|.+1d
(mueva la línea 1 a la línea 20 y elimine la siguiente línea, es decir, el texto que estaba en la línea 20 anteriormente). ¡Aunque es la misma idea!A menudo tengo que Y una línea y reemplazarla en varios lugares, cada uno de los cuales tiene un valor diferente (lo que significa que no puedo hacer una expresión regular).
Y para tirar de la línea original deseada
y luego en cada línea que le gustaría reemplazar, VpzeroY
fuente
Simplemente usaría el registro "Agujero negro":
dado:
nnoremap <Cd> "_dd
la solucion seria:
<Cd> aa
fuente