Eliminar en Vim y luego pegar sin nueva línea

11

Muchas veces en vim me gustaría eliminar una línea por completo, así que uso dd. Sin embargo, luego necesito pegar esa línea en otra posición dentro de una línea, pero esto inserta una nueva línea antes de pegar, por lo tanto, me resulta muy difícil obtener el resultado deseado. Por ejemplo,

while( pasteInHere )
{
    cin >> n; // Delete this line completely with dd
}

cuando hago esto con el código anterior obtengo:

while( pasteInHere )
cin >> n; // Delete this line completely with dd
{
}

que está muy lejos del resultado que quiero ... ¿cómo puedo suprimir este comportamiento de nueva línea o utilizar otro método que lo haga de manera muy eficiente? No creo que d $ sea bueno porque no solo tengo que ir al comienzo de la línea, sino que si quiero eliminar la línea vacía también necesito eliminarla en otro registro, ¡siento que debería haber una manera más fácil! Gracias.

fYre
fuente
1
no es un duplicado, ya que dije que quiero una manera más eficiente que ir al principio de la línea, también quiero eliminar la línea completa con el carácter de nueva línea ... no solo el contenido de la línea
fYre
Oh, ahora entiendo a qué te refieres. Simplemente no estaba muy claro para mí lo que intentabas lograr.
EvergreenTree
1
0Deliminar línea excepto salto de línea. Y que gJunir líneas. Ahora puede poner el texto sin línea de corte y sin línea vacía.
Alex Kroll

Respuestas:

9

Puede ir a cualquier parte de la línea sobre la línea que desea eliminar, luego presionar JDy pegar pen el punto deseado.

  • June las dos líneas y lo mueve al comienzo del texto que desea eliminar. Esto elimina un carácter de nueva línea y la sangría de la línea que desea mover.
  • D elimina de la posición actual del cursor al final de la línea, pero conserva el carácter de nueva línea.

Sugerencia: puede usar :pusi eliminó Do eliminó y$y desea pegar con una nueva línea.

Hajo
fuente
3

No es realmente más simple, pero es un poco más eficiente, y también puede crear mapas en modo normal para ambas secuencias:

  • tirando: ve a la línea que quieres mover, luego ^D"_dd
  • pegar: vaya a la palabra que desea reemplazar, luego viwp
lcd047
fuente
2

Puede lograr algo que funcione bastante bien con un imap. Agregue lo siguiente a su vimrc:

inoremap <c-a> <c-r>1<esc>k$Jxi

Esto creará una asignación para CTRL-apegar el último texto eliminado (con ddo similar). Si lo prefiere, puede usar una clave diferente para el mapeo.

Referencias

:h i_CTRL-R
:h quote1
:h J
Karl Yngve Lervåg
fuente
1

Esto también se me ocurre un poco, nunca pensé optimizarlo antes, pero este mapeo funciona:

nmap dil ^d$

diles "de eliminación en línea", similar a diw, di", etc.

flukus
fuente
1

Pegar sin nueva línea

Ponga esto en su archivo .vimrc:

" Paste yanked line without line breaks before/after cursor position
nnoremap gP i<CR><Esc>PkJxJx
nnoremap gp a<CR><Esc>PkJxJx

Ejemplo:

<span style="color:">danger</span>

Ahora puede escribir gppara insertar #D51B3Fdespués color:mientras mi cursor está :en modo Normal.

Yank sin nueva línea

Use la respuesta de flukus:

" Delete current line without yanking the line breaks
nnoremap dil ^d$

como acrónimo de eliminar línea interna . Esto también elimina la sangría principal.

trebucherry
fuente
0

Puede seleccionar el texto que desea copiar presionando vy luego llevarlo al búfer presionando yy luego pegarlo en cualquier lugar p. No inserta ninguna línea nueva.

Varun Agarwal
fuente
Es cierto, pero esto todavía deja una línea en blanco.
muru