Eliminare in Vim e quindi incollare senza nuova riga


11

Molte volte in vim vorrei eliminare completamente una riga, quindi uso dd. Tuttavia, ho quindi bisogno di incollare quella linea in un'altra posizione all'interno di una linea, ma questo inserisce una nuova linea prima di incollare, quindi, rendendo molto difficile per me ottenere il risultato desiderato. Per esempio,

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

quando lo faccio con il codice sopra ottengo:

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

che è molto lontano dal risultato che voglio ... come posso sopprimere questo comportamento newline o usare un altro metodo che lo fa in modo molto efficiente? Non penso che d $ sia buono perché non devo solo andare all'inizio della riga, ma se voglio eliminare anche la riga vuota devo eliminarla in un altro registro, penso che dovrebbe esserci un modo più semplice! Grazie.



1
non è un duplicato, come ho detto, voglio un modo più efficiente rispetto all'inizio della riga, inoltre voglio effettivamente rimuovere la riga completa con il carattere di nuova riga .... non solo il contenuto della riga
fYre

Oh, capisco cosa intendi adesso. Semplicemente non era molto chiaro per me quello che stavi cercando di realizzare.
EvergreenTree

1
0Delimina riga tranne l'interruzione di riga. E che gJunire le linee. Ora puoi inserire il testo senza linea di interruzione e nessuna linea vuota.
Alex Kroll,

Risposte:


9

Puoi andare ovunque nella riga sopra la riga che desideri eliminare, quindi premere JDe incollarlo con pil punto desiderato.

  • Junisce le due righe e ti sposta all'inizio del testo che desideri eliminare. Ciò elimina un carattere di nuova riga e il rientro della riga che si desidera spostare.
  • D cancella dalla posizione corrente del cursore fino alla fine della riga ma conserva il carattere di nuova riga.

Suggerimento: è possibile utilizzarlo :puse è stato eliminato Do eliminato y$e si desidera incollarlo con una nuova riga.


3

Non molto più semplice, ma leggermente più efficiente, e puoi anche creare mappe in modalità normale per entrambe le sequenze:

  • strattone: vai alla linea che vuoi spostare, quindi ^D"_dd
  • incollare: vai alla parola che vuoi sostituire, quindi viwp

2

Puoi ottenere qualcosa che funziona abbastanza bene con un imap. Aggiungi quanto segue al tuo vimrc:

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

Questo creerà una mappatura per CTRL-aincollare l'ultimo testo eliminato (con ddo simile). Se preferisci, puoi ovviamente usare una chiave diversa per la mappatura.

Riferimenti:

:h i_CTRL-R
:h quote1
:h J

1

Anche questo mi viene in mente, non avrei mai pensato di ottimizzarlo prima, ma questa mappatura funziona:

nmap dil ^d$

dilè "delete in linea", simile a diw, di"e così via


1

Incolla senza nuova linea

Metti questo nel tuo file .vimrc:

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

Esempio:

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

Ora puoi digitare gpper inserire #D51B3Fdopo color:mentre il mio cursore è :in modalità normale.

Yank senza nuova linea

Usa la risposta di flukus:

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

come acronimo di delete inner line . Questo elimina anche il rientro principale.


0

È possibile selezionare il testo che si desidera copiare premendo, vquindi inserirlo nel buffer premendo ye incollandolo ovunque p. Non inserisce alcuna nuova riga.


Vero, ma questo lascia ancora una riga vuota.
Muru,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.